; ModuleID = '<stdin>'
source_filename = "pair_scan_by_key.cui"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.thrust::system::detail::sequential::tag" = type { i8 }
%"struct.thrust::detail::functional::actor" = type { i8 }
%"struct.thrust::detail::functional::actor.0" = type { i8 }
%"struct.thrust::detail::functional::actor.3" = type { i8 }
%"struct.thrust::detail::functional::actor.6" = type { i8 }
%"struct.thrust::detail::functional::actor.9" = type { i8 }
%"struct.thrust::detail::functional::actor.12" = type { i8 }
%"struct.thrust::detail::functional::actor.15" = type { i8 }
%"struct.thrust::detail::functional::actor.18" = type { i8 }
%"struct.thrust::detail::functional::actor.21" = type { i8 }
%"struct.thrust::detail::functional::actor.24" = type { i8 }
%"class.std::ios_base::Init" = type { i8 }
%"struct.thrust::system::cuda::detail::bulk_::detail::cursor" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29" = type { i8 }
%"struct.thrust::detail::seq_t" = type { i8 }
%"struct.thrust::system::cpp::detail::par_t" = type { i8 }
%"struct.thrust::system::cuda::detail::par_t" = type { i8 }
%class.VariableUnitTest = type { %class.UnitTest }
%class.UnitTest = type { i32 (...)**, %"class.std::basic_string" }
%"class.std::basic_string" = type { %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider" }
%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider" = type { i8* }
%"class.thrust::system::cuda::detail::cuda_error_category" = type { %"class.thrust::system::error_category" }
%"class.thrust::system::error_category" = type { i32 (...)** }
%"class.thrust::system::detail::system_error_category" = type { %"class.thrust::system::error_category" }
%"class.thrust::system::detail::generic_error_category" = type { %"class.thrust::system::error_category" }
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" = type { i32, [3 x i32], i32, i32, i32, i32, i32, i64, i32 }
%"struct.thrust::system::detail::sequential::execution_policy" = type { i8 }
%"class.thrust::detail::functional::argument" = type { i8 }
%"class.thrust::detail::functional::argument.1" = type { i8 }
%"class.thrust::detail::functional::argument.4" = type { i8 }
%"class.thrust::detail::functional::argument.7" = type { i8 }
%"class.thrust::detail::functional::argument.10" = type { i8 }
%"class.thrust::detail::functional::argument.13" = type { i8 }
%"class.thrust::detail::functional::argument.16" = type { i8 }
%"class.thrust::detail::functional::argument.19" = type { i8 }
%"class.thrust::detail::functional::argument.22" = type { i8 }
%"class.thrust::detail::functional::argument.25" = type { i8 }
%"struct.thrust::system::detail::sequential::execution_policy.30" = type { i8 }
%"struct.thrust::system::cpp::detail::execution_policy" = type { i8 }
%"struct.thrust::system::cuda::detail::execution_policy" = type { i8 }
%"class.std::allocator" = type { i8 }
%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep" = type { %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base" }
%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base" = type { i64, i64, i32 }
%"class.__gnu_cxx::new_allocator" = type { i8 }
%"class.std::type_info" = type { i32 (...)**, i8* }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = 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 { i64*, i64*, i64* }
%"struct.unittest::for_each_type" = type { i8 }
%struct.TestPairScanByKey = type { i8 }
%"struct.unittest::for_each_type.41" = type { i8 }
%"class.std::allocator.38" = type { i8 }
%"class.thrust::host_vector" = type { %"class.thrust::detail::vector_base" }
%"class.thrust::detail::vector_base" = type { %"class.thrust::detail::contiguous_storage", i64 }
%"class.thrust::detail::contiguous_storage" = type { %"class.std::allocator.42", %"class.thrust::detail::normal_iterator", i64 }
%"class.std::allocator.42" = type { i8 }
%"class.thrust::detail::normal_iterator" = type { %"class.thrust::iterator_adaptor" }
%"class.thrust::iterator_adaptor" = type { i8* }
%"class.thrust::host_vector.45" = type { %"class.thrust::detail::vector_base.46" }
%"class.thrust::detail::vector_base.46" = type { %"class.thrust::detail::contiguous_storage.47", i64 }
%"class.thrust::detail::contiguous_storage.47" = type { %"class.std::allocator.48", %"class.thrust::detail::normal_iterator.51", i64 }
%"class.std::allocator.48" = type { i8 }
%"class.thrust::detail::normal_iterator.51" = type { %"class.thrust::iterator_adaptor.52" }
%"class.thrust::iterator_adaptor.52" = type { %"struct.thrust::pair"* }
%"struct.thrust::pair" = type { i8, i8 }
%struct.make_pair_functor = type { i8 }
%"class.thrust::device_vector" = type { %"class.thrust::detail::vector_base.54" }
%"class.thrust::detail::vector_base.54" = type { %"class.thrust::detail::contiguous_storage.55", i64 }
%"class.thrust::detail::contiguous_storage.55" = type { %"class.thrust::device_malloc_allocator", %"class.thrust::detail::normal_iterator.56", i64 }
%"class.thrust::device_malloc_allocator" = type { i8 }
%"class.thrust::detail::normal_iterator.56" = type { %"class.thrust::iterator_adaptor.57" }
%"class.thrust::iterator_adaptor.57" = type { %"class.thrust::device_ptr" }
%"class.thrust::device_ptr" = type { %"class.thrust::pointer" }
%"class.thrust::pointer" = type { %"class.thrust::iterator_adaptor.59" }
%"class.thrust::iterator_adaptor.59" = type { i8* }
%"class.thrust::device_vector.61" = type { %"class.thrust::detail::vector_base.62" }
%"class.thrust::detail::vector_base.62" = type { %"class.thrust::detail::contiguous_storage.63", i64 }
%"class.thrust::detail::contiguous_storage.63" = type { %"class.thrust::device_malloc_allocator.64", %"class.thrust::detail::normal_iterator.66", i64 }
%"class.thrust::device_malloc_allocator.64" = type { i8 }
%"class.thrust::detail::normal_iterator.66" = type { %"class.thrust::iterator_adaptor.67" }
%"class.thrust::iterator_adaptor.67" = type { %"class.thrust::device_ptr.69" }
%"class.thrust::device_ptr.69" = type { %"class.thrust::pointer.70" }
%"class.thrust::pointer.70" = type { %"class.thrust::iterator_adaptor.71" }
%"class.thrust::iterator_adaptor.71" = type { %"struct.thrust::pair"* }
%"class.thrust::host_vector.73" = type { %"class.thrust::detail::vector_base.74" }
%"class.thrust::detail::vector_base.74" = type { %"class.thrust::detail::contiguous_storage.75", i64 }
%"class.thrust::detail::contiguous_storage.75" = type { %"class.std::allocator.76", %"class.thrust::detail::normal_iterator.79", i64 }
%"class.std::allocator.76" = type { i8 }
%"class.thrust::detail::normal_iterator.79" = type { %"class.thrust::iterator_adaptor.80" }
%"class.thrust::iterator_adaptor.80" = type { i8* }
%"struct.thrust::pair.82" = type { i32, i32 }
%"struct.thrust::equal_to" = type { i8 }
%struct.add_pairs = type { i8 }
%struct.TestPairScanByKey.467 = type { i8 }
%"struct.unittest::for_each_type.468" = type { i8 }
%"class.thrust::counting_iterator" = type { %"class.thrust::iterator_adaptor.83" }
%"class.thrust::iterator_adaptor.83" = type { i64 }
%"struct.unittest::random_integer" = type { i8 }
%"struct.thrust::system::cpp::detail::tag" = type { i8 }
%"struct.thrust::execution_policy.88" = type { i8 }
%"struct.thrust::detail::execution_policy_base.85" = type { i8 }
%"struct.unittest::random_integer.176" = type { i8 }
%"struct.thrust::system::cuda::detail::tag" = type { i8 }
%"struct.thrust::execution_policy.120" = type { i8 }
%"struct.thrust::detail::execution_policy_base.121" = type { i8 }
%"class.unittest::UnitTestFailure" = type { %"class.unittest::UnitTestException" }
%"class.unittest::UnitTestException" = type { %"class.std::basic_string" }
%"struct.thrust::any_system_tag" = type { i8 }
%"struct.thrust::execution_policy.89" = type { i8 }
%"class.__gnu_cxx::new_allocator.43" = type { i8 }
%"class.thrust::iterator_facade" = type { i8 }
%"struct.thrust::detail::integral_constant" = type { i8 }
%"struct.thrust::detail::has_trivial_copy_constructor" = type { i8 }
%"struct.thrust::detail::fill_functor" = type { i8 }
%"struct.thrust::detail::host_generate_functor" = type { %"struct.thrust::detail::fill_functor" }
%"struct.thrust::system::detail::sequential::execution_policy.87" = type { i8 }
%"struct.thrust::detail::wrapped_function" = type { %"struct.thrust::detail::host_generate_functor" }
%"class.thrust::zip_iterator" = type { %"class.thrust::tuple" }
%"class.thrust::tuple" = type { %"struct.thrust::detail::cons" }
%"struct.thrust::detail::cons" = type { %"class.thrust::counting_iterator", %"struct.thrust::detail::cons.92" }
%"struct.thrust::detail::cons.92" = type { %"class.thrust::detail::normal_iterator" }
%"struct.thrust::detail::unary_transform_functor" = type { %"struct.unittest::random_integer" }
%"struct.thrust::detail::wrapped_function.93" = type { %"struct.thrust::detail::unary_transform_functor" }
%"class.thrust::detail::tuple_of_iterator_references" = type { %"class.thrust::tuple.94" }
%"class.thrust::tuple.94" = type { %"struct.thrust::detail::cons.95" }
%"struct.thrust::detail::cons.95" = type { i64, %"struct.thrust::detail::cons.96" }
%"struct.thrust::detail::cons.96" = type { i8* }
%"class.thrust::iterator_facade.91" = type { i8 }
%"class.thrust::iterator_facade.84" = type { i8 }
%"class.thrust::random::linear_congruential_engine" = type { i32 }
%"class.thrust::random::uniform_int_distribution" = type { %"struct.thrust::pair" }
%"struct.thrust::random::detail::static_mod" = type { i8 }
%"class.thrust::random::uniform_real_distribution" = type { %"struct.thrust::pair.97" }
%"struct.thrust::pair.97" = type { double, double }
%"struct.thrust::random::detail::static_mod.98" = type { i8 }
%"struct.thrust::detail::dereference_iterator" = type { i8 }
%"struct.thrust::null_type" = type { i8 }
%"struct.thrust::detail::increment_iterator" = type { i8 }
%"class.__gnu_cxx::new_allocator.49" = type { i8 }
%"class.thrust::iterator_facade.53" = type { i8 }
%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator" = type { %"class.std::allocator.48"* }
%"struct.thrust::detail::wrapped_function.99" = type { %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator" }
%"class.thrust::zip_iterator.100" = type { %"class.thrust::tuple.102" }
%"class.thrust::tuple.102" = type { %"struct.thrust::detail::cons.103" }
%"struct.thrust::detail::cons.103" = type { %"class.thrust::detail::normal_iterator", %"struct.thrust::detail::cons.104" }
%"struct.thrust::detail::cons.104" = type { %"class.thrust::detail::normal_iterator", %"struct.thrust::detail::cons.105" }
%"struct.thrust::detail::cons.105" = type { %"class.thrust::detail::normal_iterator.51" }
%"struct.thrust::detail::binary_transform_functor" = type { %struct.make_pair_functor }
%"struct.thrust::detail::wrapped_function.106" = type { %"struct.thrust::detail::binary_transform_functor" }
%"class.thrust::detail::tuple_of_iterator_references.107" = type { %"class.thrust::tuple.108" }
%"class.thrust::tuple.108" = type { %"struct.thrust::detail::cons.109" }
%"struct.thrust::detail::cons.109" = type { i8*, %"struct.thrust::detail::cons.110" }
%"struct.thrust::detail::cons.110" = type { i8*, %"struct.thrust::detail::cons.111" }
%"struct.thrust::detail::cons.111" = type { %"struct.thrust::pair"* }
%"class.thrust::iterator_facade.101" = type { i8 }
%"struct.thrust::random_access_traversal_tag" = type { i8 }
%"class.thrust::detail::normal_iterator.112" = type { %"class.thrust::iterator_adaptor.113" }
%"class.thrust::iterator_adaptor.113" = type { i8* }
%"class.thrust::iterator_facade.60" = type { i8 }
%"class.thrust::iterator_facade.58" = type { i8 }
%"class.std::length_error" = type { %"class.std::logic_error" }
%"class.std::logic_error" = type { %"class.std::exception", %"class.std::basic_string" }
%"class.std::exception" = type { i32 (...)** }
%"class.thrust::iterator_facade.114" = type { i8 }
%"class.thrust::device_ptr.115" = type { %"class.thrust::pointer.116" }
%"class.thrust::pointer.116" = type { %"class.thrust::iterator_adaptor.117" }
%"class.thrust::iterator_adaptor.117" = type { i8* }
%"struct.thrust::system::cuda::detail::execution_policy.119" = type { i8 }
%"class.thrust::system::system_error" = type { %"class.std::runtime_error", %"class.thrust::system::error_code", %"class.std::basic_string" }
%"class.std::runtime_error" = type { %"class.std::exception", %"class.std::basic_string" }
%"class.thrust::system::error_code" = type { i32, %"class.thrust::system::error_category"* }
%"class.thrust::system::error_condition" = type { i32, %"class.thrust::system::error_category"* }
%"class.thrust::iterator_facade.118" = type { i8 }
%"class.thrust::device_ptr.122" = type { %"class.thrust::pointer.123" }
%"class.thrust::pointer.123" = type { %"class.thrust::iterator_adaptor.124" }
%"class.thrust::iterator_adaptor.124" = type { i8* }
%"class.std::bad_alloc" = type { %"class.std::exception" }
%"class.thrust::pointer.126" = type { %"class.thrust::iterator_adaptor.127" }
%"class.thrust::iterator_adaptor.127" = type { i8* }
%"class.thrust::pointer.129" = type { %"class.thrust::iterator_adaptor.130" }
%"class.thrust::iterator_adaptor.130" = type { i8* }
%"class.thrust::system::detail::bad_alloc" = type { %"class.std::bad_alloc", %"class.std::basic_string" }
%"class.thrust::iterator_facade.131" = type { i8 }
%"class.thrust::iterator_facade.128" = type { i8 }
%"class.thrust::iterator_facade.125" = type { i8 }
%"struct.thrust::system::cuda::detail::cross_system" = type { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }
%"struct.thrust::system::cpp::detail::execution_policy.86" = type { i8 }
%"struct.thrust::detail::execution_policy_base.132" = type { i8 }
%"class.thrust::device_reference" = type { %"class.thrust::reference" }
%"class.thrust::reference" = type { %"class.thrust::device_ptr" }
%struct.CUstream_st = type opaque
%"struct.thrust::execution_policy.133" = type { i8 }
%"class.thrust::detail::normal_iterator.134" = type { %"class.thrust::iterator_adaptor.135" }
%"class.thrust::iterator_adaptor.135" = type { %"struct.thrust::pair"* }
%"class.thrust::iterator_facade.72" = type { i8 }
%"class.thrust::iterator_facade.68" = type { i8 }
%"class.thrust::iterator_facade.136" = type { i8 }
%"class.thrust::device_ptr.137" = type { %"class.thrust::pointer.138" }
%"class.thrust::pointer.138" = type { %"class.thrust::iterator_adaptor.139" }
%"class.thrust::iterator_adaptor.139" = type { %"struct.thrust::pair"* }
%"class.thrust::pointer.141" = type { %"class.thrust::iterator_adaptor.142" }
%"class.thrust::iterator_adaptor.142" = type { %"struct.thrust::pair"* }
%"class.thrust::iterator_facade.143" = type { i8 }
%"class.thrust::iterator_facade.140" = type { i8 }
%"class.thrust::device_reference.144" = type { %"class.thrust::reference.145" }
%"class.thrust::reference.145" = type { %"class.thrust::device_ptr.69" }
%"struct.thrust::detail::allocator_traits_detail::gozer" = type { i8 }
%"struct.thrust::detail::wrapped_function.146" = type { %"struct.thrust::detail::allocator_traits_detail::gozer" }
%"class.thrust::tuple.147" = type { %"struct.thrust::detail::cons.148" }
%"struct.thrust::detail::cons.148" = type { i32*, %"struct.thrust::detail::cons.149" }
%"struct.thrust::detail::cons.149" = type { i32* }
%"class.thrust::system::cuda::detail::bulk_::parallel_group" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base" = type { %"class.thrust::system::cuda::detail::bulk_::concurrent_group", i32, i32 }
%"class.thrust::system::cuda::detail::bulk_::concurrent_group" = type { %"class.thrust::system::cuda::detail::bulk_::parallel_group.150", i32 }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.150" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151" = type { %"class.thrust::system::cuda::detail::bulk_::agent", i32, i32 }
%"class.thrust::system::cuda::detail::bulk_::agent" = type { i32 }
%"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel" = type { i8 }
%"class.thrust::tuple.152" = type { %"struct.thrust::detail::cons.153" }
%"struct.thrust::detail::cons.153" = type { i64*, %"struct.thrust::detail::cons.154" }
%"struct.thrust::detail::cons.154" = type { i64* }
%"class.thrust::system::cuda::detail::bulk_::future" = type <{ %struct.CUstream_st*, %struct.CUevent_st*, i8, [7 x i8] }>
%struct.CUevent_st = type opaque
%"class.thrust::system::cuda::detail::bulk_::async_launch" = type { i8, %"class.thrust::system::cuda::detail::bulk_::parallel_group", %struct.CUstream_st*, %struct.CUevent_st* }
%"class.thrust::system::cuda::detail::bulk_::detail::closure" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.155" }
%"class.thrust::tuple.155" = type { %"struct.thrust::detail::cons.156" }
%"struct.thrust::detail::cons.156" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.157" }
%"struct.thrust::detail::cons.157" = type { %"class.thrust::device_ptr.69", %"struct.thrust::detail::cons.158" }
%"struct.thrust::detail::cons.158" = type { %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::cons.159" }
%"struct.thrust::detail::cons.159" = type { i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.160" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.161" }
%"class.thrust::tuple.161" = type { %"struct.thrust::detail::cons.162" }
%"struct.thrust::detail::cons.162" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.163" }
%"struct.thrust::detail::cons.163" = type { %"class.thrust::device_ptr.69", %"struct.thrust::detail::cons.164" }
%"struct.thrust::detail::cons.164" = type { %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::cons.165" }
%"struct.thrust::detail::cons.165" = type { i64 }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher" = type { i8 }
%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t" = type { i64, i64, i32, i32, i32, i64 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%struct.cudaFuncAttributes = type { i64, i64, i64, i32, i32, i32, i32, i32 }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function" = type { i8 }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.171" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::tuple.173" = type { %"struct.thrust::detail::cons.174" }
%"struct.thrust::detail::cons.174" = type { i32*, %"struct.thrust::detail::cons.175" }
%"struct.thrust::detail::cons.175" = type { i32* }
%struct.dim3 = type { i32, i32, i32 }
%"class.__gnu_cxx::new_allocator.77" = type { i8 }
%"class.thrust::iterator_facade.81" = type { i8 }
%"struct.thrust::detail::has_trivial_copy_constructor.177" = type { i8 }
%"struct.thrust::detail::fill_functor.178" = type { i8 }
%"struct.thrust::detail::host_generate_functor.179" = type { %"struct.thrust::detail::fill_functor.178" }
%"struct.thrust::detail::wrapped_function.180" = type { %"struct.thrust::detail::host_generate_functor.179" }
%"class.thrust::zip_iterator.181" = type { %"class.thrust::tuple.183" }
%"class.thrust::tuple.183" = type { %"struct.thrust::detail::cons.184" }
%"struct.thrust::detail::cons.184" = type { %"class.thrust::counting_iterator", %"struct.thrust::detail::cons.185" }
%"struct.thrust::detail::cons.185" = type { %"class.thrust::detail::normal_iterator.79" }
%"struct.thrust::detail::unary_transform_functor.186" = type { %"struct.unittest::random_integer.176" }
%"struct.thrust::detail::wrapped_function.187" = type { %"struct.thrust::detail::unary_transform_functor.186" }
%"class.thrust::detail::tuple_of_iterator_references.188" = type { %"class.thrust::tuple.189" }
%"class.thrust::tuple.189" = type { %"struct.thrust::detail::cons.190" }
%"struct.thrust::detail::cons.190" = type { i64, %"struct.thrust::detail::cons.191" }
%"struct.thrust::detail::cons.191" = type { i8* }
%"class.thrust::iterator_facade.182" = type { i8 }
%"class.thrust::random::uniform_int_distribution.192" = type { %"struct.thrust::pair.193" }
%"struct.thrust::pair.193" = type { i32, i32 }
%"class.thrust::detail::normal_iterator.194" = type { %"class.thrust::iterator_adaptor.195" }
%"class.thrust::iterator_adaptor.195" = type { i8* }
%"class.thrust::iterator_facade.196" = type { i8 }
%"struct.thrust::detail::integral_constant.197" = type { i8 }
%"class.thrust::detail::temporary_array" = type { %"class.thrust::detail::contiguous_storage.198" }
%"class.thrust::detail::contiguous_storage.198" = type { %"struct.thrust::detail::no_throw_allocator", %"class.thrust::detail::normal_iterator.199", i64 }
%"struct.thrust::detail::no_throw_allocator" = type { %"class.thrust::detail::temporary_allocator" }
%"class.thrust::detail::temporary_allocator" = type { %"struct.thrust::system::cuda::detail::tag"* }
%"class.thrust::detail::normal_iterator.199" = type { %"class.thrust::iterator_adaptor.200" }
%"class.thrust::iterator_adaptor.200" = type { %"class.thrust::pointer.202" }
%"class.thrust::pointer.202" = type { %"class.thrust::iterator_adaptor.203" }
%"class.thrust::iterator_adaptor.203" = type { i32* }
%"class.thrust::reference.205" = type { %"class.thrust::pointer.202" }
%"struct.thrust::detail::binary_negate" = type { %"struct.thrust::equal_to" }
%"class.thrust::detail::temporary_array.206" = type { %"class.thrust::detail::contiguous_storage.207" }
%"class.thrust::detail::contiguous_storage.207" = type { %"struct.thrust::detail::no_throw_allocator.208", %"class.thrust::detail::normal_iterator.212", i64 }
%"struct.thrust::detail::no_throw_allocator.208" = type { %"class.thrust::detail::temporary_allocator.209" }
%"class.thrust::detail::temporary_allocator.209" = type { %"struct.thrust::system::cuda::detail::tag"* }
%"class.thrust::detail::normal_iterator.212" = type { %"class.thrust::iterator_adaptor.213" }
%"class.thrust::iterator_adaptor.213" = type { %"class.thrust::pointer.141" }
%"struct.thrust::negate" = type { i8 }
%"class.thrust::reference.215" = type { %"class.thrust::pointer.141" }
%"class.thrust::zip_iterator.221" = type { %"class.thrust::tuple.223" }
%"class.thrust::tuple.223" = type { %"struct.thrust::detail::cons.224" }
%"struct.thrust::detail::cons.224" = type { %"class.thrust::detail::normal_iterator.212", %"struct.thrust::detail::cons.220" }
%"struct.thrust::detail::cons.220" = type { %"class.thrust::detail::normal_iterator.199" }
%"class.thrust::zip_iterator.216" = type { %"class.thrust::tuple.218" }
%"class.thrust::tuple.218" = type { %"struct.thrust::detail::cons.219" }
%"struct.thrust::detail::cons.219" = type { %"class.thrust::detail::normal_iterator.66", %"struct.thrust::detail::cons.220" }
%"struct.thrust::system::detail::generic::detail::segmented_scan_functor" = type { %struct.add_pairs }
%"class.thrust::iterator_facade.201" = type { i8 }
%"class.thrust::iterator_facade.214" = type { i8 }
%"class.thrust::iterator_facade.222" = type { i8 }
%"class.thrust::detail::tagged_allocator" = type { i8 }
%"class.thrust::iterator_facade.204" = type { i8 }
%"struct.thrust::pair.225" = type { %"class.thrust::pointer.202", i64 }
%"struct.thrust::pair.226" = type { %"class.thrust::pointer.202", i64 }
%"struct.thrust::system::cuda::detail::cross_system.227" = type { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }
%"struct.thrust::detail::execution_policy_base.229" = type { i8 }
%"struct.thrust::execution_policy.228" = type { i8 }
%"class.thrust::zip_iterator.230" = type { %"class.thrust::tuple.232" }
%"class.thrust::tuple.232" = type { %"struct.thrust::detail::cons.233" }
%"struct.thrust::detail::cons.233" = type { %"class.thrust::detail::normal_iterator.56", %"struct.thrust::detail::cons.234" }
%"struct.thrust::detail::cons.234" = type { %"class.thrust::detail::normal_iterator.56", %"struct.thrust::detail::cons.220" }
%"struct.thrust::detail::binary_transform_functor.235" = type { %"struct.thrust::detail::binary_negate" }
%"struct.thrust::detail::wrapped_function.236" = type { %"struct.thrust::detail::binary_transform_functor.235" }
%"class.thrust::iterator_facade.231" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.237" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.238" }
%"class.thrust::tuple.238" = type { %"struct.thrust::detail::cons.239" }
%"struct.thrust::detail::cons.239" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.240" }
%"struct.thrust::detail::cons.240" = type { %"class.thrust::zip_iterator.230", %"struct.thrust::detail::cons.241" }
%"struct.thrust::detail::cons.241" = type { %"struct.thrust::detail::wrapped_function.236", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.249" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.250" }
%"class.thrust::tuple.250" = type { %"struct.thrust::detail::cons.251" }
%"struct.thrust::detail::cons.251" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.252" }
%"struct.thrust::detail::cons.252" = type { %"class.thrust::zip_iterator.230", %"struct.thrust::detail::cons.253" }
%"struct.thrust::detail::cons.253" = type { %"struct.thrust::detail::wrapped_function.236", %"struct.thrust::detail::cons.165" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.247" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.259" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::advance_iterator" = type { i64 }
%"class.thrust::detail::tagged_allocator.210" = type { i8 }
%"struct.thrust::pair.261" = type { %"class.thrust::pointer.141", i64 }
%"struct.thrust::pair.262" = type { %"class.thrust::pointer.141", i64 }
%"struct.thrust::system::detail::generic::detail::new_value_if" = type { %"struct.thrust::negate", %"struct.thrust::pair" }
%"class.thrust::zip_iterator.263" = type { %"class.thrust::tuple.265" }
%"class.thrust::tuple.265" = type { %"struct.thrust::detail::cons.266" }
%"struct.thrust::detail::cons.266" = type { %"class.thrust::detail::normal_iterator.66", %"struct.thrust::detail::cons.267" }
%"struct.thrust::detail::cons.267" = type { %"class.thrust::detail::normal_iterator.199", %"struct.thrust::detail::cons.268" }
%"struct.thrust::detail::cons.268" = type { %"class.thrust::detail::normal_iterator.212" }
%"struct.thrust::detail::binary_transform_functor.269" = type { %"struct.thrust::system::detail::generic::detail::new_value_if" }
%"struct.thrust::detail::wrapped_function.270" = type { %"struct.thrust::detail::binary_transform_functor.269" }
%"class.thrust::iterator_facade.264" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.271" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.272" }
%"class.thrust::tuple.272" = type { %"struct.thrust::detail::cons.273" }
%"struct.thrust::detail::cons.273" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.274" }
%"struct.thrust::detail::cons.274" = type { %"class.thrust::zip_iterator.263", %"struct.thrust::detail::cons.275" }
%"struct.thrust::detail::cons.275" = type { %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.283" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.284" }
%"class.thrust::tuple.284" = type { %"struct.thrust::detail::cons.285" }
%"struct.thrust::detail::cons.285" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.286" }
%"struct.thrust::detail::cons.286" = type { %"class.thrust::zip_iterator.263", %"struct.thrust::detail::cons.287" }
%"struct.thrust::detail::cons.287" = type { %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::cons.165" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.281" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.293" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::system::cuda::detail::bulk_::async_launch.295" = type { i8, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", %struct.CUstream_st*, %struct.CUevent_st* }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.296" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297" = type { %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", i32, i32 }
%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298" = type { %"class.thrust::system::cuda::detail::bulk_::parallel_group.299", i32 }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.299" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300" = type { %"class.thrust::system::cuda::detail::bulk_::agent.301", i32 }
%"class.thrust::system::cuda::detail::bulk_::agent.301" = type { i32 }
%"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n" = type { i8 }
%"class.thrust::system::cuda::detail::aligned_decomposition" = type { i64, i64, i64, i64, i64 }
%"class.thrust::detail::temporary_array.302" = type { %"class.thrust::detail::contiguous_storage.303" }
%"class.thrust::detail::contiguous_storage.303" = type { %"struct.thrust::detail::no_throw_allocator.304", %"class.thrust::detail::normal_iterator.308", i64 }
%"struct.thrust::detail::no_throw_allocator.304" = type { %"class.thrust::detail::temporary_allocator.305" }
%"class.thrust::detail::temporary_allocator.305" = type { %"struct.thrust::system::cuda::detail::tag"* }
%"class.thrust::detail::normal_iterator.308" = type { %"class.thrust::iterator_adaptor.309" }
%"class.thrust::iterator_adaptor.309" = type { %"class.thrust::pointer.311" }
%"class.thrust::pointer.311" = type { %"class.thrust::iterator_adaptor.312" }
%"class.thrust::iterator_adaptor.312" = type { %"class.thrust::tuple.314"* }
%"class.thrust::tuple.314" = type { %"struct.thrust::detail::cons.315" }
%"struct.thrust::detail::cons.315" = type { %"struct.thrust::pair", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::async_launch.316" = type { i8, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", %struct.CUstream_st*, %struct.CUevent_st* }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.317" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318" = type { %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", i32, i32 }
%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319" = type { %"class.thrust::system::cuda::detail::bulk_::parallel_group.320", i32 }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.320" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321" = type { %"class.thrust::system::cuda::detail::bulk_::agent.322", i32 }
%"class.thrust::system::cuda::detail::bulk_::agent.322" = type { i32 }
%"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::async_launch.323" = type { i8, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", %struct.CUstream_st*, %struct.CUevent_st* }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.324" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325" = type { %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", i32, i32 }
%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326" = type { %"class.thrust::system::cuda::detail::bulk_::parallel_group.327", i32 }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.327" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328" = type { %"class.thrust::system::cuda::detail::bulk_::agent.301", i32 }
%"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep" = type { i8 }
%"class.thrust::iterator_facade.217" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.329" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", %"class.thrust::tuple.330" }
%"class.thrust::tuple.330" = type { %"struct.thrust::detail::cons.331" }
%"struct.thrust::detail::cons.331" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.332" }
%"struct.thrust::detail::cons.332" = type { %"class.thrust::zip_iterator.221", %"struct.thrust::detail::cons.333" }
%"struct.thrust::detail::cons.333" = type { i64, %"struct.thrust::detail::cons.334" }
%"struct.thrust::detail::cons.334" = type <{ %"class.thrust::zip_iterator.216", %"struct.thrust::detail::cons.335", [7 x i8] }>
%"struct.thrust::detail::cons.335" = type { %"struct.thrust::system::detail::generic::detail::segmented_scan_functor" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.344" = type { %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", %"class.thrust::tuple.345" }
%"class.thrust::tuple.345" = type { %"struct.thrust::detail::cons.346" }
%"struct.thrust::detail::cons.346" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.347" }
%"struct.thrust::detail::cons.347" = type { %"class.thrust::zip_iterator.221", %"struct.thrust::detail::cons.348" }
%"struct.thrust::detail::cons.348" = type { %"class.thrust::system::cuda::detail::aligned_decomposition", %"struct.thrust::detail::cons.349" }
%"struct.thrust::detail::cons.349" = type <{ %"class.thrust::detail::normal_iterator.308", %"struct.thrust::detail::cons.335", [7 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::closure.358" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", %"class.thrust::tuple.359" }
%"class.thrust::tuple.359" = type { %"struct.thrust::detail::cons.360" }
%"struct.thrust::detail::cons.360" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.361" }
%"struct.thrust::detail::cons.361" = type { %"class.thrust::detail::normal_iterator.308", %"struct.thrust::detail::cons.362" }
%"struct.thrust::detail::cons.362" = type { i64, %"struct.thrust::detail::cons.349" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.370" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", %"class.thrust::tuple.371" }
%"class.thrust::tuple.371" = type { %"struct.thrust::detail::cons.372" }
%"struct.thrust::detail::cons.372" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.373" }
%"struct.thrust::detail::cons.373" = type { %"class.thrust::zip_iterator.221", %"struct.thrust::detail::cons.374" }
%"struct.thrust::detail::cons.374" = type { %"class.thrust::system::cuda::detail::aligned_decomposition", %"struct.thrust::detail::cons.375" }
%"struct.thrust::detail::cons.375" = type { %"class.thrust::detail::normal_iterator.308", %"struct.thrust::detail::cons.334" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", %"class.thrust::system::cuda::detail::bulk_::parallel_group.296" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.341" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", [4 x i8] }>
%"class.thrust::detail::tagged_allocator.306" = type { i8 }
%"class.thrust::iterator_facade.313" = type { i8 }
%"class.thrust::iterator_facade.310" = type { i8 }
%"struct.thrust::pair.342" = type { %"class.thrust::pointer.311", i64 }
%"struct.thrust::pair.343" = type { %"class.thrust::pointer.311", i64 }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.357", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.357" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.356" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", [4 x i8] }>
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.369", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.369" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", %"class.thrust::system::cuda::detail::bulk_::parallel_group.324" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.368" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", [4 x i8] }>
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.382", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.382" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.381" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::closure.383" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.384" }
%"class.thrust::tuple.384" = type { %"struct.thrust::detail::cons.385" }
%"struct.thrust::detail::cons.385" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.386" }
%"struct.thrust::detail::cons.386" = type { %"class.thrust::pointer.311", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.394" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.395" }
%"class.thrust::tuple.395" = type { %"struct.thrust::detail::cons.396" }
%"struct.thrust::detail::cons.396" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.397" }
%"struct.thrust::detail::cons.397" = type { %"class.thrust::pointer.311", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.392" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.403" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.405" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.406" }
%"class.thrust::tuple.406" = type { %"struct.thrust::detail::cons.407" }
%"struct.thrust::detail::cons.407" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.408" }
%"struct.thrust::detail::cons.408" = type { %"class.thrust::pointer.141", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.416" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.417" }
%"class.thrust::tuple.417" = type { %"struct.thrust::detail::cons.418" }
%"struct.thrust::detail::cons.418" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.419" }
%"struct.thrust::detail::cons.419" = type { %"class.thrust::pointer.141", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.414" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.425" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::normal_iterator.427" = type { %"class.thrust::iterator_adaptor.428" }
%"class.thrust::iterator_adaptor.428" = type { %"class.thrust::device_ptr.137" }
%"class.std::basic_ostringstream" = type { %"class.std::basic_ostream.base", %"class.std::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { i32 (...)** }
%"class.std::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::basic_string" }
%"class.std::basic_streambuf" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"class.std::locale" }
%"class.std::locale" = type { %"class.std::locale::_Impl"* }
%"class.std::locale::_Impl" = type { i32, %"class.std::locale::facet"**, i64, %"class.std::locale::facet"**, i8** }
%"class.std::locale::facet" = type <{ i32 (...)**, i32, [4 x i8] }>
%"class.std::basic_ios" = type { %"class.std::ios_base", %"class.std::basic_ostream"*, i8, i8, %"class.std::basic_streambuf"*, %"class.std::ctype"*, %"class.std::num_put"*, %"class.std::num_get"* }
%"class.std::ios_base" = type { i32 (...)**, i64, i64, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"class.std::locale" }
%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"class.std::ios_base"*, i32)*, i32, i32 }
%"struct.std::ios_base::_Words" = type { i8*, i64 }
%"class.std::basic_ostream" = type { i32 (...)**, %"class.std::basic_ios" }
%"class.std::ctype" = type <{ %"class.std::locale::facet.base", [4 x i8], %struct.__locale_struct*, i8, [7 x i8], i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8, [6 x i8] }>
%"class.std::locale::facet.base" = type <{ i32 (...)**, i32 }>
%struct.__locale_struct = type { [13 x %struct.__locale_data*], i16*, i32*, i32*, [13 x i8*] }
%struct.__locale_data = type opaque
%"class.std::num_put" = type { %"class.std::locale::facet.base", [4 x i8] }
%"class.std::num_get" = type { %"class.std::locale::facet.base", [4 x i8] }
%"struct.thrust::detail::is_same" = type { i8 }
%"class.thrust::detail::move_to_system" = type { %"class.thrust::detail::tagged_iterator_range" }
%"class.thrust::detail::tagged_iterator_range" = type { %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator" }
%"class.thrust::detail::tagged_iterator" = type { %"class.thrust::iterator_adaptor.430" }
%"class.thrust::iterator_adaptor.430" = type { %"class.thrust::detail::normal_iterator.134" }
%"class.thrust::detail::move_to_system.432" = type { %"class.thrust::detail::temporary_array.433" }
%"class.thrust::detail::temporary_array.433" = type { %"class.thrust::detail::contiguous_storage.434" }
%"class.thrust::detail::contiguous_storage.434" = type { %"struct.thrust::detail::no_throw_allocator.435", %"class.thrust::detail::normal_iterator.439", i64 }
%"struct.thrust::detail::no_throw_allocator.435" = type { %"class.thrust::detail::temporary_allocator.436" }
%"class.thrust::detail::temporary_allocator.436" = type { %"struct.thrust::system::cpp::detail::tag"* }
%"class.thrust::detail::normal_iterator.439" = type { %"class.thrust::iterator_adaptor.440" }
%"class.thrust::iterator_adaptor.440" = type { %"class.thrust::pointer.442" }
%"class.thrust::pointer.442" = type { %"class.thrust::iterator_adaptor.443" }
%"class.thrust::iterator_adaptor.443" = type { %"struct.thrust::pair"* }
%"class.thrust::iterator_facade.429" = type { i8 }
%"class.thrust::iterator_facade.431" = type { i8 }
%"class.thrust::detail::tagged_allocator.437" = type { i8 }
%"class.thrust::iterator_facade.444" = type { i8 }
%"class.thrust::iterator_facade.441" = type { i8 }
%"struct.thrust::pair.445" = type { %"class.thrust::pointer.442", i64 }
%"struct.thrust::pair.446" = type { %"class.thrust::pointer.442", i64 }
%"class.thrust::pointer.447" = type { %"class.thrust::iterator_adaptor.448" }
%"class.thrust::iterator_adaptor.448" = type { i8* }
%"class.thrust::iterator_facade.449" = type { i8 }
%"class.thrust::reference.450" = type { %"class.thrust::pointer.442" }
%"class.thrust::device_reference.451" = type { %"class.thrust::reference.452" }
%"class.thrust::reference.452" = type { %"class.thrust::device_ptr.137" }
%"struct.thrust::detail::equal_to" = type { i8 }
%"struct.thrust::pair.453" = type { %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::normal_iterator.439" }
%"class.thrust::zip_iterator.454" = type { %"class.thrust::tuple.456" }
%"class.thrust::tuple.456" = type { %"struct.thrust::detail::cons.457" }
%"struct.thrust::detail::cons.457" = type { %"class.thrust::detail::tagged_iterator", %"struct.thrust::detail::cons.458" }
%"struct.thrust::detail::cons.458" = type { %"class.thrust::detail::normal_iterator.439" }
%"struct.thrust::detail::tuple_binary_predicate" = type { %"struct.thrust::detail::equal_to" }
%"class.thrust::iterator_facade.455" = type { i8 }
%"struct.thrust::detail::unary_negate" = type { %"struct.thrust::detail::tuple_binary_predicate" }
%"struct.thrust::detail::wrapped_function.459" = type { %"struct.thrust::detail::unary_negate" }
%"class.thrust::detail::tuple_of_iterator_references.460" = type { %"class.thrust::tuple.461" }
%"class.thrust::tuple.461" = type { %"struct.thrust::detail::cons.462" }
%"struct.thrust::detail::cons.462" = type { %"struct.thrust::pair"*, %"struct.thrust::detail::cons.463" }
%"struct.thrust::detail::cons.463" = type { %"class.thrust::reference.450" }
%"class.thrust::detail::tuple_of_iterator_references.464" = type { %"class.thrust::tuple.465" }
%"class.thrust::tuple.465" = type { %"struct.thrust::detail::cons.466" }
%"struct.thrust::detail::cons.466" = type { %"struct.thrust::pair"*, %"struct.thrust::detail::cons.111" }
%"struct.thrust::detail::raw_reference_caster" = type { i8 }
%"struct.std::__false_type" = type { i8 }
%"struct.std::forward_iterator_tag" = type { i8 }
%"struct.std::random_access_iterator_tag" = type { i8 }
%"class.thrust::host_vector.469" = type { %"class.thrust::detail::vector_base.470" }
%"class.thrust::detail::vector_base.470" = type { %"class.thrust::detail::contiguous_storage.471", i64 }
%"class.thrust::detail::contiguous_storage.471" = type { %"class.std::allocator.472", %"class.thrust::detail::normal_iterator.475", i64 }
%"class.std::allocator.472" = type { i8 }
%"class.thrust::detail::normal_iterator.475" = type { %"class.thrust::iterator_adaptor.476" }
%"class.thrust::iterator_adaptor.476" = type { i16* }
%"class.thrust::host_vector.478" = type { %"class.thrust::detail::vector_base.479" }
%"class.thrust::detail::vector_base.479" = type { %"class.thrust::detail::contiguous_storage.480", i64 }
%"class.thrust::detail::contiguous_storage.480" = type { %"class.std::allocator.481", %"class.thrust::detail::normal_iterator.484", i64 }
%"class.std::allocator.481" = type { i8 }
%"class.thrust::detail::normal_iterator.484" = type { %"class.thrust::iterator_adaptor.485" }
%"class.thrust::iterator_adaptor.485" = type { %"struct.thrust::pair.487"* }
%"struct.thrust::pair.487" = type { i16, i16 }
%"class.thrust::device_vector.488" = type { %"class.thrust::detail::vector_base.489" }
%"class.thrust::detail::vector_base.489" = type { %"class.thrust::detail::contiguous_storage.490", i64 }
%"class.thrust::detail::contiguous_storage.490" = type { %"class.thrust::device_malloc_allocator.491", %"class.thrust::detail::normal_iterator.493", i64 }
%"class.thrust::device_malloc_allocator.491" = type { i8 }
%"class.thrust::detail::normal_iterator.493" = type { %"class.thrust::iterator_adaptor.494" }
%"class.thrust::iterator_adaptor.494" = type { %"class.thrust::device_ptr.496" }
%"class.thrust::device_ptr.496" = type { %"class.thrust::pointer.497" }
%"class.thrust::pointer.497" = type { %"class.thrust::iterator_adaptor.498" }
%"class.thrust::iterator_adaptor.498" = type { i16* }
%"class.thrust::device_vector.500" = type { %"class.thrust::detail::vector_base.501" }
%"class.thrust::detail::vector_base.501" = type { %"class.thrust::detail::contiguous_storage.502", i64 }
%"class.thrust::detail::contiguous_storage.502" = type { %"class.thrust::device_malloc_allocator.503", %"class.thrust::detail::normal_iterator.505", i64 }
%"class.thrust::device_malloc_allocator.503" = type { i8 }
%"class.thrust::detail::normal_iterator.505" = type { %"class.thrust::iterator_adaptor.506" }
%"class.thrust::iterator_adaptor.506" = type { %"class.thrust::device_ptr.508" }
%"class.thrust::device_ptr.508" = type { %"class.thrust::pointer.509" }
%"class.thrust::pointer.509" = type { %"class.thrust::iterator_adaptor.510" }
%"class.thrust::iterator_adaptor.510" = type { %"struct.thrust::pair.487"* }
%"struct.thrust::equal_to.512" = type { i8 }
%struct.TestPairScanByKey.833 = type { i8 }
%"struct.unittest::for_each_type.834" = type { i8 }
%"struct.unittest::random_integer.513" = type { i8 }
%"class.__gnu_cxx::new_allocator.473" = type { i8 }
%"class.thrust::iterator_facade.477" = type { i8 }
%"struct.thrust::detail::has_trivial_copy_constructor.514" = type { i8 }
%"struct.thrust::detail::fill_functor.515" = type { i16 }
%"struct.thrust::detail::host_generate_functor.516" = type { %"struct.thrust::detail::fill_functor.515" }
%"struct.thrust::detail::wrapped_function.517" = type { %"struct.thrust::detail::host_generate_functor.516" }
%"class.thrust::zip_iterator.518" = type { %"class.thrust::tuple.520" }
%"class.thrust::tuple.520" = type { %"struct.thrust::detail::cons.521" }
%"struct.thrust::detail::cons.521" = type { %"class.thrust::counting_iterator", %"struct.thrust::detail::cons.522" }
%"struct.thrust::detail::cons.522" = type { %"class.thrust::detail::normal_iterator.475" }
%"struct.thrust::detail::unary_transform_functor.523" = type { %"struct.unittest::random_integer.513" }
%"struct.thrust::detail::wrapped_function.524" = type { %"struct.thrust::detail::unary_transform_functor.523" }
%"class.thrust::detail::tuple_of_iterator_references.525" = type { %"class.thrust::tuple.526" }
%"class.thrust::tuple.526" = type { %"struct.thrust::detail::cons.527" }
%"struct.thrust::detail::cons.527" = type { i64, %"struct.thrust::detail::cons.528" }
%"struct.thrust::detail::cons.528" = type { i16* }
%"class.thrust::iterator_facade.519" = type { i8 }
%"class.thrust::random::uniform_int_distribution.529" = type { %"struct.thrust::pair.487" }
%"class.__gnu_cxx::new_allocator.482" = type { i8 }
%"class.thrust::iterator_facade.486" = type { i8 }
%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530" = type { %"class.std::allocator.481"* }
%"struct.thrust::detail::wrapped_function.531" = type { %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530" }
%"class.thrust::zip_iterator.532" = type { %"class.thrust::tuple.534" }
%"class.thrust::tuple.534" = type { %"struct.thrust::detail::cons.535" }
%"struct.thrust::detail::cons.535" = type { %"class.thrust::detail::normal_iterator.475", %"struct.thrust::detail::cons.536" }
%"struct.thrust::detail::cons.536" = type { %"class.thrust::detail::normal_iterator.475", %"struct.thrust::detail::cons.537" }
%"struct.thrust::detail::cons.537" = type { %"class.thrust::detail::normal_iterator.484" }
%"class.thrust::detail::tuple_of_iterator_references.538" = type { %"class.thrust::tuple.539" }
%"class.thrust::tuple.539" = type { %"struct.thrust::detail::cons.540" }
%"struct.thrust::detail::cons.540" = type { i16*, %"struct.thrust::detail::cons.541" }
%"struct.thrust::detail::cons.541" = type { i16*, %"struct.thrust::detail::cons.542" }
%"struct.thrust::detail::cons.542" = type { %"struct.thrust::pair.487"* }
%"class.thrust::iterator_facade.533" = type { i8 }
%"class.thrust::detail::normal_iterator.543" = type { %"class.thrust::iterator_adaptor.544" }
%"class.thrust::iterator_adaptor.544" = type { i16* }
%"class.thrust::iterator_facade.499" = type { i8 }
%"class.thrust::iterator_facade.495" = type { i8 }
%"class.thrust::iterator_facade.545" = type { i8 }
%"class.thrust::device_ptr.546" = type { %"class.thrust::pointer.547" }
%"class.thrust::pointer.547" = type { %"class.thrust::iterator_adaptor.548" }
%"class.thrust::iterator_adaptor.548" = type { i16* }
%"class.thrust::pointer.550" = type { %"class.thrust::iterator_adaptor.551" }
%"class.thrust::iterator_adaptor.551" = type { i16* }
%"class.thrust::iterator_facade.552" = type { i8 }
%"class.thrust::iterator_facade.549" = type { i8 }
%"class.thrust::device_reference.553" = type { %"class.thrust::reference.554" }
%"class.thrust::reference.554" = type { %"class.thrust::device_ptr.496" }
%"class.thrust::detail::normal_iterator.555" = type { %"class.thrust::iterator_adaptor.556" }
%"class.thrust::iterator_adaptor.556" = type { %"struct.thrust::pair.487"* }
%"class.thrust::iterator_facade.511" = type { i8 }
%"class.thrust::iterator_facade.507" = type { i8 }
%"class.thrust::iterator_facade.557" = type { i8 }
%"class.thrust::device_ptr.558" = type { %"class.thrust::pointer.559" }
%"class.thrust::pointer.559" = type { %"class.thrust::iterator_adaptor.560" }
%"class.thrust::iterator_adaptor.560" = type { %"struct.thrust::pair.487"* }
%"class.thrust::pointer.562" = type { %"class.thrust::iterator_adaptor.563" }
%"class.thrust::iterator_adaptor.563" = type { %"struct.thrust::pair.487"* }
%"class.thrust::iterator_facade.564" = type { i8 }
%"class.thrust::iterator_facade.561" = type { i8 }
%"class.thrust::device_reference.565" = type { %"class.thrust::reference.566" }
%"class.thrust::reference.566" = type { %"class.thrust::device_ptr.508" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.567" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.568" }
%"class.thrust::tuple.568" = type { %"struct.thrust::detail::cons.569" }
%"struct.thrust::detail::cons.569" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.570" }
%"struct.thrust::detail::cons.570" = type { %"class.thrust::device_ptr.508", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.578" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.579" }
%"class.thrust::tuple.579" = type { %"struct.thrust::detail::cons.580" }
%"struct.thrust::detail::cons.580" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.581" }
%"struct.thrust::detail::cons.581" = type { %"class.thrust::device_ptr.508", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.576" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.587" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::detail::binary_negate.589" = type { %"struct.thrust::equal_to.512" }
%"class.thrust::detail::temporary_array.590" = type { %"class.thrust::detail::contiguous_storage.591" }
%"class.thrust::detail::contiguous_storage.591" = type { %"struct.thrust::detail::no_throw_allocator.592", %"class.thrust::detail::normal_iterator.596", i64 }
%"struct.thrust::detail::no_throw_allocator.592" = type { %"class.thrust::detail::temporary_allocator.593" }
%"class.thrust::detail::temporary_allocator.593" = type { %"struct.thrust::system::cuda::detail::tag"* }
%"class.thrust::detail::normal_iterator.596" = type { %"class.thrust::iterator_adaptor.597" }
%"class.thrust::iterator_adaptor.597" = type { %"class.thrust::pointer.562" }
%"class.thrust::reference.599" = type { %"class.thrust::pointer.562" }
%"class.thrust::zip_iterator.604" = type { %"class.thrust::tuple.606" }
%"class.thrust::tuple.606" = type { %"struct.thrust::detail::cons.607" }
%"struct.thrust::detail::cons.607" = type { %"class.thrust::detail::normal_iterator.596", %"struct.thrust::detail::cons.220" }
%"class.thrust::zip_iterator.600" = type { %"class.thrust::tuple.602" }
%"class.thrust::tuple.602" = type { %"struct.thrust::detail::cons.603" }
%"struct.thrust::detail::cons.603" = type { %"class.thrust::detail::normal_iterator.505", %"struct.thrust::detail::cons.220" }
%"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608" = type { %struct.add_pairs }
%"class.thrust::iterator_facade.598" = type { i8 }
%"class.thrust::iterator_facade.605" = type { i8 }
%"class.thrust::zip_iterator.609" = type { %"class.thrust::tuple.611" }
%"class.thrust::tuple.611" = type { %"struct.thrust::detail::cons.612" }
%"struct.thrust::detail::cons.612" = type { %"class.thrust::detail::normal_iterator.493", %"struct.thrust::detail::cons.613" }
%"struct.thrust::detail::cons.613" = type { %"class.thrust::detail::normal_iterator.493", %"struct.thrust::detail::cons.220" }
%"struct.thrust::detail::binary_transform_functor.614" = type { %"struct.thrust::detail::binary_negate.589" }
%"struct.thrust::detail::wrapped_function.615" = type { %"struct.thrust::detail::binary_transform_functor.614" }
%"class.thrust::iterator_facade.610" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.616" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.617" }
%"class.thrust::tuple.617" = type { %"struct.thrust::detail::cons.618" }
%"struct.thrust::detail::cons.618" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.619" }
%"struct.thrust::detail::cons.619" = type { %"class.thrust::zip_iterator.609", %"struct.thrust::detail::cons.620" }
%"struct.thrust::detail::cons.620" = type { %"struct.thrust::detail::wrapped_function.615", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.628" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.629" }
%"class.thrust::tuple.629" = type { %"struct.thrust::detail::cons.630" }
%"struct.thrust::detail::cons.630" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.631" }
%"struct.thrust::detail::cons.631" = type { %"class.thrust::zip_iterator.609", %"struct.thrust::detail::cons.632" }
%"struct.thrust::detail::cons.632" = type { %"struct.thrust::detail::wrapped_function.615", %"struct.thrust::detail::cons.165" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.626" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.638" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::tagged_allocator.594" = type { i8 }
%"struct.thrust::pair.640" = type { %"class.thrust::pointer.562", i64 }
%"struct.thrust::pair.641" = type { %"class.thrust::pointer.562", i64 }
%"struct.thrust::system::detail::generic::detail::new_value_if.642" = type { %"struct.thrust::negate", %"struct.thrust::pair.487" }
%"class.thrust::zip_iterator.643" = type { %"class.thrust::tuple.645" }
%"class.thrust::tuple.645" = type { %"struct.thrust::detail::cons.646" }
%"struct.thrust::detail::cons.646" = type { %"class.thrust::detail::normal_iterator.505", %"struct.thrust::detail::cons.647" }
%"struct.thrust::detail::cons.647" = type { %"class.thrust::detail::normal_iterator.199", %"struct.thrust::detail::cons.648" }
%"struct.thrust::detail::cons.648" = type { %"class.thrust::detail::normal_iterator.596" }
%"struct.thrust::detail::binary_transform_functor.649" = type { %"struct.thrust::system::detail::generic::detail::new_value_if.642" }
%"struct.thrust::detail::wrapped_function.650" = type { %"struct.thrust::detail::binary_transform_functor.649" }
%"class.thrust::iterator_facade.644" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.651" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", [7 x i8], %"class.thrust::tuple.652" }
%"class.thrust::tuple.652" = type { %"struct.thrust::detail::cons.653" }
%"struct.thrust::detail::cons.653" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", [7 x i8], %"struct.thrust::detail::cons.654" }
%"struct.thrust::detail::cons.654" = type <{ %"class.thrust::zip_iterator.643", %"struct.thrust::detail::cons.655", [4 x i8] }>
%"struct.thrust::detail::cons.655" = type { %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.664" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.665" }
%"class.thrust::tuple.665" = type { %"struct.thrust::detail::cons.666" }
%"struct.thrust::detail::cons.666" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.667" }
%"struct.thrust::detail::cons.667" = type { %"class.thrust::zip_iterator.643", %"struct.thrust::detail::cons.668" }
%"struct.thrust::detail::cons.668" = type { %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::cons.165" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662", i32, [4 x i8] }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.662" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.674" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::temporary_array.676" = type { %"class.thrust::detail::contiguous_storage.677" }
%"class.thrust::detail::contiguous_storage.677" = type { %"struct.thrust::detail::no_throw_allocator.678", %"class.thrust::detail::normal_iterator.682", i64 }
%"struct.thrust::detail::no_throw_allocator.678" = type { %"class.thrust::detail::temporary_allocator.679" }
%"class.thrust::detail::temporary_allocator.679" = type { %"struct.thrust::system::cuda::detail::tag"* }
%"class.thrust::detail::normal_iterator.682" = type { %"class.thrust::iterator_adaptor.683" }
%"class.thrust::iterator_adaptor.683" = type { %"class.thrust::pointer.685" }
%"class.thrust::pointer.685" = type { %"class.thrust::iterator_adaptor.686" }
%"class.thrust::iterator_adaptor.686" = type { %"class.thrust::tuple.688"* }
%"class.thrust::tuple.688" = type { %"struct.thrust::detail::cons.689" }
%"struct.thrust::detail::cons.689" = type { %"struct.thrust::pair.487", %"struct.thrust::detail::cons.159" }
%"class.thrust::iterator_facade.601" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.690" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", %"class.thrust::tuple.691" }
%"class.thrust::tuple.691" = type { %"struct.thrust::detail::cons.692" }
%"struct.thrust::detail::cons.692" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.693" }
%"struct.thrust::detail::cons.693" = type { %"class.thrust::zip_iterator.604", %"struct.thrust::detail::cons.694" }
%"struct.thrust::detail::cons.694" = type { i64, %"struct.thrust::detail::cons.695" }
%"struct.thrust::detail::cons.695" = type <{ %"class.thrust::zip_iterator.600", %"struct.thrust::detail::cons.696", [7 x i8] }>
%"struct.thrust::detail::cons.696" = type { %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.707" = type { %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", %"class.thrust::tuple.708" }
%"class.thrust::tuple.708" = type { %"struct.thrust::detail::cons.709" }
%"struct.thrust::detail::cons.709" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.710" }
%"struct.thrust::detail::cons.710" = type { %"class.thrust::zip_iterator.604", %"struct.thrust::detail::cons.711" }
%"struct.thrust::detail::cons.711" = type { %"class.thrust::system::cuda::detail::aligned_decomposition", %"struct.thrust::detail::cons.712" }
%"struct.thrust::detail::cons.712" = type <{ %"class.thrust::detail::normal_iterator.682", %"struct.thrust::detail::cons.696", [7 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::closure.721" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", %"class.thrust::tuple.722" }
%"class.thrust::tuple.722" = type { %"struct.thrust::detail::cons.723" }
%"struct.thrust::detail::cons.723" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.724" }
%"struct.thrust::detail::cons.724" = type { %"class.thrust::detail::normal_iterator.682", %"struct.thrust::detail::cons.725" }
%"struct.thrust::detail::cons.725" = type { i64, %"struct.thrust::detail::cons.712" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.733" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", %"class.thrust::tuple.734" }
%"class.thrust::tuple.734" = type { %"struct.thrust::detail::cons.735" }
%"struct.thrust::detail::cons.735" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.736" }
%"struct.thrust::detail::cons.736" = type { %"class.thrust::zip_iterator.604", %"struct.thrust::detail::cons.737" }
%"struct.thrust::detail::cons.737" = type { %"class.thrust::system::cuda::detail::aligned_decomposition", %"struct.thrust::detail::cons.738" }
%"struct.thrust::detail::cons.738" = type { %"class.thrust::detail::normal_iterator.682", %"struct.thrust::detail::cons.695" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.704", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.704" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", %"class.thrust::system::cuda::detail::bulk_::parallel_group.296" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.703" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", [4 x i8] }>
%"class.thrust::detail::tagged_allocator.680" = type { i8 }
%"class.thrust::iterator_facade.687" = type { i8 }
%"class.thrust::iterator_facade.684" = type { i8 }
%"struct.thrust::pair.705" = type { %"class.thrust::pointer.685", i64 }
%"struct.thrust::pair.706" = type { %"class.thrust::pointer.685", i64 }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.720", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.720" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.719" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", [4 x i8] }>
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.732", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.732" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", %"class.thrust::system::cuda::detail::bulk_::parallel_group.324" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.731" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", [4 x i8] }>
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.745", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.745" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.744" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::closure.746" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.747" }
%"class.thrust::tuple.747" = type { %"struct.thrust::detail::cons.748" }
%"struct.thrust::detail::cons.748" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.749" }
%"struct.thrust::detail::cons.749" = type { %"class.thrust::pointer.685", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.757" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.758" }
%"class.thrust::tuple.758" = type { %"struct.thrust::detail::cons.759" }
%"struct.thrust::detail::cons.759" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.760" }
%"struct.thrust::detail::cons.760" = type { %"class.thrust::pointer.685", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.755" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.766" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.768" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.769" }
%"class.thrust::tuple.769" = type { %"struct.thrust::detail::cons.770" }
%"struct.thrust::detail::cons.770" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.771" }
%"struct.thrust::detail::cons.771" = type { %"class.thrust::pointer.562", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.779" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.780" }
%"class.thrust::tuple.780" = type { %"struct.thrust::detail::cons.781" }
%"struct.thrust::detail::cons.781" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.782" }
%"struct.thrust::detail::cons.782" = type { %"class.thrust::pointer.562", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.777" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.788" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::normal_iterator.790" = type { %"class.thrust::iterator_adaptor.791" }
%"class.thrust::iterator_adaptor.791" = type { %"class.thrust::device_ptr.558" }
%"class.thrust::detail::move_to_system.793" = type { %"class.thrust::detail::tagged_iterator_range.794" }
%"class.thrust::detail::tagged_iterator_range.794" = type { %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795" }
%"class.thrust::detail::tagged_iterator.795" = type { %"class.thrust::iterator_adaptor.796" }
%"class.thrust::iterator_adaptor.796" = type { %"class.thrust::detail::normal_iterator.555" }
%"class.thrust::detail::move_to_system.798" = type { %"class.thrust::detail::temporary_array.799" }
%"class.thrust::detail::temporary_array.799" = type { %"class.thrust::detail::contiguous_storage.800" }
%"class.thrust::detail::contiguous_storage.800" = type { %"struct.thrust::detail::no_throw_allocator.801", %"class.thrust::detail::normal_iterator.805", i64 }
%"struct.thrust::detail::no_throw_allocator.801" = type { %"class.thrust::detail::temporary_allocator.802" }
%"class.thrust::detail::temporary_allocator.802" = type { %"struct.thrust::system::cpp::detail::tag"* }
%"class.thrust::detail::normal_iterator.805" = type { %"class.thrust::iterator_adaptor.806" }
%"class.thrust::iterator_adaptor.806" = type { %"class.thrust::pointer.808" }
%"class.thrust::pointer.808" = type { %"class.thrust::iterator_adaptor.809" }
%"class.thrust::iterator_adaptor.809" = type { %"struct.thrust::pair.487"* }
%"class.thrust::iterator_facade.792" = type { i8 }
%"class.thrust::iterator_facade.797" = type { i8 }
%"class.thrust::detail::tagged_allocator.803" = type { i8 }
%"class.thrust::iterator_facade.810" = type { i8 }
%"class.thrust::iterator_facade.807" = type { i8 }
%"struct.thrust::pair.811" = type { %"class.thrust::pointer.808", i64 }
%"struct.thrust::pair.812" = type { %"class.thrust::pointer.808", i64 }
%"class.thrust::reference.813" = type { %"class.thrust::pointer.808" }
%"class.thrust::device_reference.814" = type { %"class.thrust::reference.815" }
%"class.thrust::reference.815" = type { %"class.thrust::device_ptr.558" }
%"struct.thrust::detail::equal_to.816" = type { i8 }
%"struct.thrust::pair.817" = type { %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::normal_iterator.805" }
%"class.thrust::zip_iterator.818" = type { %"class.thrust::tuple.820" }
%"class.thrust::tuple.820" = type { %"struct.thrust::detail::cons.821" }
%"struct.thrust::detail::cons.821" = type { %"class.thrust::detail::tagged_iterator.795", %"struct.thrust::detail::cons.822" }
%"struct.thrust::detail::cons.822" = type { %"class.thrust::detail::normal_iterator.805" }
%"struct.thrust::detail::tuple_binary_predicate.823" = type { %"struct.thrust::detail::equal_to.816" }
%"class.thrust::iterator_facade.819" = type { i8 }
%"struct.thrust::detail::unary_negate.824" = type { %"struct.thrust::detail::tuple_binary_predicate.823" }
%"struct.thrust::detail::wrapped_function.825" = type { %"struct.thrust::detail::unary_negate.824" }
%"class.thrust::detail::tuple_of_iterator_references.826" = type { %"class.thrust::tuple.827" }
%"class.thrust::tuple.827" = type { %"struct.thrust::detail::cons.828" }
%"struct.thrust::detail::cons.828" = type { %"struct.thrust::pair.487"*, %"struct.thrust::detail::cons.829" }
%"struct.thrust::detail::cons.829" = type { %"class.thrust::reference.813" }
%"class.thrust::detail::tuple_of_iterator_references.830" = type { %"class.thrust::tuple.831" }
%"class.thrust::tuple.831" = type { %"struct.thrust::detail::cons.832" }
%"struct.thrust::detail::cons.832" = type { %"struct.thrust::pair.487"*, %"struct.thrust::detail::cons.542" }
%"class.thrust::host_vector.835" = type { %"class.thrust::detail::vector_base.836" }
%"class.thrust::detail::vector_base.836" = type { %"class.thrust::detail::contiguous_storage.837", i64 }
%"class.thrust::detail::contiguous_storage.837" = type { %"class.std::allocator.838", %"class.thrust::detail::normal_iterator.841", i64 }
%"class.std::allocator.838" = type { i8 }
%"class.thrust::detail::normal_iterator.841" = type { %"class.thrust::iterator_adaptor.842" }
%"class.thrust::iterator_adaptor.842" = type { i32* }
%"class.thrust::host_vector.844" = type { %"class.thrust::detail::vector_base.845" }
%"class.thrust::detail::vector_base.845" = type { %"class.thrust::detail::contiguous_storage.846", i64 }
%"class.thrust::detail::contiguous_storage.846" = type { %"class.std::allocator.847", %"class.thrust::detail::normal_iterator.850", i64 }
%"class.std::allocator.847" = type { i8 }
%"class.thrust::detail::normal_iterator.850" = type { %"class.thrust::iterator_adaptor.851" }
%"class.thrust::iterator_adaptor.851" = type { %"struct.thrust::pair.82"* }
%"class.thrust::device_vector.853" = type { %"class.thrust::detail::vector_base.854" }
%"class.thrust::detail::vector_base.854" = type { %"class.thrust::detail::contiguous_storage.855", i64 }
%"class.thrust::detail::contiguous_storage.855" = type { %"class.thrust::device_malloc_allocator.856", %"class.thrust::detail::normal_iterator.858", i64 }
%"class.thrust::device_malloc_allocator.856" = type { i8 }
%"class.thrust::detail::normal_iterator.858" = type { %"class.thrust::iterator_adaptor.859" }
%"class.thrust::iterator_adaptor.859" = type { %"class.thrust::device_ptr.861" }
%"class.thrust::device_ptr.861" = type { %"class.thrust::pointer.862" }
%"class.thrust::pointer.862" = type { %"class.thrust::iterator_adaptor.863" }
%"class.thrust::iterator_adaptor.863" = type { i32* }
%"class.thrust::device_vector.865" = type { %"class.thrust::detail::vector_base.866" }
%"class.thrust::detail::vector_base.866" = type { %"class.thrust::detail::contiguous_storage.867", i64 }
%"class.thrust::detail::contiguous_storage.867" = type { %"class.thrust::device_malloc_allocator.868", %"class.thrust::detail::normal_iterator.870", i64 }
%"class.thrust::device_malloc_allocator.868" = type { i8 }
%"class.thrust::detail::normal_iterator.870" = type { %"class.thrust::iterator_adaptor.871" }
%"class.thrust::iterator_adaptor.871" = type { %"class.thrust::device_ptr.873" }
%"class.thrust::device_ptr.873" = type { %"class.thrust::pointer.874" }
%"class.thrust::pointer.874" = type { %"class.thrust::iterator_adaptor.875" }
%"class.thrust::iterator_adaptor.875" = type { %"struct.thrust::pair.82"* }
%"struct.thrust::equal_to.877" = type { i8 }
%"struct.unittest::random_integer.878" = type { i8 }
%"class.__gnu_cxx::new_allocator.839" = type { i8 }
%"class.thrust::iterator_facade.843" = type { i8 }
%"struct.thrust::detail::has_trivial_copy_constructor.879" = type { i8 }
%"struct.thrust::detail::fill_functor.880" = type { i32 }
%"struct.thrust::detail::host_generate_functor.881" = type { %"struct.thrust::detail::fill_functor.880" }
%"struct.thrust::detail::wrapped_function.882" = type { %"struct.thrust::detail::host_generate_functor.881" }
%"class.thrust::zip_iterator.883" = type { %"class.thrust::tuple.885" }
%"class.thrust::tuple.885" = type { %"struct.thrust::detail::cons.886" }
%"struct.thrust::detail::cons.886" = type { %"class.thrust::counting_iterator", %"struct.thrust::detail::cons.887" }
%"struct.thrust::detail::cons.887" = type { %"class.thrust::detail::normal_iterator.841" }
%"struct.thrust::detail::unary_transform_functor.888" = type { %"struct.unittest::random_integer.878" }
%"struct.thrust::detail::wrapped_function.889" = type { %"struct.thrust::detail::unary_transform_functor.888" }
%"class.thrust::detail::tuple_of_iterator_references.890" = type { %"class.thrust::tuple.891" }
%"class.thrust::tuple.891" = type { %"struct.thrust::detail::cons.892" }
%"struct.thrust::detail::cons.892" = type { i64, %"struct.thrust::detail::cons.175" }
%"class.thrust::iterator_facade.884" = type { i8 }
%"class.thrust::random::uniform_int_distribution.893" = type { %"struct.thrust::pair.82" }
%"class.__gnu_cxx::new_allocator.848" = type { i8 }
%"class.thrust::iterator_facade.852" = type { i8 }
%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894" = type { %"class.std::allocator.847"* }
%"struct.thrust::detail::wrapped_function.895" = type { %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894" }
%"class.thrust::zip_iterator.896" = type { %"class.thrust::tuple.898" }
%"class.thrust::tuple.898" = type { %"struct.thrust::detail::cons.899" }
%"struct.thrust::detail::cons.899" = type { %"class.thrust::detail::normal_iterator.841", %"struct.thrust::detail::cons.900" }
%"struct.thrust::detail::cons.900" = type { %"class.thrust::detail::normal_iterator.841", %"struct.thrust::detail::cons.901" }
%"struct.thrust::detail::cons.901" = type { %"class.thrust::detail::normal_iterator.850" }
%"class.thrust::detail::tuple_of_iterator_references.902" = type { %"class.thrust::tuple.903" }
%"class.thrust::tuple.903" = type { %"struct.thrust::detail::cons.904" }
%"struct.thrust::detail::cons.904" = type { i32*, %"struct.thrust::detail::cons.905" }
%"struct.thrust::detail::cons.905" = type { i32*, %"struct.thrust::detail::cons.906" }
%"struct.thrust::detail::cons.906" = type { %"struct.thrust::pair.82"* }
%"class.thrust::iterator_facade.897" = type { i8 }
%"class.thrust::detail::normal_iterator.907" = type { %"class.thrust::iterator_adaptor.908" }
%"class.thrust::iterator_adaptor.908" = type { i32* }
%"class.thrust::iterator_facade.864" = type { i8 }
%"class.thrust::iterator_facade.860" = type { i8 }
%"class.thrust::iterator_facade.909" = type { i8 }
%"class.thrust::device_ptr.910" = type { %"class.thrust::pointer.911" }
%"class.thrust::pointer.911" = type { %"class.thrust::iterator_adaptor.912" }
%"class.thrust::iterator_adaptor.912" = type { i32* }
%"class.thrust::pointer.914" = type { %"class.thrust::iterator_adaptor.915" }
%"class.thrust::iterator_adaptor.915" = type { i32* }
%"class.thrust::iterator_facade.916" = type { i8 }
%"class.thrust::iterator_facade.913" = type { i8 }
%"class.thrust::device_reference.917" = type { %"class.thrust::reference.918" }
%"class.thrust::reference.918" = type { %"class.thrust::device_ptr.861" }
%"class.thrust::detail::normal_iterator.919" = type { %"class.thrust::iterator_adaptor.920" }
%"class.thrust::iterator_adaptor.920" = type { %"struct.thrust::pair.82"* }
%"class.thrust::iterator_facade.876" = type { i8 }
%"class.thrust::iterator_facade.872" = type { i8 }
%"class.thrust::iterator_facade.921" = type { i8 }
%"class.thrust::device_ptr.922" = type { %"class.thrust::pointer.923" }
%"class.thrust::pointer.923" = type { %"class.thrust::iterator_adaptor.924" }
%"class.thrust::iterator_adaptor.924" = type { %"struct.thrust::pair.82"* }
%"class.thrust::pointer.926" = type { %"class.thrust::iterator_adaptor.927" }
%"class.thrust::iterator_adaptor.927" = type { %"struct.thrust::pair.82"* }
%"class.thrust::iterator_facade.928" = type { i8 }
%"class.thrust::iterator_facade.925" = type { i8 }
%"class.thrust::device_reference.929" = type { %"class.thrust::reference.930" }
%"class.thrust::reference.930" = type { %"class.thrust::device_ptr.873" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.931" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.932" }
%"class.thrust::tuple.932" = type { %"struct.thrust::detail::cons.933" }
%"struct.thrust::detail::cons.933" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.934" }
%"struct.thrust::detail::cons.934" = type { %"class.thrust::device_ptr.873", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.942" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.943" }
%"class.thrust::tuple.943" = type { %"struct.thrust::detail::cons.944" }
%"struct.thrust::detail::cons.944" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.945" }
%"struct.thrust::detail::cons.945" = type { %"class.thrust::device_ptr.873", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.940" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.951" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::detail::binary_negate.953" = type { %"struct.thrust::equal_to.877" }
%"class.thrust::detail::temporary_array.954" = type { %"class.thrust::detail::contiguous_storage.955" }
%"class.thrust::detail::contiguous_storage.955" = type { %"struct.thrust::detail::no_throw_allocator.956", %"class.thrust::detail::normal_iterator.960", i64 }
%"struct.thrust::detail::no_throw_allocator.956" = type { %"class.thrust::detail::temporary_allocator.957" }
%"class.thrust::detail::temporary_allocator.957" = type { %"struct.thrust::system::cuda::detail::tag"* }
%"class.thrust::detail::normal_iterator.960" = type { %"class.thrust::iterator_adaptor.961" }
%"class.thrust::iterator_adaptor.961" = type { %"class.thrust::pointer.926" }
%"class.thrust::reference.963" = type { %"class.thrust::pointer.926" }
%"class.thrust::zip_iterator.968" = type { %"class.thrust::tuple.970" }
%"class.thrust::tuple.970" = type { %"struct.thrust::detail::cons.971" }
%"struct.thrust::detail::cons.971" = type { %"class.thrust::detail::normal_iterator.960", %"struct.thrust::detail::cons.220" }
%"class.thrust::zip_iterator.964" = type { %"class.thrust::tuple.966" }
%"class.thrust::tuple.966" = type { %"struct.thrust::detail::cons.967" }
%"struct.thrust::detail::cons.967" = type { %"class.thrust::detail::normal_iterator.870", %"struct.thrust::detail::cons.220" }
%"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972" = type { %struct.add_pairs }
%"class.thrust::iterator_facade.962" = type { i8 }
%"class.thrust::iterator_facade.969" = type { i8 }
%"class.thrust::zip_iterator.973" = type { %"class.thrust::tuple.975" }
%"class.thrust::tuple.975" = type { %"struct.thrust::detail::cons.976" }
%"struct.thrust::detail::cons.976" = type { %"class.thrust::detail::normal_iterator.858", %"struct.thrust::detail::cons.977" }
%"struct.thrust::detail::cons.977" = type { %"class.thrust::detail::normal_iterator.858", %"struct.thrust::detail::cons.220" }
%"struct.thrust::detail::binary_transform_functor.978" = type { %"struct.thrust::detail::binary_negate.953" }
%"struct.thrust::detail::wrapped_function.979" = type { %"struct.thrust::detail::binary_transform_functor.978" }
%"class.thrust::iterator_facade.974" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.980" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.981" }
%"class.thrust::tuple.981" = type { %"struct.thrust::detail::cons.982" }
%"struct.thrust::detail::cons.982" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.983" }
%"struct.thrust::detail::cons.983" = type { %"class.thrust::zip_iterator.973", %"struct.thrust::detail::cons.984" }
%"struct.thrust::detail::cons.984" = type { %"struct.thrust::detail::wrapped_function.979", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.992" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.993" }
%"class.thrust::tuple.993" = type { %"struct.thrust::detail::cons.994" }
%"struct.thrust::detail::cons.994" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.995" }
%"struct.thrust::detail::cons.995" = type { %"class.thrust::zip_iterator.973", %"struct.thrust::detail::cons.996" }
%"struct.thrust::detail::cons.996" = type { %"struct.thrust::detail::wrapped_function.979", %"struct.thrust::detail::cons.165" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.990" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::tagged_allocator.958" = type { i8 }
%"struct.thrust::pair.1004" = type { %"class.thrust::pointer.926", i64 }
%"struct.thrust::pair.1005" = type { %"class.thrust::pointer.926", i64 }
%"struct.thrust::system::detail::generic::detail::new_value_if.1006" = type { %"struct.thrust::negate", %"struct.thrust::pair.82" }
%"class.thrust::zip_iterator.1007" = type { %"class.thrust::tuple.1009" }
%"class.thrust::tuple.1009" = type { %"struct.thrust::detail::cons.1010" }
%"struct.thrust::detail::cons.1010" = type { %"class.thrust::detail::normal_iterator.870", %"struct.thrust::detail::cons.1011" }
%"struct.thrust::detail::cons.1011" = type { %"class.thrust::detail::normal_iterator.199", %"struct.thrust::detail::cons.1012" }
%"struct.thrust::detail::cons.1012" = type { %"class.thrust::detail::normal_iterator.960" }
%"struct.thrust::detail::binary_transform_functor.1013" = type { %"struct.thrust::system::detail::generic::detail::new_value_if.1006" }
%"struct.thrust::detail::wrapped_function.1014" = type { %"struct.thrust::detail::binary_transform_functor.1013" }
%"class.thrust::iterator_facade.1008" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1015" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.1016" }
%"class.thrust::tuple.1016" = type { %"struct.thrust::detail::cons.1017" }
%"struct.thrust::detail::cons.1017" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.1018" }
%"struct.thrust::detail::cons.1018" = type { %"class.thrust::zip_iterator.1007", %"struct.thrust::detail::cons.1019" }
%"struct.thrust::detail::cons.1019" = type { %"struct.thrust::detail::wrapped_function.1014", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1027" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.1028" }
%"class.thrust::tuple.1028" = type { %"struct.thrust::detail::cons.1029" }
%"struct.thrust::detail::cons.1029" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.1030" }
%"struct.thrust::detail::cons.1030" = type { %"class.thrust::zip_iterator.1007", %"struct.thrust::detail::cons.1031" }
%"struct.thrust::detail::cons.1031" = type { %"struct.thrust::detail::wrapped_function.1014", %"struct.thrust::detail::cons.165" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::temporary_array.1039" = type { %"class.thrust::detail::contiguous_storage.1040" }
%"class.thrust::detail::contiguous_storage.1040" = type { %"struct.thrust::detail::no_throw_allocator.1041", %"class.thrust::detail::normal_iterator.1045", i64 }
%"struct.thrust::detail::no_throw_allocator.1041" = type { %"class.thrust::detail::temporary_allocator.1042" }
%"class.thrust::detail::temporary_allocator.1042" = type { %"struct.thrust::system::cuda::detail::tag"* }
%"class.thrust::detail::normal_iterator.1045" = type { %"class.thrust::iterator_adaptor.1046" }
%"class.thrust::iterator_adaptor.1046" = type { %"class.thrust::pointer.1048" }
%"class.thrust::pointer.1048" = type { %"class.thrust::iterator_adaptor.1049" }
%"class.thrust::iterator_adaptor.1049" = type { %"class.thrust::tuple.1051"* }
%"class.thrust::tuple.1051" = type { %"struct.thrust::detail::cons.1052" }
%"struct.thrust::detail::cons.1052" = type { %"struct.thrust::pair.82", %"struct.thrust::detail::cons.159" }
%"class.thrust::system::cuda::detail::bulk_::async_launch.1053" = type { i8, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", %struct.CUstream_st*, %struct.CUevent_st* }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055" = type { %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", i32, i32 }
%"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056" = type { %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057", i32 }
%"class.thrust::system::cuda::detail::bulk_::parallel_group.1057" = type { %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058" }
%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058" = type { %"class.thrust::system::cuda::detail::bulk_::agent.301", i32 }
%"class.thrust::iterator_facade.965" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1059" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", %"class.thrust::tuple.1060" }
%"class.thrust::tuple.1060" = type { %"struct.thrust::detail::cons.1061" }
%"struct.thrust::detail::cons.1061" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.1062" }
%"struct.thrust::detail::cons.1062" = type { %"class.thrust::zip_iterator.968", %"struct.thrust::detail::cons.1063" }
%"struct.thrust::detail::cons.1063" = type { i64, %"struct.thrust::detail::cons.1064" }
%"struct.thrust::detail::cons.1064" = type <{ %"class.thrust::zip_iterator.964", %"struct.thrust::detail::cons.1065", [7 x i8] }>
%"struct.thrust::detail::cons.1065" = type { %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1076" = type { %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", %"class.thrust::tuple.1077" }
%"class.thrust::tuple.1077" = type { %"struct.thrust::detail::cons.1078" }
%"struct.thrust::detail::cons.1078" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.1079" }
%"struct.thrust::detail::cons.1079" = type { %"class.thrust::zip_iterator.968", %"struct.thrust::detail::cons.1080" }
%"struct.thrust::detail::cons.1080" = type { %"class.thrust::system::cuda::detail::aligned_decomposition", %"struct.thrust::detail::cons.1081" }
%"struct.thrust::detail::cons.1081" = type <{ %"class.thrust::detail::normal_iterator.1045", %"struct.thrust::detail::cons.1065", [7 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1090" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", %"class.thrust::tuple.1091" }
%"class.thrust::tuple.1091" = type { %"struct.thrust::detail::cons.1092" }
%"struct.thrust::detail::cons.1092" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.1093" }
%"struct.thrust::detail::cons.1093" = type { %"class.thrust::detail::normal_iterator.1045", %"struct.thrust::detail::cons.1094" }
%"struct.thrust::detail::cons.1094" = type { i64, %"struct.thrust::detail::cons.1081" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1102" = type { %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", %"class.thrust::tuple.1103" }
%"class.thrust::tuple.1103" = type { %"struct.thrust::detail::cons.1104" }
%"struct.thrust::detail::cons.1104" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::detail::cons.1105" }
%"struct.thrust::detail::cons.1105" = type { %"class.thrust::zip_iterator.968", %"struct.thrust::detail::cons.1106" }
%"struct.thrust::detail::cons.1106" = type { %"class.thrust::system::cuda::detail::aligned_decomposition", %"struct.thrust::detail::cons.1107" }
%"struct.thrust::detail::cons.1107" = type { %"class.thrust::detail::normal_iterator.1045", %"struct.thrust::detail::cons.1064" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1073", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1073" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", %"class.thrust::system::cuda::detail::bulk_::parallel_group.324" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", [4 x i8] }>
%"class.thrust::detail::tagged_allocator.1043" = type { i8 }
%"class.thrust::iterator_facade.1050" = type { i8 }
%"class.thrust::iterator_facade.1047" = type { i8 }
%"struct.thrust::pair.1074" = type { %"class.thrust::pointer.1048", i64 }
%"struct.thrust::pair.1075" = type { %"class.thrust::pointer.1048", i64 }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1089", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1089" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", [4 x i8] }>
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1101", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1101" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", [4 x i8] }>
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112" = type { %"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1114", i32 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.base.1114" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317" }>
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1115" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.1116" }
%"class.thrust::tuple.1116" = type { %"struct.thrust::detail::cons.1117" }
%"struct.thrust::detail::cons.1117" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.1118" }
%"struct.thrust::detail::cons.1118" = type { %"class.thrust::pointer.1048", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1126" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.1127" }
%"class.thrust::tuple.1127" = type { %"struct.thrust::detail::cons.1128" }
%"struct.thrust::detail::cons.1128" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.1129" }
%"struct.thrust::detail::cons.1129" = type { %"class.thrust::pointer.1048", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1137" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.1138" }
%"class.thrust::tuple.1138" = type { %"struct.thrust::detail::cons.1139" }
%"struct.thrust::detail::cons.1139" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.1140" }
%"struct.thrust::detail::cons.1140" = type { %"class.thrust::pointer.926", %"struct.thrust::detail::cons.158" }
%"class.thrust::system::cuda::detail::bulk_::detail::closure.1148" = type { %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", %"class.thrust::tuple.1149" }
%"class.thrust::tuple.1149" = type { %"struct.thrust::detail::cons.1150" }
%"struct.thrust::detail::cons.1150" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::detail::cons.1151" }
%"struct.thrust::detail::cons.1151" = type { %"class.thrust::pointer.926", %"struct.thrust::detail::cons.164" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153" }
%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153" = type { %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t" }
%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154" = type { i8 }
%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156" = type <{ %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157", i32, [4 x i8] }>
%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157" = type { %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", %"class.thrust::system::cuda::detail::bulk_::parallel_group" }
%"class.thrust::detail::normal_iterator.1159" = type { %"class.thrust::iterator_adaptor.1160" }
%"class.thrust::iterator_adaptor.1160" = type { %"class.thrust::device_ptr.922" }
%"class.thrust::detail::move_to_system.1162" = type { %"class.thrust::detail::tagged_iterator_range.1163" }
%"class.thrust::detail::tagged_iterator_range.1163" = type { %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164" }
%"class.thrust::detail::tagged_iterator.1164" = type { %"class.thrust::iterator_adaptor.1165" }
%"class.thrust::iterator_adaptor.1165" = type { %"class.thrust::detail::normal_iterator.919" }
%"class.thrust::detail::move_to_system.1167" = type { %"class.thrust::detail::temporary_array.1168" }
%"class.thrust::detail::temporary_array.1168" = type { %"class.thrust::detail::contiguous_storage.1169" }
%"class.thrust::detail::contiguous_storage.1169" = type { %"struct.thrust::detail::no_throw_allocator.1170", %"class.thrust::detail::normal_iterator.1174", i64 }
%"struct.thrust::detail::no_throw_allocator.1170" = type { %"class.thrust::detail::temporary_allocator.1171" }
%"class.thrust::detail::temporary_allocator.1171" = type { %"struct.thrust::system::cpp::detail::tag"* }
%"class.thrust::detail::normal_iterator.1174" = type { %"class.thrust::iterator_adaptor.1175" }
%"class.thrust::iterator_adaptor.1175" = type { %"class.thrust::pointer.1177" }
%"class.thrust::pointer.1177" = type { %"class.thrust::iterator_adaptor.1178" }
%"class.thrust::iterator_adaptor.1178" = type { %"struct.thrust::pair.82"* }
%"class.thrust::iterator_facade.1161" = type { i8 }
%"class.thrust::iterator_facade.1166" = type { i8 }
%"class.thrust::detail::tagged_allocator.1172" = type { i8 }
%"class.thrust::iterator_facade.1179" = type { i8 }
%"class.thrust::iterator_facade.1176" = type { i8 }
%"struct.thrust::pair.1180" = type { %"class.thrust::pointer.1177", i64 }
%"struct.thrust::pair.1181" = type { %"class.thrust::pointer.1177", i64 }
%"class.thrust::reference.1182" = type { %"class.thrust::pointer.1177" }
%"class.thrust::device_reference.1183" = type { %"class.thrust::reference.1184" }
%"class.thrust::reference.1184" = type { %"class.thrust::device_ptr.922" }
%"struct.thrust::detail::equal_to.1185" = type { i8 }
%"struct.thrust::pair.1186" = type { %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::normal_iterator.1174" }
%"class.thrust::zip_iterator.1187" = type { %"class.thrust::tuple.1189" }
%"class.thrust::tuple.1189" = type { %"struct.thrust::detail::cons.1190" }
%"struct.thrust::detail::cons.1190" = type { %"class.thrust::detail::tagged_iterator.1164", %"struct.thrust::detail::cons.1191" }
%"struct.thrust::detail::cons.1191" = type { %"class.thrust::detail::normal_iterator.1174" }
%"struct.thrust::detail::tuple_binary_predicate.1192" = type { %"struct.thrust::detail::equal_to.1185" }
%"class.thrust::iterator_facade.1188" = type { i8 }
%"struct.thrust::detail::unary_negate.1193" = type { %"struct.thrust::detail::tuple_binary_predicate.1192" }
%"struct.thrust::detail::wrapped_function.1194" = type { %"struct.thrust::detail::unary_negate.1193" }
%"class.thrust::detail::tuple_of_iterator_references.1195" = type { %"class.thrust::tuple.1196" }
%"class.thrust::tuple.1196" = type { %"struct.thrust::detail::cons.1197" }
%"struct.thrust::detail::cons.1197" = type { %"struct.thrust::pair.82"*, %"struct.thrust::detail::cons.1198" }
%"struct.thrust::detail::cons.1198" = type { %"class.thrust::reference.1182" }
%"class.thrust::detail::tuple_of_iterator_references.1199" = type { %"class.thrust::tuple.1200" }
%"class.thrust::tuple.1200" = type { %"struct.thrust::detail::cons.1201" }
%"struct.thrust::detail::cons.1201" = type { %"struct.thrust::pair.82"*, %"struct.thrust::detail::cons.906" }
%"class.__gnu_cxx::new_allocator.39" = type { i8 }

$_ZN6thrust6system6detail10sequential3tagC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj0EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj1EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj2EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj3EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj4EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj5EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj6EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj7EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj8EEEEC2Ev = comdat any

$_ZN6thrust6detail10functional5actorINS1_8argumentILj9EEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj0EEC2Ev = comdat any

$_ZN6thrust6detail5seq_tC2Ev = comdat any

$_ZN6thrust6system3cpp6detail5par_tC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5par_tC2Ev = comdat any

$_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEEC2Ev = comdat any

$_ZN8UnitTestD2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj1EEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj2EEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj3EEC2Ev = comdat any

$_ZN8UnitTestD0Ev = comdat any

$_ZN8UnitTest3runEv = comdat any

$__clang_call_terminate = comdat any

$_ZN9__gnu_cxx13new_allocatorIcEC2ERKS1_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIcED2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj0EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj1EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj2EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj3EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj4EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj5EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj6EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj7EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj8EEC2Ev = comdat any

$_ZN6thrust6detail10functional8argumentILj9EEC2Ev = comdat any

$_Z15base_class_nameRKSs = comdat any

$_ZN8unittest9type_nameI17TestPairScanByKeyIiEEESsv = comdat any

$_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEED0Ev = comdat any

$_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE3runEv = comdat any

$_Z11chop_prefixRSsRKSs = comdat any

$_ZN9__gnu_cxx13new_allocatorIcEC2Ev = comdat any

$_ZNSt11char_traitsIcE6lengthEPKc = comdat any

$_ZN8unittest8demangleEPKc = comdat any

$_ZNKSt9type_info4nameEv = comdat any

$_ZNKSt6vectorImSaImEE4sizeEv = comdat any

$_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyaLj0EEclImEEvT_ = comdat any

$_ZNSt6vectorImSaImEEixEm = comdat any

$_ZNSt6vectorImSaImEED2Ev = comdat any

$_ZN17TestPairScanByKeyIaEclEm = comdat any

$_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeysLj1EEclImEEvT_ = comdat any

$_ZN8unittest15random_integersIaEEN6thrust11host_vectorIT_SaIS3_EEEm = comdat any

$_ZN6thrust11host_vectorINS_4pairIaaEESaIS2_EEC2Em = comdat any

$_ZN6thrust9transformINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_ = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEE3endEv = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv = comdat any

$_ZN6thrust13device_vectorIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS_11host_vectorIT_T0_EE = comdat any

$_ZN6thrust13device_vectorINS_4pairIaaEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE = comdat any

$_ZN8unittest15random_integersIbEEN6thrust11host_vectorIT_SaIS3_EEEm = comdat any

$_ZN6thrust11host_vectorIaSaIaEEC2IbSaIbEEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail11vector_baseIbSaIbEED2Ev = comdat any

$_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_ = comdat any

$_ZN6thrust4pairIaaEC2IiiEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPaEENS2_IPNS_4pairIaaEEEES8_S6_NS_8equal_toIaEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_ = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIaEEEENS2_INS3_INS_4pairIaaEEEEEES9_S7_NS_8equal_toIaEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_ = comdat any

$_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE3endEv = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIaaEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi = comdat any

$_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EED2Ev = comdat any

$_ZN6thrust11host_vectorIaSaIaEEC2Em = comdat any

$_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET0_T_SC_SB_T1_ = comdat any

$_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEEC2Em = comdat any

$_ZNSaIaEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEEC2ERKS2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIaED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEE12default_initEm = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorIaEC2Ev = comdat any

$_ZNSaIaEC2ERKS_ = comdat any

$_ZN6thrust6detail15normal_iteratorIPaEC2ES2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIaEC2ERKS1_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_ = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEE19default_construct_nENS0_15normal_iteratorIPaEEm = comdat any

$_ZNK6thrust6detail11vector_baseIaSaIaEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIaEE8allocateERS2_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIaEE8allocateERS2_mEN19workaround_warnings8allocateES4_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIaE8allocateEmPKv = comdat any

$_ZNK9__gnu_cxx13new_allocatorIaE8max_sizeEv = comdat any

$_ZN6thrust6detail23default_construct_rangeISaIaEPamEEvRT_T0_T1_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIaEPamEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_ = comdat any

$_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPamaEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6detail16allocator_systemISaIaEE3getERS2_ = comdat any

$_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE = comdat any

$_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_ = comdat any

$_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPamaEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPamNS_6detail12fill_functorIaEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_ = comdat any

$_ZN6thrust6detail12fill_functorIaEC2ERKa = comdat any

$_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPamNS_6detail12fill_functorIaEEEET0_RNS_16execution_policyIT_EESB_T1_T2_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPamNS_6detail21host_generate_functorINS6_12fill_functorIaEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIaEEEC2ES3_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPamNS_6detail21host_generate_functorINS8_12fill_functorIaEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIaEEEEvEC2ERKS5_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIaEEEEvEclIaEEvRT_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIaEEEclIaEEvRKT_ = comdat any

$_ZN6thrust18raw_reference_castIaEENS_6detail13raw_referenceIT_E4typeERS3_ = comdat any

$_ZNK6thrust6detail12fill_functorIaEclEv = comdat any

$_ZN6thrust16raw_pointer_castIPaEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPaE3getES2_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemISaIaEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_ = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIaSaIaEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIaEE10deallocateERS2_Pam = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIaEE10deallocateERS2_PamEN19workaround_warnings10deallocateES4_S5_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIaE10deallocateEPam = comdat any

$_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_ = comdat any

$_ZN6thrust6system6detail7generic13select_systemINS_14any_system_tagENS0_3cpp6detail3tagEEERNS_6detail17enable_if_definedINS8_14minimum_systemIT_T0_NS8_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyISB_EERNSJ_ISC_EE = comdat any

$_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_ = comdat any

$_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPaEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_ = comdat any

$_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIaLb0EEEEC2ES4_ = comdat any

$_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPaEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEvEC2ERKS6_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRaNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE = comdat any

$_ZN6thrusteqINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxS3_mS4_S5_mxEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNS6_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_17counting_iteratorImNS_11use_defaultES3_S3_EES4_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust17counting_iteratorImNS_11use_defaultES1_S1_E5equalImS1_S1_S1_EEbRKNS0_IT_T0_T1_T2_EE = comdat any

$_ZN6thrust6detail23counting_iterator_equalIxmmvE5equalEmm = comdat any

$_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE4baseEv = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPaEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIaLb0EEEEclINS0_28tuple_of_iterator_referencesImRaNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_ = comdat any

$_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_ = comdat any

$_ZNK8unittest14random_integerIaLb0EEclEj = comdat any

$_ZN6thrust3getILi0EmNS_6detail4consIRaNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN6thrust3getILi1EmNS_6detail4consIRaNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN8unittest4hashEj = comdat any

$_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEC2Ej = comdat any

$_ZN6thrust6random24uniform_int_distributionIaEC2Eaa = comdat any

$_ZN6thrust6random24uniform_int_distributionIaEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEaRT_ = comdat any

$_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EE4seedEj = comdat any

$_ZN6thrust6random6detail3modIjLj1ELj0ELj2147483647EEET_S3_ = comdat any

$_ZNK6thrust6random6detail10static_modIjLj1ELj0ELj2147483647ELb0EEclEj = comdat any

$_ZN6thrust4pairIaaEC2ERKaS3_ = comdat any

$_ZN6thrust6random24uniform_int_distributionIaEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEaRT_RKNS_4pairIaaEE = comdat any

$_ZN6thrust6random25uniform_real_distributionIdEC2Edd = comdat any

$_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_ = comdat any

$_ZN6thrust4pairIddEC2ERKdS3_ = comdat any

$_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_RKNS_4pairIddEE = comdat any

$_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEclEv = comdat any

$_ZN6thrust6random6detail3modIjLj48271ELj0ELj2147483647EEET_S3_ = comdat any

$_ZNK6thrust6random6detail10static_modIjLj48271ELj0ELj2147483647ELb0EEclEj = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRaNS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRamNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesImRaNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEENS1_5applyIT_E4typeERKS7_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPaEEEENS1_5applyIT_E4typeERKS7_ = comdat any

$_ZN6thrust5tupleImRaNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_ = comdat any

$_ZNK6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_17counting_iteratorImNS_11use_defaultES3_S3_EEEENT_9referenceERKS5_ = comdat any

$_ZNK6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxE7derivedEv = comdat any

$_ZNK6thrust17counting_iteratorImNS_11use_defaultES1_S1_E11dereferenceEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE14base_referenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPaEEEENT_9referenceERKS6_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consImNS1_IRaNS_9null_typeEEEEC2IKmaKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRaNS_9null_typeEEC2IaEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_ = comdat any

$_ZN6thrust6detail18increment_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPaEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_17counting_iteratorImNS_11use_defaultES3_S3_EEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE9incrementEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPaEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPaEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEEC2ERKSA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPaEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS_14any_system_tagENS0_3cpp6detail3tagEEENS_6detail9enable_ifIXsr6thrust6detail7is_sameIT0_NS9_14minimum_systemIT_SB_NS9_19minimum_type_detail14any_conversionESF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_E4typeEEE5valueERSB_E4typeERNS_16execution_policyISD_EERNSL_ISB_EE = comdat any

$_ZN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxEC2ERKm = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEC2Em = comdat any

$_ZNSaIN6thrust4pairIaaEEEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EEC2ERKS4_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE12default_initEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEEC2Ev = comdat any

$_ZNSaIN6thrust4pairIaaEEEC2ERKS2_ = comdat any

$_ZN6thrust6detail15normal_iteratorIPNS_4pairIaaEEEC2ES4_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEEC2ERKS4_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE8allocateERS4_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE8allocateEmPKv = comdat any

$_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE8max_sizeEv = comdat any

$_ZN6thrust6detail23default_construct_rangeISaINS_4pairIaaEEEPS3_mEEvRT_T0_T1_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIaaEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIaaEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemISaINS_4pairIaaEEEE3getERS4_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEC2ERS5_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIaaEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEEvEC2ERKS7_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEEvEclIS5_EEvRT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEclIS4_EEvRT_ = comdat any

$_ZN6thrust18raw_reference_castINS_4pairIaaEEEENS_6detail13raw_referenceIT_E4typeERS5_ = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE9constructIS3_EEvRS4_PT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIaaEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE9constructIS3_JEEEvPT_DpOT0_ = comdat any

$_ZN6thrust4pairIaaEC2Ev = comdat any

$_ZN6thrust16raw_pointer_castIPNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPNS_4pairIaaEEE3getES4_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIaaEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE10deallocateERS4_PS3_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE10deallocateEPS3_m = comdat any

$_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPaEES8_NS6_IPNS_4pairIaaEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_ = comdat any

$_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPaEESA_NS8_IPNS_4pairIaaEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEESA_NS8_IPNS_4pairIaaEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_ = comdat any

$_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEC2ES2_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEESC_NSA_IPNS_4pairIaaEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEC2ERKS4_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRaS8_RNS_4pairIaaEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE = comdat any

$_ZN6thrusteqINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPaEES5_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRaS6_RNS_4pairIaaEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_ = comdat any

$_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_ = comdat any

$_ZN6thrust3getILi2ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN17make_pair_functorclIaaEEN6thrust4pairIT_T0_EERKS3_RKS4_ = comdat any

$_ZN6thrust3getILi0ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN6thrust3getILi1ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIaaEERaNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIaaEERaNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIaaEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust9make_pairIaaEENS_4pairIT_T0_EES2_S3_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS0_4consIS4_NS5_IRNS_4pairIaaEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRaS4_NS0_4consIS4_NS5_IRNS_4pairIaaEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS0_4consIRNS_4pairIaaEENS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRaS2_RNS_4pairIaaEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_ = comdat any

$_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIaaEEEEEENS1_5applyIT_E4typeERKS9_ = comdat any

$_ZN6thrust5tupleIRaS1_RNS_4pairIaaEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consINS4_IPNS_4pairIaaEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEENT_9referenceERKS8_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consIRaNS1_IS2_NS1_IRNS_4pairIaaEENS_9null_typeEEEEEEC2IaaS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRaNS1_IRNS_4pairIaaEENS_9null_typeEEEEC2IaS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRNS_4pairIaaEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPaEENS3_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIaaEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEENS4_IPaEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEENS4_IPaEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE = comdat any

$_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS0_3cpp6detail3tagEEERT_RNS_16execution_policyIS8_EESC_ = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPaEEEEvRT_NS6_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust23device_malloc_allocatorIaEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEEC2ERKS3_ = comdat any

$_ZN6thrust23device_malloc_allocatorIaED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE10range_initINS0_15normal_iteratorIPKaEEEEvT_SA_ = comdat any

$_ZNK6thrust6detail11vector_baseIaSaIaEE5beginEv = comdat any

$_ZNK6thrust6detail11vector_baseIaSaIaEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEED2Ev = comdat any

$_ZN6thrust23device_malloc_allocatorIaEC2ERKS1_ = comdat any

$_ZN6thrust10device_ptrIaEC2IaEEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEC2ES3_ = comdat any

$_ZN6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEEC2IaEEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEC2ERKS3_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_ = comdat any

$_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE10range_initINS0_15normal_iteratorIPKaEEEEvT_SA_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_ = comdat any

$_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE17allocate_and_copyINS0_15normal_iteratorIPKaEEEEvmT_SA_RNS0_18contiguous_storageIaS3_EE = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_aS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKaEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKaEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv = comdat any

$_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE10deallocateEv = comdat any

$_ZN6thrust3maxImEET_RKS1_S3_ = comdat any

$_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE8capacityEv = comdat any

$_ZN6thrust3minImEET_RKS1_S3_ = comdat any

$_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE18uninitialized_copyINS0_15normal_iteratorIPKaEEEENS6_INS_10device_ptrIaEEEET_SD_SC_ = comdat any

$_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE7destroyENS0_15normal_iteratorINS_10device_ptrIaEEEES8_ = comdat any

$_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE10deallocateERS3_NS_10device_ptrIaEEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE10deallocateERS3_NS_10device_ptrIaEEmEN19workaround_warnings10deallocateES5_S7_m = comdat any

$_ZN6thrust23device_malloc_allocatorIaE10deallocateENS_10device_ptrIaEEm = comdat any

$_ZN6thrust11device_freeENS_10device_ptrIvEE = comdat any

$_ZN6thrust10device_ptrIvEC2IaEERKNS0_IT_EE = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_10device_ptrIvEEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_10device_ptrIvEEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE = comdat any

$_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_ = comdat any

$_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrIvEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc = comdat any

$_ZN6thrust6system13cuda_categoryEv = comdat any

$_ZN6thrust6system12system_errorC2EiRKNS0_14error_categoryEPKc = comdat any

$_ZN6thrust6system12system_errorD2Ev = comdat any

$_ZN6thrust6system4cuda6detail19cuda_error_categoryC2Ev = comdat any

$_ZN6thrust6system14error_categoryC2Ev = comdat any

$_ZN6thrust6system4cuda6detail19cuda_error_categoryD0Ev = comdat any

$_ZNK6thrust6system4cuda6detail19cuda_error_category4nameEv = comdat any

$_ZNK6thrust6system4cuda6detail19cuda_error_category23default_error_conditionEi = comdat any

$_ZNK6thrust6system14error_category10equivalentEiRKNS0_15error_conditionE = comdat any

$_ZNK6thrust6system14error_category10equivalentERKNS0_10error_codeEi = comdat any

$_ZNK6thrust6system4cuda6detail19cuda_error_category7messageEi = comdat any

$_ZN6thrust6system14error_categoryD2Ev = comdat any

$_ZN6thrust6system14error_categoryD0Ev = comdat any

$_ZNK6thrust6system14error_category23default_error_conditionEi = comdat any

$_ZN6thrust6system15error_conditionC2EiRKNS0_14error_categoryE = comdat any

$_ZN6thrust6system20make_error_conditionENS0_4cuda4errc6errc_tE = comdat any

$_ZN6thrust6system15system_categoryEv = comdat any

$_ZN6thrust6system6detail21system_error_categoryC2Ev = comdat any

$_ZN6thrust6system6detail21system_error_categoryD0Ev = comdat any

$_ZNK6thrust6system6detail21system_error_category4nameEv = comdat any

$_ZNK6thrust6system6detail21system_error_category23default_error_conditionEi = comdat any

$_ZNK6thrust6system6detail21system_error_category7messageEi = comdat any

$_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE = comdat any

$_ZN6thrust6system16generic_categoryEv = comdat any

$_ZN6thrust6system6detail22generic_error_categoryC2Ev = comdat any

$_ZN6thrust6system6detail22generic_error_categoryD0Ev = comdat any

$_ZNK6thrust6system6detail22generic_error_category4nameEv = comdat any

$_ZNK6thrust6system6detail22generic_error_category7messageEi = comdat any

$_ZN6thrust6systemeqERKNS0_15error_conditionES3_ = comdat any

$_ZNK6thrust6system15error_condition8categoryEv = comdat any

$_ZNK6thrust6system14error_categoryeqERKS1_ = comdat any

$_ZNK6thrust6system15error_condition5valueEv = comdat any

$_ZNK6thrust6system10error_code8categoryEv = comdat any

$_ZNK6thrust6system10error_code5valueEv = comdat any

$_ZN6thrust6system10error_codeC2EiRKNS0_14error_categoryE = comdat any

$_ZN6thrust6system12system_errorD0Ev = comdat any

$_ZNK6thrust6system12system_error4whatEv = comdat any

$_ZNK6thrust6system10error_codecvbEv = comdat any

$_ZNK6thrust6system10error_code7messageEv = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrIvEEE3getES3_ = comdat any

$_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEE3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlE4baseEv = comdat any

$_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IaEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrIaEEE3getES3_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_ = comdat any

$_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEE3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE4baseEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8max_sizeERKS3_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIaEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8allocateERS3_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m = comdat any

$_ZN6thrust23device_malloc_allocatorIaE8allocateEmNS_10device_ptrIKaEE = comdat any

$_ZN6thrust10device_ptrIKaEC2IaEEPT_ = comdat any

$_ZNK6thrust23device_malloc_allocatorIaE8max_sizeEv = comdat any

$_ZNSt9bad_allocC2Ev = comdat any

$_ZN6thrust13device_mallocIaEENS_10device_ptrIT_EEm = comdat any

$_ZNSt14numeric_limitsImE3maxEv = comdat any

$_ZNSt9exceptionC2Ev = comdat any

$_ZN6thrust6mallocIaNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm = comdat any

$_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_ = comdat any

$_ZN6thrust6system6detail7generic6mallocIaNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm = comdat any

$_ZN6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IaEEPT_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_ = comdat any

$_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm = comdat any

$_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv = comdat any

$_ZN6thrust16raw_pointer_castIPvEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_ = comdat any

$_ZN6thrust6system4cuda6detail6mallocINS2_3tagEEEPvRNS2_16execution_policyIT_EEm = comdat any

$_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IvEEPT_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPvE3getES2_ = comdat any

$_ZN6thrust6system6detail9bad_allocC2ERKSs = comdat any

$_ZN6thrust6system6detail9bad_allocD2Ev = comdat any

$_ZN6thrust6system6detail9bad_allocD0Ev = comdat any

$_ZNK6thrust6system6detail9bad_alloc4whatEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEC2ERKS8_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlE4baseEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPaaS5_NS_27random_access_traversal_tagENS_9referenceIaS7_S6_EElEC2ERKS8_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPaaS5_NS_27random_access_traversal_tagENS_9referenceIaS7_S6_EElE4baseEv = comdat any

$_ZN6thrust7pointerIKaNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IaEEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKaEEPS2_aNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIaEENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIaEENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_ = comdat any

$_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIaEEE3getERS3_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_ = comdat any

$_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE = comdat any

$_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEElNS_10device_ptrIaEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrIaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEdeEv = comdat any

$_ZNK6thrust9referenceIaNS_10device_ptrIaEENS_16device_referenceIaEEEadEv = comdat any

$_ZN6thrust16raw_pointer_castIPKaEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv = comdat any

$_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE = comdat any

$_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE = comdat any

$_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIaEEEENT_9referenceERKS4_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv = comdat any

$_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceIaEC2ERKNS_10device_ptrIaEE = comdat any

$_ZN6thrust9referenceIaNS_10device_ptrIaEENS_16device_referenceIaEEEC2ERKS2_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKaE3getES3_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKaEEEENT_9referenceERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv = comdat any

$_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE = comdat any

$_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERKT_RKNS0_21execution_policy_baseIS6_EE = comdat any

$_ZN6thrust6system4cuda6detail13legacy_streamEv = comdat any

$_ZN6thrust6system4cuda6detail14default_streamEv = comdat any

$_ZN6thrust6system12system_errorC2EiRKNS0_14error_categoryE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIaEEEEvRT_NS4_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7advanceEl = comdat any

$_ZN6thrust6system4cuda6detail12cross_systemINS0_3cpp6detail3tagENS2_3tagEEC2ERNS_16execution_policyIS6_EERNS9_IS7_EE = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIaEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl = comdat any

$_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIaEENS_10device_ptrIaEElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS5_aS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIaEENS_10device_ptrIaEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS2_aS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIaEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIaEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE11distance_toIS2_S3_aS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust6detail18contiguous_storageIaSaIaEE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorIPKaEC2IPaEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_ = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKaEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_ = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_ = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEEC2ERKS3_ = comdat any

$_ZN6thrust10device_ptrINS_4pairIaaEEEC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEC2ES5_ = comdat any

$_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10deallocateEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_ = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEE10deallocateENS_10device_ptrIS2_EEm = comdat any

$_ZN6thrust10device_ptrIvEC2INS_4pairIaaEEEERKNS0_IT_EE = comdat any

$_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIaaEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIaaEEEEE3getES5_ = comdat any

$_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8max_sizeERKS5_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIaaEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8allocateERS5_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEE8allocateEmNS_10device_ptrIKS2_EE = comdat any

$_ZN6thrust10device_ptrIKNS_4pairIaaEEEC2IS2_EEPT_ = comdat any

$_ZNK6thrust23device_malloc_allocatorINS_4pairIaaEEE8max_sizeEv = comdat any

$_ZN6thrust13device_mallocINS_4pairIaaEEEENS_10device_ptrIT_EEm = comdat any

$_ZN6thrust6mallocINS_4pairIaaEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm = comdat any

$_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_4pairIaaEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm = comdat any

$_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv = comdat any

$_ZN6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIaaEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIaaEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_ = comdat any

$_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIaaEEEEE3getERS5_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIaaEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv = comdat any

$_ZNK6thrust9referenceINS_4pairIaaEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIaaEEEEEENT_9referenceERKS6_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceINS_4pairIaaEEEC2ERKNS_10device_ptrIS2_EE = comdat any

$_ZN6thrust9referenceINS_4pairIaaEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS_4pairIaaEEE3getES5_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENT_9referenceERKS9_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIaaEEEEEEvRT_NS6_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIaaEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_NS9_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl = comdat any

$_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIaaEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIaaEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_ = comdat any

$_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_ = comdat any

$_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_4gridEmmm = comdat any

$_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j = comdat any

$_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_ = comdat any

$_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust3minIlEET_RKS1_S3_ = comdat any

$_ZN6thrust6detail4util9divide_riIllEET_S3_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev = comdat any

$_ZN6thrust3minIjEET_RKS1_S3_ = comdat any

$_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_ = comdat any

$_ZN6thrust6detail4consIRjNS1_IS2_NS_9null_typeEEEEC2IjjKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRjNS_9null_typeEEC2IjEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail14current_deviceEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail26device_properties_uncachedEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyINS4_25cuda_launch_config_detail4util13zero_functionImEEEEmRKNS4_21function_attributes_tERKNS4_19device_properties_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_IiEET_RKS8_SA_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util13zero_functionImEclEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail29max_blocks_per_multiprocessorERKNS4_19device_properties_tE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail20smem_allocation_unitERKNS4_19device_properties_tE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iImmEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail19reg_allocation_unitERKNS4_19device_properties_tEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail24warp_allocation_multipleERKNS4_19device_properties_tE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riImiEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iImiEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iIiiEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail28num_sides_per_multiprocessorERKNS4_19device_properties_tE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_ImEET_RKS8_SA_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riImmEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riIiiEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust3minIiEET_RKS1_S3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEENS3_14parallel_groupIT_Lm0EEESA_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3conEmm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEC2EiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEC2EiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei = comdat any

$_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EEC2EiiS6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm1EEELm0EEC2EiS6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EEC2EiS8_i = comdat any

$_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_ = comdat any

$_ZN6thrust6detail4consIRlNS1_IS2_NS_9null_typeEEEEC2IllKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRlNS_9null_typeEEC2IlEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_ = comdat any

$_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_ = comdat any

$_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_ = comdat any

$_ZN6thrust6detail4consIRiNS1_IS2_NS_9null_typeEEEEC2IiiKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRiNS_9null_typeEEC2IiEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_zImmEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_rzImmEET_S8_T0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4makeEiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEE4makeEiiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_ = comdat any

$_ZN4dim3C2Ejjj = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6futureIvEC2EP11CUstream_stb = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6futureIvE5validEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIaaEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIaaEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorIPKNS_4pairIaaEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_ = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEEvRT_NS9_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl = comdat any

$_ZN6thrust11host_vectorIbSaIbEEC2Em = comdat any

$_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET0_T_SC_SB_T1_ = comdat any

$_ZN6thrust6detail11vector_baseIbSaIbEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIbSaIbEEC2Em = comdat any

$_ZNSaIbEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageIbSaIbEEC2ERKS2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIbED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIbSaIbEE12default_initEm = comdat any

$_ZN6thrust6detail18contiguous_storageIbSaIbEED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorIbEC2Ev = comdat any

$_ZNSaIbEC2ERKS_ = comdat any

$_ZN6thrust6detail15normal_iteratorIPbEC2ES2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIbEC2ERKS1_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_ = comdat any

$_ZN6thrust6detail18contiguous_storageIbSaIbEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageIbSaIbEE19default_construct_nENS0_15normal_iteratorIPbEEm = comdat any

$_ZNK6thrust6detail11vector_baseIbSaIbEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIbEE8allocateERS2_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIbEE8allocateERS2_mEN19workaround_warnings8allocateES4_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIbE8allocateEmPKv = comdat any

$_ZNK9__gnu_cxx13new_allocatorIbE8max_sizeEv = comdat any

$_ZN6thrust6detail23default_construct_rangeISaIbEPbmEEvRT_T0_T1_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIbEPbmEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_ = comdat any

$_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPbmbEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6detail16allocator_systemISaIbEE3getERS2_ = comdat any

$_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPbmbEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPbmNS_6detail12fill_functorIbEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_ = comdat any

$_ZN6thrust6detail12fill_functorIbEC2ERKb = comdat any

$_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPbmNS_6detail12fill_functorIbEEEET0_RNS_16execution_policyIT_EESB_T1_T2_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPbmNS_6detail21host_generate_functorINS6_12fill_functorIbEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIbEEEC2ES3_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPbmNS_6detail21host_generate_functorINS8_12fill_functorIbEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIbEEEEvEC2ERKS5_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIbEEEEvEclIbEEvRT_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIbEEEclIbEEvRKT_ = comdat any

$_ZN6thrust18raw_reference_castIbEENS_6detail13raw_referenceIT_E4typeERS3_ = comdat any

$_ZNK6thrust6detail12fill_functorIbEclEv = comdat any

$_ZN6thrust16raw_pointer_castIPbEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPbE3getES2_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemISaIbEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_ = comdat any

$_ZN6thrust6detail18contiguous_storageIbSaIbEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIbSaIbEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIbEE10deallocateERS2_Pbm = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIbEE10deallocateERS2_PbmEN19workaround_warnings10deallocateES4_S5_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIbE10deallocateEPbm = comdat any

$_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_ = comdat any

$_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPbEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_ = comdat any

$_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIbLb0EEEEC2ES4_ = comdat any

$_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPbEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEvEC2ERKS6_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRbNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPbEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIbLb0EEEEclINS0_28tuple_of_iterator_referencesImRbNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_ = comdat any

$_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_ = comdat any

$_ZNK8unittest14random_integerIbLb0EEclEj = comdat any

$_ZN6thrust3getILi0EmNS_6detail4consIRbNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN6thrust3getILi1EmNS_6detail4consIRbNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN6thrust6random24uniform_int_distributionIjEC2Ejj = comdat any

$_ZN6thrust6random24uniform_int_distributionIjEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEjRT_ = comdat any

$_ZN6thrust4pairIjjEC2ERKjS3_ = comdat any

$_ZN6thrust6random24uniform_int_distributionIjEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEjRT_RKNS_4pairIjjEE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRbNS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRbmNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRbS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesImRbNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPbEEEENS1_5applyIT_E4typeERKS7_ = comdat any

$_ZN6thrust5tupleImRbNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPbEEEENT_9referenceERKS6_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consImNS1_IRbNS_9null_typeEEEEC2IKmbKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRbNS_9null_typeEEC2IbEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPbEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPbEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPbEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEEC2ERKSA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPbEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPbEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail18contiguous_storageIbSaIbEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEEC2IbSaIbEEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_ = comdat any

$_ZNK6thrust6detail11vector_baseIbSaIbEE5beginEv = comdat any

$_ZNK6thrust6detail11vector_baseIbSaIbEE3endEv = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_ = comdat any

$_ZN6thrust6detail11vector_baseIaSaIaEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIaS2_EE = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKbEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKbEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv = comdat any

$_ZNK6thrust6detail11vector_baseIaSaIaEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseIaSaIaEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPaEET_SB_SA_ = comdat any

$_ZN6thrust6detail18contiguous_storageIaSaIaEE7destroyENS0_15normal_iteratorIPaEES6_ = comdat any

$_ZNK6thrust6detail18contiguous_storageIaSaIaEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIaEE8max_sizeERKS2_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIaEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIaENS0_15normal_iteratorIPKbEEPaEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIaENS0_15normal_iteratorIPKbEEPaEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPaEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_ = comdat any

$_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPaEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_ = comdat any

$_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPaEET1_RNS2_16execution_policyIT_EET0_SI_SD_ = comdat any

$_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPaEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE = comdat any

$_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPaEET0_T_SB_SA_ = comdat any

$_ZN6thrustneINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSC_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPaNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEppEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKbEES6_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E5equalIS5_S4_S6_S6_S6_S6_S6_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKbEEEENT_9referenceERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKbEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E9incrementEv = comdat any

$_ZN6thrust6detail13destroy_rangeISaIaEPalEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIaEPalEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPaEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPaEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust6detail18contiguous_storageIbSaIbEE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorIPKbEC2IPbEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_ = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKbEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl = comdat any

$_ZN6thrust6detail18contiguous_storageIbSaIbEE7destroyENS0_15normal_iteratorIPbEES6_ = comdat any

$_ZN6thrust6detail11vector_baseIbSaIbEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeISaIbEPblEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblS4_bS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIbEPblEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPbEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPbEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPbEEEEvRT_NS6_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl = comdat any

$_ZN6thrust4pairIiiEC2ERKiS3_ = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPaEENS6_IPNS_4pairIaaEEEESC_SA_NS_8equal_toIaEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_ = comdat any

$_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPaEENS8_IPNS_4pairIaaEEEESE_SC_NS_8equal_toIaEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_ = comdat any

$_ZN6thrustneINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN9add_pairsclIN6thrust4pairIaaEES3_EET_RKS4_RKT0_ = comdat any

$_ZNK6thrust8equal_toIaEclERKaS3_ = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS6_INS7_INS_4pairIaaEEEEEESD_SB_NS_8equal_toIaEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_ = comdat any

$_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE = comdat any

$_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS8_INS9_INS_4pairIaaEEEEEESF_SD_NS_8equal_toIaEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_ = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE = comdat any

$_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EEm = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEixEm = comdat any

$_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EaSERKj = comdat any

$_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIaEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEmiEl = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6detail4not2INS_8equal_toIaEEEENS0_13binary_negateIT_EERKS5_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm = comdat any

$_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm = comdat any

$_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_ = comdat any

$_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_ = comdat any

$_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEC2ES7_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system4cuda6detail3tagEED2Ev = comdat any

$_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEC2ERKS7_ = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEC2EmRKS9_ = comdat any

$_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev = comdat any

$_ZN6thrust6detail22temporary_array_detail16construct_valuesIjNS0_15temporary_arrayIjNS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_ = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEEC2ERKS6_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEC2ERKS8_ = comdat any

$_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEC2ES8_ = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEC2ERKS8_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_EC2ERKS9_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateERS9_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateERS9_mEN19workaround_warnings8allocateESB_m = comdat any

$_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferIjNS_6system4cuda6detail3tagEEENS_4pairINS_7pointerIT_T0_NS_11use_defaultES9_EENSA_15difference_typeEEERKNS_6detail21execution_policy_baseIS8_EESB_ = comdat any

$_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEmEC2IS7_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE10deallocateENS_7pointerIjS5_NS_11use_defaultES8_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairIjNS_6system4cuda6detail3tagENS_4pairINS_7pointerIjS6_NS_11use_defaultES9_EElEEEENS7_INS8_IT_T0_S9_S9_EENSE_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferIjNS0_4cuda6detail3tagEEENS_4pairINS_7pointerIT_T0_NS_11use_defaultESB_EENSC_15difference_typeEEERNS_16execution_policyISA_EESD_ = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_ = comdat any

$_ZN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEC2ERKS7_RKl = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_ = comdat any

$_ZNK6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE4baseEv = comdat any

$_ZN6thrust6mallocIjNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm = comdat any

$_ZN6thrust9make_pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEENS_4pairIT_T0_EES9_SA_ = comdat any

$_ZN6thrust6system6detail7generic6mallocIjNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerIjS6_NS_11use_defaultES8_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateERS9_NS_7pointerIjS7_NS_11use_defaultESD_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateERS9_NS_7pointerIjS7_NS_11use_defaultESD_EEmEN19workaround_warnings10deallocateESB_SE_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIjS6_NS_11use_defaultESA_EEm = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEixEl = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEEENT_9referenceERKSC_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEENT_9referenceERKS9_ = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_E11dereferenceEv = comdat any

$_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EC2ERKS7_ = comdat any

$_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E11assign_fromIPKjEEvT_ = comdat any

$_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E11assign_fromIS5_NS2_3cpp6detail3tagEPKjEEvPT_PT0_T1_ = comdat any

$_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E24strip_const_assign_valueINS4_12cross_systemIS5_NS2_3cpp6detail3tagEEEPKjEEvRKT_T0_ = comdat any

$_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE = comdat any

$_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerIjS4_NS_11use_defaultES9_EEPKjEEvRNS2_12cross_systemIT_T0_EET1_T2_ = comdat any

$_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE = comdat any

$_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerIjS4_NS_11use_defaultES9_EEPKjEEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSD_IS4_S7_EESA_SC_ = comdat any

$_ZNK6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEE6rotateEv = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKjNS_7pointerIjS8_NS_11use_defaultESD_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SM_SF_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_NS_27random_access_traversal_tagESJ_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_NS_27random_access_traversal_tagESJ_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKjlNS_7pointerIjS7_NS_11use_defaultESB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEET_RKNS_15iterator_facadeISB_T0_T1_T2_T3_T4_EENSB_15difference_typeE = comdat any

$_ZNK6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EadEv = comdat any

$_ZN6thrust16raw_pointer_castIPKjEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKjE3getES3_ = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEEvRT_NS9_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7advanceEl = comdat any

$_ZN6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEEC2ERNS_16execution_policyIS4_EERNS9_IS7_EE = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIaEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_ = comdat any

$_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEC2ES5_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_ = comdat any

$_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEC2ERKS7_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIaEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIaEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIaEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIaEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIaEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIaEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_ = comdat any

$_ZN6thrust6detail16advance_iteratorIlEC2El = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIaEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_16advance_iteratorIlEEEET_NS_9null_typeES5_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEEEvRT_NSC_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E7advanceEl = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIaEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIaEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESC_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEmIEl = comdat any

$_ZN6thrust6detail13binary_negateINS_8equal_toIaEEEC2ERKS3_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEC2ERKS9_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev = comdat any

$_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIaaEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERKS8_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEC2ERKSA_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_4pairIaaEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIaaEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIaaEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_ = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_ = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm = comdat any

$_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_ = comdat any

$_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEES8_EC2ES6_S8_ = comdat any

$_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESA_EEEC2ESB_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_ = comdat any

$_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESB_EEEEvEC2ERKSD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_ = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIaaEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_ = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv = comdat any

$_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_ = comdat any

$_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_ = comdat any

$_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_ = comdat any

$_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_ = comdat any

$_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIaaEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZNK6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv = comdat any

$_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_ = comdat any

$_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_ = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_4gridILm512ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE20hardware_concurrencyEv = comdat any

$_ZN6thrust6system4cuda6detail21aligned_decompositionIlEC2Elll = comdat any

$_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_4gridILm256ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE15is_stream_validEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4execEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE6streamEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE12before_eventEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EE9heap_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4makeEiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEC2EiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEC2EiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEE4makeEiiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EEC2EiS6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm512EEC2ES6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EEC2ES8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3conILm512ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEENS3_14parallel_groupIT_Lm0EEESA_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st = comdat any

$_ZNK6thrust6system4cuda6detail21aligned_decompositionIlE4sizeEv = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev = comdat any

$_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_ = comdat any

$_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_ = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_ = comdat any

$_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_ = comdat any

$_ZNK6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv = comdat any

$_ZN6thrust6mallocINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4makeEiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEC2EiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEC2EiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEE4makeEiiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EEC2EiS6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm5EEELm128EEC2ES6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EEC2ES8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3conILm128ELm5EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEENS3_14parallel_groupIT_Lm0EEESA_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE15is_stream_validEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE6streamEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4makeEiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEC2EiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEC2EiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEE4makeEiiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EEC2EiS6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm256EEC2ES6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EEC2ES8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3conILm256ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEENS3_14parallel_groupIT_Lm0EEESA_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIaaEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIaaEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_ = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE3getERSB_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_ = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIjS7_NS_11use_defaultESD_EEEESF_ = comdat any

$_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEENS_7pointerIjS7_NS_11use_defaultESB_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElSA_jS7_SB_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEENS_7pointerIjS8_NS_11use_defaultESC_EElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERSF_SG_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEESB_EENS2_20distance_from_resultIT_T0_E4typeERKSD_RKSE_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEESB_EENT_15difference_typeERKSC_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E11distance_toISA_S9_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElS7_jS5_S8_SA_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EES8_EENS_6detail20distance_from_resultIT_T0_E4typeERKSB_RKSC_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EES8_EENT_15difference_typeERKS9_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE11distance_toIS7_S8_jS5_S9_SB_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE = comdat any

$_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS0_4cuda6detail3tagEEERT_RNS_16execution_policyIS8_EESC_ = comdat any

$_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE4sizeEv = comdat any

$_ZN6thrusteqINS_4pairIaaEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE = comdat any

$_ZN8unittest15UnitTestFailureC2Ev = comdat any

$_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_ = comdat any

$_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_ = comdat any

$_ZN8unittest17UnitTestExceptionlsIiEERS0_RKT_ = comdat any

$_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_ = comdat any

$_ZN8unittest17UnitTestExceptionlsIA22_cEERS0_RKT_ = comdat any

$_ZN8unittest17UnitTestExceptionlsIA9_cEERS0_RKT_ = comdat any

$_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIaaEESaIS4_EEEEESsv = comdat any

$_ZN8unittest15UnitTestFailureC2EOS0_ = comdat any

$_ZN8unittest17UnitTestExceptionD2Ev = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv = comdat any

$_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIaaEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_ = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIaaEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE = comdat any

$_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_ = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_ = comdat any

$_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_ = comdat any

$_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEE5beginEv = comdat any

$_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system3cpp6detail3tagEED2Ev = comdat any

$_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_ = comdat any

$_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEC2ES7_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEEvRT_NSA_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIaaEEEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEC2ERKS9_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEC2ERKS8_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEC2ERKSA_ = comdat any

$_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_4pairIaaEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIaaEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIaaEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_ = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_ = comdat any

$_ZNK6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv = comdat any

$_ZN6thrust6mallocINS_4pairIaaEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_4pairIaaEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm = comdat any

$_ZN6thrust6mallocINS_6system3cpp6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm = comdat any

$_ZNK6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_E3getEv = comdat any

$_ZN6thrust6system6detail10sequential6mallocINS0_3cpp6detail3tagEEEPvRNS2_16execution_policyIT_EEm = comdat any

$_ZN6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_EC2IvEEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEC2ERKS8_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlE4baseEv = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIaaEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIaaEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE3getERSB_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_ = comdat any

$_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv = comdat any

$_ZNK6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIaaEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv = comdat any

$_ZNK6thrust9referenceIKNS_4pairIaaEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv = comdat any

$_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS2_3tagENS0_3cpp6detail3tagEEE14cudaMemcpyKindRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE = comdat any

$_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS2_3tagENS0_3cpp6detail3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_ = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv = comdat any

$_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIaaEEEEE3getES6_ = comdat any

$_ZNK6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENT_9referenceERKSA_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIaaEEEEEENT_9referenceERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceIKNS_4pairIaaEEEC2ERKNS_10device_ptrIS3_EE = comdat any

$_ZN6thrust9referenceIKNS_4pairIaaEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_ = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm = comdat any

$_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_ = comdat any

$_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_ = comdat any

$_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_ = comdat any

$_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_ = comdat any

$_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_ = comdat any

$_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_ = comdat any

$_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEC2ERKS5_ = comdat any

$_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_ = comdat any

$_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_ = comdat any

$_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIaaEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_ = comdat any

$_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_ = comdat any

$_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEENS0_12unary_negateIT_EERKS9_ = comdat any

$_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIaaEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEEbEC2ERKS9_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE = comdat any

$_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_ = comdat any

$_ZN6thrust18raw_reference_castIRKNS_4pairIaaEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_ = comdat any

$_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_ = comdat any

$_ZNK6thrust6detail8equal_toINS_4pairIaaEEEclIS3_EEbRKS3_RKT_ = comdat any

$_ZN6thrust3getILi0ERKNS_4pairIaaEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_ = comdat any

$_ZN6thrust3getILi1ERKNS_4pairIaaEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_ = comdat any

$_ZN6thrusteqIaaEEbRKNS_4pairIT_T0_EES6_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIaaEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIaaEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIaaEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIaaEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_ = comdat any

$_ZN6thrust6detail20raw_reference_casterclINS_4pairIaaEEEENS0_13raw_referenceIKT_E4typeERS7_ = comdat any

$_ZN6thrust3getILi0ERKNS_4pairIaaEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIaaEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_ = comdat any

$_ZN6thrust3getILi1ERKNS_4pairIaaEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust5tupleIRKNS_4pairIaaEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_ = comdat any

$_ZN6thrust18raw_reference_castINS_4pairIaaEEEENS_6detail13raw_referenceIKT_E4typeERS6_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIaaEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE = comdat any

$_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIaaEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIaaEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIaaEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail4consIRKNS_4pairIaaEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_ = comdat any

$_ZN6thrust5tupleIRKNS_4pairIaaEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consIRKNS_4pairIaaEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_9referenceINS_4pairIaaEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_ = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEEvRT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv = comdat any

$_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEC2ERKS7_ = comdat any

$_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIaaEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIaaEEEEvRT_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE = comdat any

$_ZN6thrust10device_ptrIKNS_4pairIaaEEEC2IS2_EERKNS0_IT_EE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_ = comdat any

$_ZN6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE = comdat any

$_ZN8unittest17UnitTestExceptionC2Ev = comdat any

$_ZStorSt13_Ios_OpenmodeS_ = comdat any

$_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev = comdat any

$_ZStorSt12_Ios_IostateS_ = comdat any

$_ZNSsC2IPcEET_S1_RKSaIcE = comdat any

$_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcE = comdat any

$_ZNSs16_S_construct_auxIPcEES0_T_S1_RKSaIcESt12__false_type = comdat any

$_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag = comdat any

$_ZSteqIcEbRKSaIT_ES3_ = comdat any

$_ZN9__gnu_cxx17__is_null_pointerIcEEbPT_ = comdat any

$_ZSt8distanceIPcENSt15iterator_traitsIT_E15difference_typeES2_S2_ = comdat any

$_ZSt10__distanceIPcENSt15iterator_traitsIT_E15difference_typeES2_S2_St26random_access_iterator_tag = comdat any

$_ZSt19__iterator_categoryIPcENSt15iterator_traitsIT_E17iterator_categoryERKS2_ = comdat any

$_ZNSt11char_traitsIcE6assignERcRKc = comdat any

$_ZNSt11char_traitsIcE4copyEPcPKcm = comdat any

$_ZN8unittest17UnitTestExceptionC2EOS0_ = comdat any

$_ZNSs12_Alloc_hiderC2ERKS_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeISaINS_4pairIaaEEEPS3_lEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIaaEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIaaEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIaaEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIaaEEEEvRT_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIaaEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIaaEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEEvRT_NS8_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl = comdat any

$_ZN17TestPairScanByKeyIsEclEm = comdat any

$_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyiLj2EEclImEEvT_ = comdat any

$_ZN8unittest15random_integersIsEEN6thrust11host_vectorIT_SaIS3_EEEm = comdat any

$_ZN6thrust11host_vectorINS_4pairIssEESaIS2_EEC2Em = comdat any

$_ZN6thrust9transformINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_ = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEE3endEv = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv = comdat any

$_ZN6thrust13device_vectorIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS_11host_vectorIT_T0_EE = comdat any

$_ZN6thrust13device_vectorINS_4pairIssEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE = comdat any

$_ZN6thrust11host_vectorIsSaIsEEC2IbSaIbEEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust4pairIssEC2IiiEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPsEENS2_IPNS_4pairIssEEEES8_S6_NS_8equal_toIsEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_ = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIsEEEENS2_INS3_INS_4pairIssEEEEEES9_S7_NS_8equal_toIsEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_ = comdat any

$_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE3endEv = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIssEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi = comdat any

$_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EED2Ev = comdat any

$_ZN6thrust11host_vectorIsSaIsEEC2Em = comdat any

$_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET0_T_SC_SB_T1_ = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEEC2Em = comdat any

$_ZNSaIsEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEEC2ERKS2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIsED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEE12default_initEm = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorIsEC2Ev = comdat any

$_ZNSaIsEC2ERKS_ = comdat any

$_ZN6thrust6detail15normal_iteratorIPsEC2ES2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIsEC2ERKS1_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_ = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEE19default_construct_nENS0_15normal_iteratorIPsEEm = comdat any

$_ZNK6thrust6detail11vector_baseIsSaIsEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIsEE8allocateERS2_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIsEE8allocateERS2_mEN19workaround_warnings8allocateES4_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIsE8allocateEmPKv = comdat any

$_ZNK9__gnu_cxx13new_allocatorIsE8max_sizeEv = comdat any

$_ZN6thrust6detail23default_construct_rangeISaIsEPsmEEvRT_T0_T1_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIsEPsmEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_ = comdat any

$_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPsmsEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6detail16allocator_systemISaIsEE3getERS2_ = comdat any

$_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPsmsEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPsmNS_6detail12fill_functorIsEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_ = comdat any

$_ZN6thrust6detail12fill_functorIsEC2ERKs = comdat any

$_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPsmNS_6detail12fill_functorIsEEEET0_RNS_16execution_policyIT_EESB_T1_T2_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPsmNS_6detail21host_generate_functorINS6_12fill_functorIsEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIsEEEC2ES3_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPsmNS_6detail21host_generate_functorINS8_12fill_functorIsEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIsEEEEvEC2ERKS5_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIsEEEEvEclIsEEvRT_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIsEEEclIsEEvRKT_ = comdat any

$_ZN6thrust18raw_reference_castIsEENS_6detail13raw_referenceIT_E4typeERS3_ = comdat any

$_ZNK6thrust6detail12fill_functorIsEclEv = comdat any

$_ZN6thrust16raw_pointer_castIPsEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPsE3getES2_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemISaIsEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_ = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIsSaIsEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIsEE10deallocateERS2_Psm = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIsEE10deallocateERS2_PsmEN19workaround_warnings10deallocateES4_S5_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIsE10deallocateEPsm = comdat any

$_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_ = comdat any

$_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPsEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_ = comdat any

$_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIsLb0EEEEC2ES4_ = comdat any

$_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPsEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEvEC2ERKS6_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRsNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPsEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIsLb0EEEEclINS0_28tuple_of_iterator_referencesImRsNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_ = comdat any

$_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_ = comdat any

$_ZNK8unittest14random_integerIsLb0EEclEj = comdat any

$_ZN6thrust3getILi0EmNS_6detail4consIRsNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN6thrust3getILi1EmNS_6detail4consIRsNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN6thrust6random24uniform_int_distributionIsEC2Ess = comdat any

$_ZN6thrust6random24uniform_int_distributionIsEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEsRT_ = comdat any

$_ZN6thrust4pairIssEC2ERKsS3_ = comdat any

$_ZN6thrust6random24uniform_int_distributionIsEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEsRT_RKNS_4pairIssEE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRsNS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRsmNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesImRsNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPsEEEENS1_5applyIT_E4typeERKS7_ = comdat any

$_ZN6thrust5tupleImRsNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPsEEEENT_9referenceERKS6_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consImNS1_IRsNS_9null_typeEEEEC2IKmsKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRsNS_9null_typeEEC2IsEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPsEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPsEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPsEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEEC2ERKSA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPsEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEC2Em = comdat any

$_ZNSaIN6thrust4pairIssEEEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EEC2ERKS4_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE12default_initEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEEC2Ev = comdat any

$_ZNSaIN6thrust4pairIssEEEC2ERKS2_ = comdat any

$_ZN6thrust6detail15normal_iteratorIPNS_4pairIssEEEC2ES4_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEEC2ERKS4_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE8allocateERS4_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE8allocateEmPKv = comdat any

$_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE8max_sizeEv = comdat any

$_ZN6thrust6detail23default_construct_rangeISaINS_4pairIssEEEPS3_mEEvRT_T0_T1_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIssEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIssEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemISaINS_4pairIssEEEE3getERS4_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEC2ERS5_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIssEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEEvEC2ERKS7_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEEvEclIS5_EEvRT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEclIS4_EEvRT_ = comdat any

$_ZN6thrust18raw_reference_castINS_4pairIssEEEENS_6detail13raw_referenceIT_E4typeERS5_ = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE9constructIS3_EEvRS4_PT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIssEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE9constructIS3_JEEEvPT_DpOT0_ = comdat any

$_ZN6thrust4pairIssEC2Ev = comdat any

$_ZN6thrust16raw_pointer_castIPNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPNS_4pairIssEEE3getES4_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIssEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE10deallocateERS4_PS3_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE10deallocateEPS3_m = comdat any

$_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPsEES8_NS6_IPNS_4pairIssEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPsEESA_NS8_IPNS_4pairIssEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEESA_NS8_IPNS_4pairIssEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEESC_NSA_IPNS_4pairIssEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRsS8_RNS_4pairIssEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE = comdat any

$_ZN6thrusteqINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPsEES5_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRsS6_RNS_4pairIssEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_ = comdat any

$_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_ = comdat any

$_ZN6thrust3getILi2ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN17make_pair_functorclIssEEN6thrust4pairIT_T0_EERKS3_RKS4_ = comdat any

$_ZN6thrust3getILi0ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN6thrust3getILi1ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIssEERsNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIssEERsNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIssEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust9make_pairIssEENS_4pairIT_T0_EES2_S3_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS0_4consIS4_NS5_IRNS_4pairIssEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRsS4_NS0_4consIS4_NS5_IRNS_4pairIssEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS0_4consIRNS_4pairIssEENS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRsS2_RNS_4pairIssEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_ = comdat any

$_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIssEEEEEENS1_5applyIT_E4typeERKS9_ = comdat any

$_ZN6thrust5tupleIRsS1_RNS_4pairIssEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consINS4_IPNS_4pairIssEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIssEEEEEENT_9referenceERKS8_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consIRsNS1_IS2_NS1_IRNS_4pairIssEENS_9null_typeEEEEEEC2IssS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRsNS1_IRNS_4pairIssEENS_9null_typeEEEEC2IsS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRNS_4pairIssEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPsEENS3_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIssEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIssEEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEENS4_IPsEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEENS4_IPsEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPsEEEEvRT_NS6_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust23device_malloc_allocatorIsEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEEC2ERKS3_ = comdat any

$_ZN6thrust23device_malloc_allocatorIsED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE10range_initINS0_15normal_iteratorIPKsEEEEvT_SA_ = comdat any

$_ZNK6thrust6detail11vector_baseIsSaIsEE5beginEv = comdat any

$_ZNK6thrust6detail11vector_baseIsSaIsEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEED2Ev = comdat any

$_ZN6thrust23device_malloc_allocatorIsEC2ERKS1_ = comdat any

$_ZN6thrust10device_ptrIsEC2IsEEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEC2ES3_ = comdat any

$_ZN6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEEC2IsEEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEC2ERKS3_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_ = comdat any

$_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE10range_initINS0_15normal_iteratorIPKsEEEEvT_SA_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_ = comdat any

$_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE17allocate_and_copyINS0_15normal_iteratorIPKsEEEEvmT_SA_RNS0_18contiguous_storageIsS3_EE = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_sS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKsEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKsEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv = comdat any

$_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE10deallocateEv = comdat any

$_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE18uninitialized_copyINS0_15normal_iteratorIPKsEEEENS6_INS_10device_ptrIsEEEET_SD_SC_ = comdat any

$_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE7destroyENS0_15normal_iteratorINS_10device_ptrIsEEEES8_ = comdat any

$_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE10deallocateERS3_NS_10device_ptrIsEEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE10deallocateERS3_NS_10device_ptrIsEEmEN19workaround_warnings10deallocateES5_S7_m = comdat any

$_ZN6thrust23device_malloc_allocatorIsE10deallocateENS_10device_ptrIsEEm = comdat any

$_ZN6thrust10device_ptrIvEC2IsEERKNS0_IT_EE = comdat any

$_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IsEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrIsEEE3getES3_ = comdat any

$_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEE3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE4baseEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8max_sizeERKS3_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIsEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8allocateERS3_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m = comdat any

$_ZN6thrust23device_malloc_allocatorIsE8allocateEmNS_10device_ptrIKsEE = comdat any

$_ZN6thrust10device_ptrIKsEC2IsEEPT_ = comdat any

$_ZNK6thrust23device_malloc_allocatorIsE8max_sizeEv = comdat any

$_ZN6thrust13device_mallocIsEENS_10device_ptrIT_EEm = comdat any

$_ZN6thrust6mallocIsNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm = comdat any

$_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_ = comdat any

$_ZN6thrust6system6detail7generic6mallocIsNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm = comdat any

$_ZN6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IsEEPT_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPssS5_NS_27random_access_traversal_tagENS_9referenceIsS7_S6_EElEC2ERKS8_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPssS5_NS_27random_access_traversal_tagENS_9referenceIsS7_S6_EElE4baseEv = comdat any

$_ZN6thrust7pointerIKsNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IsEEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKsEEPS2_sNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIsEENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIsEENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_ = comdat any

$_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIsEEE3getERS3_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEElNS_10device_ptrIsEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrIsEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEdeEv = comdat any

$_ZNK6thrust9referenceIsNS_10device_ptrIsEENS_16device_referenceIsEEEadEv = comdat any

$_ZN6thrust16raw_pointer_castIPKsEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIsEEEENT_9referenceERKS4_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv = comdat any

$_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceIsEC2ERKNS_10device_ptrIsEE = comdat any

$_ZN6thrust9referenceIsNS_10device_ptrIsEENS_16device_referenceIsEEEC2ERKS2_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKsE3getES3_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKsEEEENT_9referenceERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIsEEEEvRT_NS4_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIsEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl = comdat any

$_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIsEENS_10device_ptrIsEElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS5_sS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIsEENS_10device_ptrIsEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS2_sS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIsEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIsEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE11distance_toIS2_S3_sS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust6detail18contiguous_storageIsSaIsEE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorIPKsEC2IPsEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_ = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKsEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIssEEEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_ = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIssEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_ = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIssEEEC2ERKS3_ = comdat any

$_ZN6thrust10device_ptrINS_4pairIssEEEC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEC2ES5_ = comdat any

$_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10deallocateEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_ = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIssEEE10deallocateENS_10device_ptrIS2_EEm = comdat any

$_ZN6thrust10device_ptrIvEC2INS_4pairIssEEEERKNS0_IT_EE = comdat any

$_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIssEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIssEEEEE3getES5_ = comdat any

$_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8max_sizeERKS5_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIssEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8allocateERS5_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIssEEE8allocateEmNS_10device_ptrIKS2_EE = comdat any

$_ZN6thrust10device_ptrIKNS_4pairIssEEEC2IS2_EEPT_ = comdat any

$_ZNK6thrust23device_malloc_allocatorINS_4pairIssEEE8max_sizeEv = comdat any

$_ZN6thrust13device_mallocINS_4pairIssEEEENS_10device_ptrIT_EEm = comdat any

$_ZN6thrust6mallocINS_4pairIssEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm = comdat any

$_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_4pairIssEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm = comdat any

$_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv = comdat any

$_ZN6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIssEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIssEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_ = comdat any

$_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIssEEEEE3getERS5_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIssEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv = comdat any

$_ZNK6thrust9referenceINS_4pairIssEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIssEEEEEENT_9referenceERKS6_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceINS_4pairIssEEEC2ERKNS_10device_ptrIS2_EE = comdat any

$_ZN6thrust9referenceINS_4pairIssEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS_4pairIssEEE3getES5_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENT_9referenceERKS9_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIssEEEEEEvRT_NS6_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIssEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_NS9_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl = comdat any

$_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIssEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIssEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIssEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIssEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorIPKNS_4pairIssEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_ = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEEvRT_NS9_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEEC2IbSaIbEEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_ = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust6detail11vector_baseIsSaIsEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIsS2_EE = comdat any

$_ZNK6thrust6detail11vector_baseIsSaIsEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseIsSaIsEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPsEET_SB_SA_ = comdat any

$_ZN6thrust6detail18contiguous_storageIsSaIsEE7destroyENS0_15normal_iteratorIPsEES6_ = comdat any

$_ZNK6thrust6detail18contiguous_storageIsSaIsEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIsEE8max_sizeERKS2_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIsEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIsENS0_15normal_iteratorIPKbEEPsEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIsENS0_15normal_iteratorIPKbEEPsEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPsEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_ = comdat any

$_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPsEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_ = comdat any

$_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPsEET1_RNS2_16execution_policyIT_EET0_SI_SD_ = comdat any

$_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPsEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE = comdat any

$_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPsEET0_T_SB_SA_ = comdat any

$_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPsNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_ = comdat any

$_ZN6thrust6detail13destroy_rangeISaIsEPslEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIsEPslEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPsEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPsEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPsEENS6_IPNS_4pairIssEEEESC_SA_NS_8equal_toIsEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_ = comdat any

$_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPsEENS8_IPNS_4pairIssEEEESE_SC_NS_8equal_toIsEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_ = comdat any

$_ZN6thrustneINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN9add_pairsclIN6thrust4pairIssEES3_EET_RKS4_RKT0_ = comdat any

$_ZNK6thrust8equal_toIsEclERKsS3_ = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS6_INS7_INS_4pairIssEEEEEESD_SB_NS_8equal_toIsEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_ = comdat any

$_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS8_INS9_INS_4pairIssEEEEEESF_SD_NS_8equal_toIsEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_ = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE = comdat any

$_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIsEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEmiEl = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZN6thrust6detail4not2INS_8equal_toIsEEEENS0_13binary_negateIT_EERKS5_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm = comdat any

$_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm = comdat any

$_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_ = comdat any

$_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_ = comdat any

$_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEC2ES7_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system4cuda6detail3tagEED2Ev = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIsEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_ = comdat any

$_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEC2ES5_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_ = comdat any

$_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEC2ERKS7_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIsEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIsEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIsEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIsEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIsEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIsEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_ = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIsEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIsEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIsEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEmIEl = comdat any

$_ZN6thrust6detail13binary_negateINS_8equal_toIsEEEC2ERKS3_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEC2ERKS9_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev = comdat any

$_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIssEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERKS8_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEC2ERKSA_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_4pairIssEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIssEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIssEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_ = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_ = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm = comdat any

$_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_ = comdat any

$_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEES8_EC2ES6_S8_ = comdat any

$_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESA_EEEC2ESB_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_ = comdat any

$_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESB_EEEEvEC2ERKSD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_ = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIssEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_ = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv = comdat any

$_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_ = comdat any

$_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_ = comdat any

$_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_ = comdat any

$_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_ = comdat any

$_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIssEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZNK6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv = comdat any

$_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_ = comdat any

$_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_ = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev = comdat any

$_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_ = comdat any

$_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_ = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_ = comdat any

$_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_ = comdat any

$_ZNK6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv = comdat any

$_ZN6thrust6mallocINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIssEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIssEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_ = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE3getERSB_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_ = comdat any

$_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE4sizeEv = comdat any

$_ZN6thrusteqINS_4pairIssEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE = comdat any

$_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIssEESaIS4_EEEEESsv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv = comdat any

$_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIssEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_ = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIssEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE = comdat any

$_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_ = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_ = comdat any

$_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_ = comdat any

$_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEE5beginEv = comdat any

$_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system3cpp6detail3tagEED2Ev = comdat any

$_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_ = comdat any

$_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEC2ES7_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEEvRT_NSA_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIssEEEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEC2ERKS9_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEC2ERKS8_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEC2ERKSA_ = comdat any

$_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_4pairIssEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIssEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIssEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_ = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_ = comdat any

$_ZNK6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv = comdat any

$_ZN6thrust6mallocINS_4pairIssEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_4pairIssEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIssEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIssEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE3getERSB_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv = comdat any

$_ZNK6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIssEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv = comdat any

$_ZNK6thrust9referenceIKNS_4pairIssEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_ = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv = comdat any

$_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIssEEEEE3getES6_ = comdat any

$_ZNK6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENT_9referenceERKSA_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIssEEEEEENT_9referenceERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceIKNS_4pairIssEEEC2ERKNS_10device_ptrIS3_EE = comdat any

$_ZN6thrust9referenceIKNS_4pairIssEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_ = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm = comdat any

$_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_ = comdat any

$_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_ = comdat any

$_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_ = comdat any

$_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_ = comdat any

$_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_ = comdat any

$_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_ = comdat any

$_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEC2ERKS5_ = comdat any

$_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_ = comdat any

$_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_ = comdat any

$_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIssEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_ = comdat any

$_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_ = comdat any

$_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEENS0_12unary_negateIT_EERKS9_ = comdat any

$_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIssEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEEbEC2ERKS9_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE = comdat any

$_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_ = comdat any

$_ZN6thrust18raw_reference_castIRKNS_4pairIssEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_ = comdat any

$_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_ = comdat any

$_ZNK6thrust6detail8equal_toINS_4pairIssEEEclIS3_EEbRKS3_RKT_ = comdat any

$_ZN6thrust3getILi0ERKNS_4pairIssEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_ = comdat any

$_ZN6thrust3getILi1ERKNS_4pairIssEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_ = comdat any

$_ZN6thrusteqIssEEbRKNS_4pairIT_T0_EES6_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIssEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIssEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIssEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIssEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_ = comdat any

$_ZN6thrust6detail20raw_reference_casterclINS_4pairIssEEEENS0_13raw_referenceIKT_E4typeERS7_ = comdat any

$_ZN6thrust3getILi0ERKNS_4pairIssEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIssEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_ = comdat any

$_ZN6thrust3getILi1ERKNS_4pairIssEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust5tupleIRKNS_4pairIssEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_ = comdat any

$_ZN6thrust18raw_reference_castINS_4pairIssEEEENS_6detail13raw_referenceIKT_E4typeERS6_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIssEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE = comdat any

$_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIssEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIssEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIssEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail4consIRKNS_4pairIssEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_ = comdat any

$_ZN6thrust5tupleIRKNS_4pairIssEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consIRKNS_4pairIssEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_9referenceINS_4pairIssEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_ = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEEvRT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv = comdat any

$_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEC2ERKS7_ = comdat any

$_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIssEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIssEEEEvRT_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE = comdat any

$_ZN6thrust10device_ptrIKNS_4pairIssEEEC2IS2_EERKNS0_IT_EE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_ = comdat any

$_ZN6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeISaINS_4pairIssEEEPS3_lEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIssEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIssEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIssEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIssEEEEvRT_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIssEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIssEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEEEvRT_NS8_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl = comdat any

$_ZN17TestPairScanByKeyIiEclEm = comdat any

$_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyS2_Lj3EEclImEEvT_ = comdat any

$_ZN8unittest15random_integersIiEEN6thrust11host_vectorIT_SaIS3_EEEm = comdat any

$_ZN6thrust11host_vectorINS_4pairIiiEESaIS2_EEC2Em = comdat any

$_ZN6thrust9transformINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_ = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEE3endEv = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv = comdat any

$_ZN6thrust13device_vectorIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS_11host_vectorIT_T0_EE = comdat any

$_ZN6thrust13device_vectorINS_4pairIiiEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE = comdat any

$_ZN6thrust11host_vectorIiSaIiEEC2IbSaIbEEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPiEENS2_IPNS_4pairIiiEEEES8_S6_NS_8equal_toIiEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_ = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIiEEEENS2_INS3_INS_4pairIiiEEEEEES9_S7_NS_8equal_toIiEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_ = comdat any

$_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE3endEv = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIiiEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi = comdat any

$_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EED2Ev = comdat any

$_ZN6thrust11host_vectorIiSaIiEEC2Em = comdat any

$_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET0_T_SC_SB_T1_ = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEEC2Em = comdat any

$_ZNSaIiEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEEC2ERKS2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIiED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEE12default_initEm = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorIiEC2Ev = comdat any

$_ZNSaIiEC2ERKS_ = comdat any

$_ZN6thrust6detail15normal_iteratorIPiEC2ES2_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIiEC2ERKS1_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_ = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEE19default_construct_nENS0_15normal_iteratorIPiEEm = comdat any

$_ZNK6thrust6detail11vector_baseIiSaIiEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIiEE8allocateERS2_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIiEE8allocateERS2_mEN19workaround_warnings8allocateES4_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv = comdat any

$_ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEv = comdat any

$_ZN6thrust6detail23default_construct_rangeISaIiEPimEEvRT_T0_T1_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIiEPimEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_ = comdat any

$_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPimiEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6detail16allocator_systemISaIiEE3getERS2_ = comdat any

$_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPimiEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_ = comdat any

$_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES8_T1_RKT2_ = comdat any

$_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPimNS_6detail12fill_functorIiEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_ = comdat any

$_ZN6thrust6detail12fill_functorIiEC2ERKi = comdat any

$_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPimNS_6detail12fill_functorIiEEEET0_RNS_16execution_policyIT_EESB_T1_T2_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPimNS_6detail21host_generate_functorINS6_12fill_functorIiEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIiEEEC2ES3_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPimNS_6detail21host_generate_functorINS8_12fill_functorIiEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIiEEEEvEC2ERKS5_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIiEEEEvEclIiEEvRT_ = comdat any

$_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIiEEEclIiEEvRKT_ = comdat any

$_ZN6thrust18raw_reference_castIiEENS_6detail13raw_referenceIT_E4typeERS3_ = comdat any

$_ZNK6thrust6detail12fill_functorIiEclEv = comdat any

$_ZN6thrust16raw_pointer_castIPiEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPiE3getES2_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemISaIiEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_ = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIiSaIiEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIiEE10deallocateERS2_Pim = comdat any

$_ZZN6thrust6detail16allocator_traitsISaIiEE10deallocateERS2_PimEN19workaround_warnings10deallocateES4_S5_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPim = comdat any

$_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_ = comdat any

$_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPiEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_ = comdat any

$_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIiLb0EEEEC2ES4_ = comdat any

$_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPiEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEvEC2ERKS6_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRiNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPiEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIiLb0EEEEclINS0_28tuple_of_iterator_referencesImRiNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_ = comdat any

$_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_ = comdat any

$_ZNK8unittest14random_integerIiLb0EEclEj = comdat any

$_ZN6thrust3getILi0EmNS_6detail4consIRiNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN6thrust3getILi1EmNS_6detail4consIRiNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_ = comdat any

$_ZN6thrust6random24uniform_int_distributionIiEC2Eii = comdat any

$_ZN6thrust6random24uniform_int_distributionIiEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEiRT_ = comdat any

$_ZN6thrust6random24uniform_int_distributionIiEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEiRT_RKNS_4pairIiiEE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRiNS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRimNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesImRiNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPiEEEENS1_5applyIT_E4typeERKS7_ = comdat any

$_ZN6thrust5tupleImRiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPiEEEENT_9referenceERKS6_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consImNS1_IRiNS_9null_typeEEEEC2IKmiKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPiEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPiEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPiEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEEC2ERKSA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_ = comdat any

$_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_ = comdat any

$_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPiEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEC2Em = comdat any

$_ZNSaIN6thrust4pairIiiEEEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EEC2ERKS4_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE12default_initEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEEC2Ev = comdat any

$_ZNSaIN6thrust4pairIiiEEEC2ERKS2_ = comdat any

$_ZN6thrust6detail15normal_iteratorIPNS_4pairIiiEEEC2ES4_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEEC2ERKS4_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE8allocateERS4_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE8allocateEmPKv = comdat any

$_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE8max_sizeEv = comdat any

$_ZN6thrust6detail23default_construct_rangeISaINS_4pairIiiEEEPS3_mEEvRT_T0_T1_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIiiEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIiiEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemISaINS_4pairIiiEEEE3getERS4_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEC2ERS5_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIiiEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEEvEC2ERKS7_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEEvEclIS5_EEvRT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEclIS4_EEvRT_ = comdat any

$_ZN6thrust18raw_reference_castINS_4pairIiiEEEENS_6detail13raw_referenceIT_E4typeERS5_ = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE9constructIS3_EEvRS4_PT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIiiEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_ = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE9constructIS3_JEEEvPT_DpOT0_ = comdat any

$_ZN6thrust4pairIiiEC2Ev = comdat any

$_ZN6thrust16raw_pointer_castIPNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPNS_4pairIiiEEE3getES4_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIiiEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE10deallocateERS4_PS3_m = comdat any

$_ZZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m = comdat any

$_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE10deallocateEPS3_m = comdat any

$_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPiEES8_NS6_IPNS_4pairIiiEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPiEESA_NS8_IPNS_4pairIiiEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEESA_NS8_IPNS_4pairIiiEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEESC_NSA_IPNS_4pairIiiEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRiS8_RNS_4pairIiiEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE = comdat any

$_ZN6thrusteqINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPiEES5_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRiS6_RNS_4pairIiiEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_ = comdat any

$_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_ = comdat any

$_ZN6thrust3getILi2ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN17make_pair_functorclIiiEEN6thrust4pairIT_T0_EERKS3_RKS4_ = comdat any

$_ZN6thrust3getILi0ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN6thrust3getILi1ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIiiEERiNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIiiEERiNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIiiEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS0_4consIS4_NS5_IRNS_4pairIiiEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRiS4_NS0_4consIS4_NS5_IRNS_4pairIiiEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS0_4consIRNS_4pairIiiEENS_9null_typeEEEEET_RNS5_IT0_T1_EE = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRiS2_RNS_4pairIiiEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_ = comdat any

$_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIiiEEEEEENS1_5applyIT_E4typeERKS9_ = comdat any

$_ZN6thrust5tupleIRiS1_RNS_4pairIiiEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consINS4_IPNS_4pairIiiEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEENT_9referenceERKS8_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consIRiNS1_IS2_NS1_IRNS_4pairIiiEENS_9null_typeEEEEEEC2IiiS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRiNS1_IRNS_4pairIiiEENS_9null_typeEEEEC2IiS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIRNS_4pairIiiEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPiEENS3_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIiiEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEENS4_IPiEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEENS4_IPiEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPiEEEEvRT_NS6_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE5beginEv = comdat any

$_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust23device_malloc_allocatorIiEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEEC2ERKS3_ = comdat any

$_ZN6thrust23device_malloc_allocatorIiED2Ev = comdat any

$_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE10range_initINS0_15normal_iteratorIPKiEEEEvT_SA_ = comdat any

$_ZNK6thrust6detail11vector_baseIiSaIiEE5beginEv = comdat any

$_ZNK6thrust6detail11vector_baseIiSaIiEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEED2Ev = comdat any

$_ZN6thrust23device_malloc_allocatorIiEC2ERKS1_ = comdat any

$_ZN6thrust10device_ptrIiEC2IiEEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEC2ES3_ = comdat any

$_ZN6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEEC2IiEEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEC2ERKS3_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_ = comdat any

$_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE10range_initINS0_15normal_iteratorIPKiEEEEvT_SA_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_ = comdat any

$_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE17allocate_and_copyINS0_15normal_iteratorIPKiEEEEvmT_SA_RNS0_18contiguous_storageIiS3_EE = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_iS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKiEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKiEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv = comdat any

$_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE10deallocateEv = comdat any

$_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE18uninitialized_copyINS0_15normal_iteratorIPKiEEEENS6_INS_10device_ptrIiEEEET_SD_SC_ = comdat any

$_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE7destroyENS0_15normal_iteratorINS_10device_ptrIiEEEES8_ = comdat any

$_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE10deallocateERS3_NS_10device_ptrIiEEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE10deallocateERS3_NS_10device_ptrIiEEmEN19workaround_warnings10deallocateES5_S7_m = comdat any

$_ZN6thrust23device_malloc_allocatorIiE10deallocateENS_10device_ptrIiEEm = comdat any

$_ZN6thrust10device_ptrIvEC2IiEERKNS0_IT_EE = comdat any

$_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IiEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrIiEEE3getES3_ = comdat any

$_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEE3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE4baseEv = comdat any

$_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8max_sizeERKS3_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIiEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8allocateERS3_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m = comdat any

$_ZN6thrust23device_malloc_allocatorIiE8allocateEmNS_10device_ptrIKiEE = comdat any

$_ZN6thrust10device_ptrIKiEC2IiEEPT_ = comdat any

$_ZNK6thrust23device_malloc_allocatorIiE8max_sizeEv = comdat any

$_ZN6thrust13device_mallocIiEENS_10device_ptrIT_EEm = comdat any

$_ZN6thrust6mallocIiNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm = comdat any

$_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_ = comdat any

$_ZN6thrust6system6detail7generic6mallocIiNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm = comdat any

$_ZN6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IiEEPT_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPiiS5_NS_27random_access_traversal_tagENS_9referenceIiS7_S6_EElEC2ERKS8_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPiiS5_NS_27random_access_traversal_tagENS_9referenceIiS7_S6_EElE4baseEv = comdat any

$_ZN6thrust7pointerIKiNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IiEEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKiEEPS2_iNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIiEENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIiEENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_ = comdat any

$_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIiEEE3getERS3_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEElNS_10device_ptrIiEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrIiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEdeEv = comdat any

$_ZNK6thrust9referenceIiNS_10device_ptrIiEENS_16device_referenceIiEEEadEv = comdat any

$_ZN6thrust16raw_pointer_castIPKiEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIiEEEENT_9referenceERKS4_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv = comdat any

$_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceIiEC2ERKNS_10device_ptrIiEE = comdat any

$_ZN6thrust9referenceIiNS_10device_ptrIiEENS_16device_referenceIiEEEC2ERKS2_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKiE3getES3_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKiEEEENT_9referenceERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIiEEEEvRT_NS4_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIiEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl = comdat any

$_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIiEENS_10device_ptrIiEElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS5_iS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIiEENS_10device_ptrIiEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS2_iS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIiEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIiEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE11distance_toIS2_S3_iS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust6detail18contiguous_storageIiSaIiEE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorIPKiEC2IPiEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_ = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKiEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEEC2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_ = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEED2Ev = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_ = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEEC2ERKS3_ = comdat any

$_ZN6thrust10device_ptrINS_4pairIiiEEEC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEC2ES5_ = comdat any

$_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10deallocateEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8allocateEm = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_ = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEE10deallocateENS_10device_ptrIS2_EEm = comdat any

$_ZN6thrust10device_ptrIvEC2INS_4pairIiiEEEERKNS0_IT_EE = comdat any

$_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIiiEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIiiEEEEE3getES5_ = comdat any

$_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8max_sizeERKS5_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIiiEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8allocateERS5_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m = comdat any

$_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEE8allocateEmNS_10device_ptrIKS2_EE = comdat any

$_ZN6thrust10device_ptrIKNS_4pairIiiEEEC2IS2_EEPT_ = comdat any

$_ZNK6thrust23device_malloc_allocatorINS_4pairIiiEEE8max_sizeEv = comdat any

$_ZN6thrust13device_mallocINS_4pairIiiEEEENS_10device_ptrIT_EEm = comdat any

$_ZN6thrust6mallocINS_4pairIiiEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm = comdat any

$_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_4pairIiiEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm = comdat any

$_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv = comdat any

$_ZN6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIiiEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIiiEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_ = comdat any

$_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIiiEEEEE3getERS5_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIiiEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv = comdat any

$_ZNK6thrust9referenceINS_4pairIiiEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv = comdat any

$_ZN6thrust16raw_pointer_castIPKNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIiiEEEEEENT_9referenceERKS6_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceINS_4pairIiiEEEC2ERKNS_10device_ptrIS2_EE = comdat any

$_ZN6thrust9referenceINS_4pairIiiEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_ = comdat any

$_ZN6thrust6detail14pointer_traitsIPKNS_4pairIiiEEE3getES5_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENT_9referenceERKS9_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIiiEEEEEEvRT_NS6_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIiiEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_NS9_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl = comdat any

$_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIiiEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIiiEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIiiEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIiiEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorIPKNS_4pairIiiEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_ = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEEvRT_NS9_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEEC2IbSaIbEEERKNS1_IT_T0_EE = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_ = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust6detail11vector_baseIiSaIiEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIiS2_EE = comdat any

$_ZNK6thrust6detail11vector_baseIiSaIiEE8capacityEv = comdat any

$_ZNK6thrust6detail11vector_baseIiSaIiEE8max_sizeEv = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPiEET_SB_SA_ = comdat any

$_ZN6thrust6detail18contiguous_storageIiSaIiEE7destroyENS0_15normal_iteratorIPiEES6_ = comdat any

$_ZNK6thrust6detail18contiguous_storageIiSaIiEE8max_sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsISaIiEE8max_sizeERKS2_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIiEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_ = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIiENS0_15normal_iteratorIPKbEEPiEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIiENS0_15normal_iteratorIPKbEEPiEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPiEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_ = comdat any

$_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPiEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_ = comdat any

$_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPiEET1_RNS2_16execution_policyIT_EET0_SI_SD_ = comdat any

$_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPiEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE = comdat any

$_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPiEET0_T_SB_SA_ = comdat any

$_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPiNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_ = comdat any

$_ZN6thrust6detail13destroy_rangeISaIiEPilEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIiEPilEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPiEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPiEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPiEENS6_IPNS_4pairIiiEEEESC_SA_NS_8equal_toIiEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_ = comdat any

$_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPiEENS8_IPNS_4pairIiiEEEESE_SC_NS_8equal_toIiEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_ = comdat any

$_ZN6thrustneINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN9add_pairsclIN6thrust4pairIiiEES3_EET_RKS4_RKT0_ = comdat any

$_ZNK6thrust8equal_toIiEclERKiS3_ = comdat any

$_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS6_INS7_INS_4pairIiiEEEEEESD_SB_NS_8equal_toIiEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_ = comdat any

$_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS8_INS9_INS_4pairIiiEEEEEESF_SD_NS_8equal_toIiEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_ = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE = comdat any

$_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIiEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEmiEl = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZN6thrust6detail4not2INS_8equal_toIiEEEENS0_13binary_negateIT_EERKS5_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm = comdat any

$_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm = comdat any

$_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_ = comdat any

$_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_ = comdat any

$_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEC2ES7_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system4cuda6detail3tagEED2Ev = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIiEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_ = comdat any

$_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEC2ES5_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_ = comdat any

$_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEC2ERKS7_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIiEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIiEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIiEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIiEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIiEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIiEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_ = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIiEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIiEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIiEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEmIEl = comdat any

$_ZN6thrust6detail13binary_negateINS_8equal_toIiEEEC2ERKS3_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEC2ERKS9_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev = comdat any

$_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIiiEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERKS8_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEC2ERKSA_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_4pairIiiEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIiiEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIiiEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_ = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_ = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm = comdat any

$_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_ = comdat any

$_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEES8_EC2ES6_S8_ = comdat any

$_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_ = comdat any

$_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_ = comdat any

$_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_ = comdat any

$_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESA_EEEC2ESB_ = comdat any

$_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_ = comdat any

$_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESB_EEEEvEC2ERKSD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEESG_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEESG_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEESH_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEESH_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_ = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIiiEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_ = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv = comdat any

$_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_ = comdat any

$_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_ = comdat any

$_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_ = comdat any

$_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_ = comdat any

$_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIiiEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZNK6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv = comdat any

$_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_ = comdat any

$_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_ = comdat any

$_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_ = comdat any

$_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev = comdat any

$_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev = comdat any

$_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_ = comdat any

$_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_ = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_ = comdat any

$_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_ = comdat any

$_ZNK6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv = comdat any

$_ZN6thrust6mallocINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE15is_stream_validEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE4execEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE6streamEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE12before_eventEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_ = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EE4sizeEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EE9heap_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE4makeEiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEC2EiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEC2EiSA_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEE4makeEiiS8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EEC2EiS6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm128EEC2ES6_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EEC2ES8_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3conILm128ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm = comdat any

$_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEENS3_14parallel_groupIT_Lm0EEESA_m = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_ = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEESD_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEESD_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIiiEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIiiEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_ = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_ = comdat any

$_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE3getERSB_ = comdat any

$_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv = comdat any

$_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv = comdat any

$_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_ = comdat any

$_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl = comdat any

$_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_ = comdat any

$_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_ = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_ = comdat any

$_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE4sizeEv = comdat any

$_ZN6thrusteqINS_4pairIiiEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE = comdat any

$_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIiiEESaIS4_EEEEESsv = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv = comdat any

$_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIiiEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_ = comdat any

$_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIiiEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE = comdat any

$_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_ = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_ = comdat any

$_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_ = comdat any

$_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEE5beginEv = comdat any

$_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system3cpp6detail3tagEED2Ev = comdat any

$_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_ = comdat any

$_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEC2ES7_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEEvRT_NSA_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIiiEEEEEEvRT_NS7_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl = comdat any

$_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEC2ERKS9_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_ = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm = comdat any

$_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev = comdat any

$_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEC2ERKS8_ = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEC2ERKSA_ = comdat any

$_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_ = comdat any

$_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_ = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE8allocateEm = comdat any

$_ZN6thrust20get_temporary_bufferINS_4pairIiiEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_ = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE6systemEv = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE = comdat any

$_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm = comdat any

$_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIiiEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_ = comdat any

$_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIiiEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_ = comdat any

$_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_ = comdat any

$_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl = comdat any

$_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_ = comdat any

$_ZNK6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv = comdat any

$_ZN6thrust6mallocINS_4pairIiiEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm = comdat any

$_ZN6thrust9make_pairINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_ = comdat any

$_ZN6thrust6system6detail7generic6mallocINS_4pairIiiEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm = comdat any

$_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_ = comdat any

$_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_ = comdat any

$_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_ = comdat any

$_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIiiEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIiiEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv = comdat any

$_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv = comdat any

$_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_ = comdat any

$_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_ = comdat any

$_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE3getERSB_ = comdat any

$_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_ = comdat any

$_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_ = comdat any

$_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE = comdat any

$_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_ = comdat any

$_ZN6thrustplINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv = comdat any

$_ZNK6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv = comdat any

$_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIiiEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv = comdat any

$_ZNK6thrust9referenceIKNS_4pairIiiEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_ = comdat any

$_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv = comdat any

$_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_ = comdat any

$_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIiiEEEEE3getES6_ = comdat any

$_ZNK6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENT_9referenceERKSA_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIiiEEEEEENT_9referenceERKS7_ = comdat any

$_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv = comdat any

$_ZNK6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv = comdat any

$_ZN6thrust16device_referenceIKNS_4pairIiiEEEC2ERKNS_10device_ptrIS3_EE = comdat any

$_ZN6thrust9referenceIKNS_4pairIiiEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_ = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl = comdat any

$_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv = comdat any

$_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm = comdat any

$_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m = comdat any

$_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm = comdat any

$_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_ = comdat any

$_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_ = comdat any

$_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_ = comdat any

$_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_ = comdat any

$_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_ = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_ = comdat any

$_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_ = comdat any

$_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_ = comdat any

$_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_ = comdat any

$_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEC2ERKS5_ = comdat any

$_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_ = comdat any

$_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv = comdat any

$_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_ = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_ = comdat any

$_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIiiEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_ = comdat any

$_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_ = comdat any

$_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEENS0_12unary_negateIT_EERKS9_ = comdat any

$_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIiiEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_ = comdat any

$_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEEbEC2ERKS9_ = comdat any

$_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_ = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE = comdat any

$_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_ = comdat any

$_ZN6thrust18raw_reference_castIRKNS_4pairIiiEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_ = comdat any

$_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_ = comdat any

$_ZNK6thrust6detail8equal_toINS_4pairIiiEEEclIS3_EEbRKS3_RKT_ = comdat any

$_ZN6thrust3getILi0ERKNS_4pairIiiEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_ = comdat any

$_ZN6thrust3getILi1ERKNS_4pairIiiEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_ = comdat any

$_ZN6thrusteqIiiEEbRKNS_4pairIT_T0_EES6_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIiiEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIiiEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIiiEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIiiEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_ = comdat any

$_ZN6thrust6detail20raw_reference_casterclINS_4pairIiiEEEENS0_13raw_referenceIKT_E4typeERS7_ = comdat any

$_ZN6thrust3getILi0ERKNS_4pairIiiEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIiiEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_ = comdat any

$_ZN6thrust3getILi1ERKNS_4pairIiiEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_ = comdat any

$_ZN6thrust5tupleIRKNS_4pairIiiEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_ = comdat any

$_ZN6thrust18raw_reference_castINS_4pairIiiEEEENS_6detail13raw_referenceIKT_E4typeERS6_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIiiEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE = comdat any

$_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIiiEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_ = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIiiEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIiiEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail4consIRKNS_4pairIiiEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_ = comdat any

$_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv = comdat any

$_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_ = comdat any

$_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE = comdat any

$_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_ = comdat any

$_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_ = comdat any

$_ZN6thrust5tupleIRKNS_4pairIiiEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv = comdat any

$_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_ = comdat any

$_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv = comdat any

$_ZN6thrust6detail4consIRKNS_4pairIiiEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_ = comdat any

$_ZN6thrust6detail4consINS_9referenceINS_4pairIiiEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_ = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv = comdat any

$_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_ = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv = comdat any

$_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_ = comdat any

$_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEEvRT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv = comdat any

$_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_ = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv = comdat any

$_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_ = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv = comdat any

$_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv = comdat any

$_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_ = comdat any

$_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv = comdat any

$_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEC2ERKS7_ = comdat any

$_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_ = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE = comdat any

$_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_ = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIiiEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIiiEEEEvRT_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustmiINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl = comdat any

$_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv = comdat any

$_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE = comdat any

$_ZN6thrust10device_ptrIKNS_4pairIiiEEEC2IS2_EERKNS0_IT_EE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_ = comdat any

$_ZN6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE3endEv = comdat any

$_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_ = comdat any

$_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE3endEv = comdat any

$_ZN6thrust6detail13destroy_rangeISaINS_4pairIiiEEEPS3_lEEvRT_T0_T1_ = comdat any

$_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_ = comdat any

$_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIiiEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_ = comdat any

$_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIiiEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_ = comdat any

$_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIiiEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_ = comdat any

$_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIiiEEEEvRT_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIiiEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_ = comdat any

$_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIiiEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE = comdat any

$_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE = comdat any

$_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_ = comdat any

$_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE = comdat any

$_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl = comdat any

$_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEEvRT_NS8_15difference_typeE = comdat any

$_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl = comdat any

$_ZSt8_DestroyIPmmEvT_S1_RSaIT0_E = comdat any

$_ZNSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv = comdat any

$_ZNSt12_Vector_baseImSaImEED2Ev = comdat any

$_ZSt8_DestroyIPmEvT_S1_ = comdat any

$_ZNSt12_Destroy_auxILb1EE9__destroyIPmEEvT_S3_ = comdat any

$_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm = comdat any

$_ZN9__gnu_cxx13new_allocatorImED2Ev = comdat any

$_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm = comdat any

$_ZTV8UnitTest = comdat any

$_ZTS8UnitTest = comdat any

$_ZTI8UnitTest = comdat any

$_ZTV16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE = comdat any

$_ZTS16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE = comdat any

$_ZTI16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE = comdat any

$_ZTS17TestPairScanByKeyIiE = comdat any

$_ZTI17TestPairScanByKeyIiE = comdat any

$_ZTSN6thrust6system12system_errorE = comdat any

$_ZTIN6thrust6system12system_errorE = comdat any

$_ZZN6thrust6system13cuda_categoryEvE6result = comdat any

$_ZGVZN6thrust6system13cuda_categoryEvE6result = comdat any

$_ZTVN6thrust6system4cuda6detail19cuda_error_categoryE = comdat any

$_ZTSN6thrust6system4cuda6detail19cuda_error_categoryE = comdat any

$_ZTSN6thrust6system14error_categoryE = comdat any

$_ZTIN6thrust6system14error_categoryE = comdat any

$_ZTIN6thrust6system4cuda6detail19cuda_error_categoryE = comdat any

$_ZTVN6thrust6system14error_categoryE = comdat any

$_ZZN6thrust6system15system_categoryEvE6result = comdat any

$_ZGVZN6thrust6system15system_categoryEvE6result = comdat any

$_ZTVN6thrust6system6detail21system_error_categoryE = comdat any

$_ZTSN6thrust6system6detail21system_error_categoryE = comdat any

$_ZTIN6thrust6system6detail21system_error_categoryE = comdat any

$_ZZN6thrust6system16generic_categoryEvE6result = comdat any

$_ZGVZN6thrust6system16generic_categoryEvE6result = comdat any

$_ZTVN6thrust6system6detail22generic_error_categoryE = comdat any

$_ZTSN6thrust6system6detail22generic_error_categoryE = comdat any

$_ZTIN6thrust6system6detail22generic_error_categoryE = comdat any

$_ZZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err = comdat any

$_ZGVZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err = comdat any

$_ZZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err = comdat any

$_ZGVZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err = comdat any

$_ZTVN6thrust6system12system_errorE = comdat any

$_ZTSN6thrust6system6detail9bad_allocE = comdat any

$_ZTIN6thrust6system6detail9bad_allocE = comdat any

$_ZTVN6thrust6system6detail9bad_allocE = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE15max_num_devices = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE16properties_exist = comdat any

$_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE17device_properties = comdat any

$_ZTSN8unittest15UnitTestFailureE = comdat any

$_ZTSN8unittest17UnitTestExceptionE = comdat any

$_ZTIN8unittest17UnitTestExceptionE = comdat any

$_ZTIN8unittest15UnitTestFailureE = comdat any

$_ZTSN6thrust11host_vectorINS_4pairIaaEESaIS2_EEE = comdat any

$_ZTSN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE = comdat any

$_ZTIN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE = comdat any

$_ZTIN6thrust11host_vectorINS_4pairIaaEESaIS2_EEE = comdat any

$_ZTSN6thrust11host_vectorINS_4pairIssEESaIS2_EEE = comdat any

$_ZTSN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE = comdat any

$_ZTIN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE = comdat any

$_ZTIN6thrust11host_vectorINS_4pairIssEESaIS2_EEE = comdat any

$_ZTSN6thrust11host_vectorINS_4pairIiiEESaIS2_EEE = comdat any

$_ZTSN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE = comdat any

$_ZTIN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE = comdat any

$_ZTIN6thrust11host_vectorINS_4pairIiiEESaIS2_EEE = comdat any

@_ZN6thrust6system6detail10sequentialL3seqE = internal global %"struct.thrust::system::detail::sequential::tag" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_1E = internal global %"struct.thrust::detail::functional::actor" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_2E = internal global %"struct.thrust::detail::functional::actor.0" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_3E = internal global %"struct.thrust::detail::functional::actor.3" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_4E = internal global %"struct.thrust::detail::functional::actor.6" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_5E = internal global %"struct.thrust::detail::functional::actor.9" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_6E = internal global %"struct.thrust::detail::functional::actor.12" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_7E = internal global %"struct.thrust::detail::functional::actor.15" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_8E = internal global %"struct.thrust::detail::functional::actor.18" zeroinitializer, align 1
@_ZN6thrust12placeholdersL2_9E = internal global %"struct.thrust::detail::functional::actor.21" zeroinitializer, align 1
@_ZN6thrust12placeholdersL3_10E = internal global %"struct.thrust::detail::functional::actor.24" zeroinitializer, align 1
@_ZStL8__ioinit = internal global %"class.std::ios_base::Init" zeroinitializer, align 1
@__dso_handle = external global i8
@_ZN6thrust6system4cuda6detail5bulk_L4rootE = internal global %"struct.thrust::system::cuda::detail::bulk_::detail::cursor" zeroinitializer, align 1
@_ZN6thrustL3seqE = internal global %"struct.thrust::detail::seq_t" zeroinitializer, align 1
@_ZN6thrust6system3cppL3parE = internal global %"struct.thrust::system::cpp::detail::par_t" zeroinitializer, align 1
@_ZN6thrust6system4cudaL3parE = internal global %"struct.thrust::system::cuda::detail::par_t" zeroinitializer, align 1
@_ZN6thrustL4hostE = internal global %"struct.thrust::system::cpp::detail::par_t" zeroinitializer, align 1
@_ZN6thrustL6deviceE = internal global %"struct.thrust::system::cuda::detail::par_t" zeroinitializer, align 1
@TestPairScanByKeyInstance = global %class.VariableUnitTest zeroinitializer, align 8
@_ZTV8UnitTest = linkonce_odr unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8* }* @_ZTI8UnitTest to i8*), i8* bitcast (void (%class.UnitTest*)* @_ZN8UnitTestD2Ev to i8*), i8* bitcast (void (%class.UnitTest*)* @_ZN8UnitTestD0Ev to i8*), i8* bitcast (void (%class.UnitTest*)* @_ZN8UnitTest3runEv to i8*)], comdat, align 8
@_ZTVN10__cxxabiv117__class_type_infoE = external global i8*
@_ZTS8UnitTest = linkonce_odr constant [10 x i8] c"8UnitTest\00", comdat
@_ZTI8UnitTest = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @_ZTS8UnitTest, i32 0, i32 0) }, comdat
@_ZNSs4_Rep20_S_empty_rep_storageE = external global [0 x i64], align 8
@_ZZL18__gthread_active_pvE20__gthread_active_ptr = internal constant i8* bitcast (i32 (i32*, void (i8*)*)* @__pthread_key_create to i8*), align 8
@_ZTV16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE = linkonce_odr unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE to i8*), i8* bitcast (void (%class.UnitTest*)* @_ZN8UnitTestD2Ev to i8*), i8* bitcast (void (%class.VariableUnitTest*)* @_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEED0Ev to i8*), i8* bitcast (void (%class.VariableUnitTest*)* @_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE3runEv to i8*)], comdat, align 8
@_ZTVN10__cxxabiv120__si_class_type_infoE = external global i8*
@_ZTS16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE = linkonce_odr constant [129 x i8] c"16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE\00", comdat
@_ZTI16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([129 x i8], [129 x i8]* @_ZTS16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTI8UnitTest to i8*) }, comdat
@.str = private unnamed_addr constant [8 x i8] c"struct \00", align 1
@.str.19 = private unnamed_addr constant [7 x i8] c"class \00", align 1
@.str.20 = private unnamed_addr constant [2 x i8] c"<\00", align 1
@.str.21 = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
@_ZTS17TestPairScanByKeyIiE = linkonce_odr constant [23 x i8] c"17TestPairScanByKeyIiE\00", comdat
@_ZTI17TestPairScanByKeyIiE = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([23 x i8], [23 x i8]* @_ZTS17TestPairScanByKeyIiE, i32 0, i32 0) }, comdat
@.str.22 = private unnamed_addr constant [28 x i8] c"testing/pair_scan_by_key.cu\00", align 1
@.str.23 = private unnamed_addr constant [31 x i8] c"assignment exceeds max_size().\00", align 1
@_ZTISt12length_error = external constant i8*
@.str.24 = private unnamed_addr constant [17 x i8] c"cudaFree in free\00", align 1
@_ZTSN6thrust6system12system_errorE = linkonce_odr constant [31 x i8] c"N6thrust6system12system_errorE\00", comdat
@_ZTISt13runtime_error = external constant i8*
@_ZTIN6thrust6system12system_errorE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @_ZTSN6thrust6system12system_errorE, i32 0, i32 0), i8* bitcast (i8** @_ZTISt13runtime_error to i8*) }, comdat
@_ZZN6thrust6system13cuda_categoryEvE6result = linkonce_odr global %"class.thrust::system::cuda::detail::cuda_error_category" zeroinitializer, comdat, align 8
@_ZGVZN6thrust6system13cuda_categoryEvE6result = linkonce_odr global i64 0, comdat, align 8
@_ZTVN6thrust6system4cuda6detail19cuda_error_categoryE = linkonce_odr unnamed_addr constant [9 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system4cuda6detail19cuda_error_categoryE to i8*), i8* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to i8*), i8* bitcast (void (%"class.thrust::system::cuda::detail::cuda_error_category"*)* @_ZN6thrust6system4cuda6detail19cuda_error_categoryD0Ev to i8*), i8* bitcast (i8* (%"class.thrust::system::cuda::detail::cuda_error_category"*)* @_ZNK6thrust6system4cuda6detail19cuda_error_category4nameEv to i8*), i8* bitcast ({ i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::cuda::detail::cuda_error_category"*, i32)* @_ZNK6thrust6system4cuda6detail19cuda_error_category23default_error_conditionEi to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, i32, %"class.thrust::system::error_condition"*)* @_ZNK6thrust6system14error_category10equivalentEiRKNS0_15error_conditionE to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, %"class.thrust::system::error_code"*, i32)* @_ZNK6thrust6system14error_category10equivalentERKNS0_10error_codeEi to i8*), i8* bitcast (void (%"class.std::basic_string"*, %"class.thrust::system::cuda::detail::cuda_error_category"*, i32)* @_ZNK6thrust6system4cuda6detail19cuda_error_category7messageEi to i8*)], comdat, align 8
@_ZTSN6thrust6system4cuda6detail19cuda_error_categoryE = linkonce_odr constant [50 x i8] c"N6thrust6system4cuda6detail19cuda_error_categoryE\00", comdat
@_ZTSN6thrust6system14error_categoryE = linkonce_odr constant [33 x i8] c"N6thrust6system14error_categoryE\00", comdat
@_ZTIN6thrust6system14error_categoryE = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @_ZTSN6thrust6system14error_categoryE, i32 0, i32 0) }, comdat
@_ZTIN6thrust6system4cuda6detail19cuda_error_categoryE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @_ZTSN6thrust6system4cuda6detail19cuda_error_categoryE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTIN6thrust6system14error_categoryE to i8*) }, comdat
@_ZTVN6thrust6system14error_categoryE = linkonce_odr unnamed_addr constant [9 x i8*] [i8* null, i8* bitcast ({ i8*, i8* }* @_ZTIN6thrust6system14error_categoryE to i8*), i8* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to i8*), i8* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD0Ev to i8*), i8* bitcast (void ()* @__cxa_pure_virtual to i8*), i8* bitcast ({ i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)* @_ZNK6thrust6system14error_category23default_error_conditionEi to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, i32, %"class.thrust::system::error_condition"*)* @_ZNK6thrust6system14error_category10equivalentEiRKNS0_15error_conditionE to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, %"class.thrust::system::error_code"*, i32)* @_ZNK6thrust6system14error_category10equivalentERKNS0_10error_codeEi to i8*), i8* bitcast (void ()* @__cxa_pure_virtual to i8*)], comdat, align 8
@.str.25 = private unnamed_addr constant [5 x i8] c"cuda\00", align 1
@_ZZN6thrust6system15system_categoryEvE6result = linkonce_odr global %"class.thrust::system::detail::system_error_category" zeroinitializer, comdat, align 8
@_ZGVZN6thrust6system15system_categoryEvE6result = linkonce_odr global i64 0, comdat, align 8
@_ZTVN6thrust6system6detail21system_error_categoryE = linkonce_odr unnamed_addr constant [9 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail21system_error_categoryE to i8*), i8* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to i8*), i8* bitcast (void (%"class.thrust::system::detail::system_error_category"*)* @_ZN6thrust6system6detail21system_error_categoryD0Ev to i8*), i8* bitcast (i8* (%"class.thrust::system::detail::system_error_category"*)* @_ZNK6thrust6system6detail21system_error_category4nameEv to i8*), i8* bitcast ({ i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::detail::system_error_category"*, i32)* @_ZNK6thrust6system6detail21system_error_category23default_error_conditionEi to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, i32, %"class.thrust::system::error_condition"*)* @_ZNK6thrust6system14error_category10equivalentEiRKNS0_15error_conditionE to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, %"class.thrust::system::error_code"*, i32)* @_ZNK6thrust6system14error_category10equivalentERKNS0_10error_codeEi to i8*), i8* bitcast (void (%"class.std::basic_string"*, %"class.thrust::system::detail::system_error_category"*, i32)* @_ZNK6thrust6system6detail21system_error_category7messageEi to i8*)], comdat, align 8
@_ZTSN6thrust6system6detail21system_error_categoryE = linkonce_odr constant [47 x i8] c"N6thrust6system6detail21system_error_categoryE\00", comdat
@_ZTIN6thrust6system6detail21system_error_categoryE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([47 x i8], [47 x i8]* @_ZTSN6thrust6system6detail21system_error_categoryE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTIN6thrust6system14error_categoryE to i8*) }, comdat
@.str.26 = private unnamed_addr constant [7 x i8] c"system\00", align 1
@_ZZN6thrust6system16generic_categoryEvE6result = linkonce_odr global %"class.thrust::system::detail::generic_error_category" zeroinitializer, comdat, align 8
@_ZGVZN6thrust6system16generic_categoryEvE6result = linkonce_odr global i64 0, comdat, align 8
@_ZTVN6thrust6system6detail22generic_error_categoryE = linkonce_odr unnamed_addr constant [9 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail22generic_error_categoryE to i8*), i8* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to i8*), i8* bitcast (void (%"class.thrust::system::detail::generic_error_category"*)* @_ZN6thrust6system6detail22generic_error_categoryD0Ev to i8*), i8* bitcast (i8* (%"class.thrust::system::detail::generic_error_category"*)* @_ZNK6thrust6system6detail22generic_error_category4nameEv to i8*), i8* bitcast ({ i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)* @_ZNK6thrust6system14error_category23default_error_conditionEi to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, i32, %"class.thrust::system::error_condition"*)* @_ZNK6thrust6system14error_category10equivalentEiRKNS0_15error_conditionE to i8*), i8* bitcast (i1 (%"class.thrust::system::error_category"*, %"class.thrust::system::error_code"*, i32)* @_ZNK6thrust6system14error_category10equivalentERKNS0_10error_codeEi to i8*), i8* bitcast (void (%"class.std::basic_string"*, %"class.thrust::system::detail::generic_error_category"*, i32)* @_ZNK6thrust6system6detail22generic_error_category7messageEi to i8*)], comdat, align 8
@_ZTSN6thrust6system6detail22generic_error_categoryE = linkonce_odr constant [48 x i8] c"N6thrust6system6detail22generic_error_categoryE\00", comdat
@_ZTIN6thrust6system6detail22generic_error_categoryE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([48 x i8], [48 x i8]* @_ZTSN6thrust6system6detail22generic_error_categoryE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTIN6thrust6system14error_categoryE to i8*) }, comdat
@.str.27 = private unnamed_addr constant [8 x i8] c"generic\00", align 1
@_ZZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err = linkonce_odr global %"class.std::basic_string" zeroinitializer, comdat, align 8
@_ZGVZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err = linkonce_odr global i64 0, comdat, align 8
@.str.28 = private unnamed_addr constant [14 x i8] c"Unknown error\00", align 1
@_ZZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err = linkonce_odr global %"class.std::basic_string" zeroinitializer, comdat, align 8
@_ZGVZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err = linkonce_odr global i64 0, comdat, align 8
@_ZTVN6thrust6system12system_errorE = linkonce_odr unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system12system_errorE to i8*), i8* bitcast (void (%"class.thrust::system::system_error"*)* @_ZN6thrust6system12system_errorD2Ev to i8*), i8* bitcast (void (%"class.thrust::system::system_error"*)* @_ZN6thrust6system12system_errorD0Ev to i8*), i8* bitcast (i8* (%"class.thrust::system::system_error"*)* @_ZNK6thrust6system12system_error4whatEv to i8*)], comdat, align 8
@.str.29 = private unnamed_addr constant [3 x i8] c": \00", align 1
@_ZTISt9bad_alloc = external constant i8*
@_ZTVSt9bad_alloc = available_externally unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast (i8** @_ZTISt9bad_alloc to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD1Ev to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD0Ev to i8*), i8* bitcast (i8* (%"class.std::bad_alloc"*)* @_ZNKSt9bad_alloc4whatEv to i8*)], align 8
@_ZTVSt9exception = available_externally unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast (i8** @_ZTISt9exception to i8*), i8* bitcast (void (%"class.std::exception"*)* @_ZNSt9exceptionD1Ev to i8*), i8* bitcast (void (%"class.std::exception"*)* @_ZNSt9exceptionD0Ev to i8*), i8* bitcast (i8* (%"class.std::exception"*)* @_ZNKSt9exception4whatEv to i8*)], align 8
@_ZTISt9exception = external constant i8*
@_ZTSN6thrust6system6detail9bad_allocE = linkonce_odr constant [34 x i8] c"N6thrust6system6detail9bad_allocE\00", comdat
@_ZTIN6thrust6system6detail9bad_allocE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @_ZTSN6thrust6system6detail9bad_allocE, i32 0, i32 0), i8* bitcast (i8** @_ZTISt9bad_alloc to i8*) }, comdat
@_ZTVN6thrust6system6detail9bad_allocE = linkonce_odr unnamed_addr constant [5 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD0Ev to i8*), i8* bitcast (i8* (%"class.thrust::system::detail::bad_alloc"*)* @_ZNK6thrust6system6detail9bad_alloc4whatEv to i8*)], comdat, align 8
@.str.30 = private unnamed_addr constant [67 x i8] c"failed synchronize in thrust::system::cuda::detail::trivial_copy_n\00", align 1
@stderr = external global %struct._IO_FILE*, align 8
@.str.31 = private unnamed_addr constant [31 x i8] c" clang WAR failed. Terminate.\0A\00", align 1
@_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE15max_num_devices = linkonce_odr constant i32 16, comdat, align 4
@_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE16properties_exist = linkonce_odr global [16 x i8] zeroinitializer, comdat, align 16
@_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE17device_properties = linkonce_odr global [16 x %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"] zeroinitializer, comdat, align 16
@.str.32 = private unnamed_addr constant [47 x i8] c"cudaDeviceGetProperty in get_device_properties\00", align 1
@.str.33 = private unnamed_addr constant [38 x i8] c"current_device(): after cudaGetDevice\00", align 1
@.str.34 = private unnamed_addr constant [51 x i8] c"function_attributes(): after cudaFuncGetAttributes\00", align 1
@.str.35 = private unnamed_addr constant [39 x i8] c"cudaStreamWaitEvent in async_in_stream\00", align 1
@.str.36 = private unnamed_addr constant [21 x i8] c"bulk_kernel_by_value\00", align 1
@.str.37 = private unnamed_addr constant [54 x i8] c"after cudaLaunch in triple_chevron_launcher::launch()\00", align 1
@.str.38 = private unnamed_addr constant [40 x i8] c"cudaEventCreateWithFlags in future ctor\00", align 1
@.str.39 = private unnamed_addr constant [31 x i8] c"cudaEventRecord in future ctor\00", align 1
@.str.40 = private unnamed_addr constant [40 x i8] c"cudaStreamCreate in bulk::detail::async\00", align 1
@.str.41 = private unnamed_addr constant [43 x i8] c"cudaStreamWaitEvent in bulk::detail::async\00", align 1
@.str.42 = private unnamed_addr constant [53 x i8] c"CUDA error after cudaEventDestroy in future dtor: %s\00", align 1
@.str.43 = private unnamed_addr constant [54 x i8] c"CUDA error after cudaStreamDestroy in future dtor: %s\00", align 1
@.str.44 = private unnamed_addr constant [56 x i8] c"temporary_buffer::allocate: get_temporary_buffer failed\00", align 1
@.str.45 = private unnamed_addr constant [2 x i8] c"[\00", align 1
@.str.46 = private unnamed_addr constant [2 x i8] c":\00", align 1
@.str.47 = private unnamed_addr constant [3 x i8] c"] \00", align 1
@.str.48 = private unnamed_addr constant [22 x i8] c"values are not equal.\00", align 1
@.str.49 = private unnamed_addr constant [9 x i8] c" [type='\00", align 1
@.str.50 = private unnamed_addr constant [3 x i8] c"']\00", align 1
@_ZTSN8unittest15UnitTestFailureE = linkonce_odr constant [29 x i8] c"N8unittest15UnitTestFailureE\00", comdat
@_ZTSN8unittest17UnitTestExceptionE = linkonce_odr constant [31 x i8] c"N8unittest17UnitTestExceptionE\00", comdat
@_ZTIN8unittest17UnitTestExceptionE = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @_ZTSN8unittest17UnitTestExceptionE, i32 0, i32 0) }, comdat
@_ZTIN8unittest15UnitTestFailureE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @_ZTSN8unittest15UnitTestFailureE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTIN8unittest17UnitTestExceptionE to i8*) }, comdat
@_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE = external unnamed_addr constant [10 x i8*]
@_ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE = external unnamed_addr constant [4 x i8*]
@_ZTVSt9basic_iosIcSt11char_traitsIcEE = external unnamed_addr constant [4 x i8*]
@_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE = external unnamed_addr constant [16 x i8*]
@_ZTVSt15basic_streambufIcSt11char_traitsIcEE = external unnamed_addr constant [16 x i8*]
@.str.51 = private unnamed_addr constant [42 x i8] c"basic_string::_S_construct null not valid\00", align 1
@_ZNSs4_Rep11_S_terminalE = external constant i8, align 1
@_ZTSN6thrust11host_vectorINS_4pairIaaEESaIS2_EEE = linkonce_odr constant [45 x i8] c"N6thrust11host_vectorINS_4pairIaaEESaIS2_EEE\00", comdat
@_ZTSN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE = linkonce_odr constant [52 x i8] c"N6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE\00", comdat
@_ZTIN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([52 x i8], [52 x i8]* @_ZTSN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE, i32 0, i32 0) }, comdat
@_ZTIN6thrust11host_vectorINS_4pairIaaEESaIS2_EEE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @_ZTSN6thrust11host_vectorINS_4pairIaaEESaIS2_EEE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTIN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE to i8*) }, comdat
@_ZTSN6thrust11host_vectorINS_4pairIssEESaIS2_EEE = linkonce_odr constant [45 x i8] c"N6thrust11host_vectorINS_4pairIssEESaIS2_EEE\00", comdat
@_ZTSN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE = linkonce_odr constant [52 x i8] c"N6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE\00", comdat
@_ZTIN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([52 x i8], [52 x i8]* @_ZTSN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE, i32 0, i32 0) }, comdat
@_ZTIN6thrust11host_vectorINS_4pairIssEESaIS2_EEE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @_ZTSN6thrust11host_vectorINS_4pairIssEESaIS2_EEE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTIN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE to i8*) }, comdat
@_ZTSN6thrust11host_vectorINS_4pairIiiEESaIS2_EEE = linkonce_odr constant [45 x i8] c"N6thrust11host_vectorINS_4pairIiiEESaIS2_EEE\00", comdat
@_ZTSN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE = linkonce_odr constant [52 x i8] c"N6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE\00", comdat
@_ZTIN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([52 x i8], [52 x i8]* @_ZTSN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE, i32 0, i32 0) }, comdat
@_ZTIN6thrust11host_vectorINS_4pairIiiEESaIS2_EEE = linkonce_odr constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i64 2) to i8*), i8* getelementptr inbounds ([45 x i8], [45 x i8]* @_ZTSN6thrust11host_vectorINS_4pairIiiEESaIS2_EEE, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTIN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE to i8*) }, comdat
@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @_GLOBAL__sub_I_pair_scan_by_key.cui, i8* null }]

; Function Attrs: uwtable
define internal void @__cxx_global_var_init() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6system6detail10sequential3tagC2Ev(%"struct.thrust::system::detail::sequential::tag"* @_ZN6thrust6system6detail10sequentialL3seqE)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::system::detail::sequential::tag", %"struct.thrust::system::detail::sequential::tag"* @_ZN6thrust6system6detail10sequentialL3seqE, i32 0, i32 0))
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential3tagC2Ev(%"struct.thrust::system::detail::sequential::tag"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::detail::sequential::tag"*, align 8
  store %"struct.thrust::system::detail::sequential::tag"* %this, %"struct.thrust::system::detail::sequential::tag"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::detail::sequential::tag"*, %"struct.thrust::system::detail::sequential::tag"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::detail::sequential::tag"* %this1 to %"struct.thrust::system::detail::sequential::execution_policy"*
  ret void
}

; Function Attrs: argmemonly nounwind
declare {}* @llvm.invariant.start(i64, i8* nocapture) #2

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.1() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj0EEEEC2Ev(%"struct.thrust::detail::functional::actor"* @_ZN6thrust12placeholdersL2_1E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor", %"struct.thrust::detail::functional::actor"* @_ZN6thrust12placeholdersL2_1E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj0EEEEC2Ev(%"struct.thrust::detail::functional::actor"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor"*, align 8
  store %"struct.thrust::detail::functional::actor"* %this, %"struct.thrust::detail::functional::actor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor"*, %"struct.thrust::detail::functional::actor"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor"* %this1 to %"class.thrust::detail::functional::argument"*
  call void @_ZN6thrust6detail10functional8argumentILj0EEC2Ev(%"class.thrust::detail::functional::argument"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.2() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj1EEEEC2Ev(%"struct.thrust::detail::functional::actor.0"* @_ZN6thrust12placeholdersL2_2E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.0", %"struct.thrust::detail::functional::actor.0"* @_ZN6thrust12placeholdersL2_2E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj1EEEEC2Ev(%"struct.thrust::detail::functional::actor.0"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.0"*, align 8
  store %"struct.thrust::detail::functional::actor.0"* %this, %"struct.thrust::detail::functional::actor.0"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.0"*, %"struct.thrust::detail::functional::actor.0"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.0"* %this1 to %"class.thrust::detail::functional::argument.1"*
  call void @_ZN6thrust6detail10functional8argumentILj1EEC2Ev(%"class.thrust::detail::functional::argument.1"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.3() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj2EEEEC2Ev(%"struct.thrust::detail::functional::actor.3"* @_ZN6thrust12placeholdersL2_3E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.3", %"struct.thrust::detail::functional::actor.3"* @_ZN6thrust12placeholdersL2_3E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj2EEEEC2Ev(%"struct.thrust::detail::functional::actor.3"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.3"*, align 8
  store %"struct.thrust::detail::functional::actor.3"* %this, %"struct.thrust::detail::functional::actor.3"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.3"*, %"struct.thrust::detail::functional::actor.3"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.3"* %this1 to %"class.thrust::detail::functional::argument.4"*
  call void @_ZN6thrust6detail10functional8argumentILj2EEC2Ev(%"class.thrust::detail::functional::argument.4"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.4() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj3EEEEC2Ev(%"struct.thrust::detail::functional::actor.6"* @_ZN6thrust12placeholdersL2_4E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.6", %"struct.thrust::detail::functional::actor.6"* @_ZN6thrust12placeholdersL2_4E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj3EEEEC2Ev(%"struct.thrust::detail::functional::actor.6"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.6"*, align 8
  store %"struct.thrust::detail::functional::actor.6"* %this, %"struct.thrust::detail::functional::actor.6"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.6"*, %"struct.thrust::detail::functional::actor.6"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.6"* %this1 to %"class.thrust::detail::functional::argument.7"*
  call void @_ZN6thrust6detail10functional8argumentILj3EEC2Ev(%"class.thrust::detail::functional::argument.7"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.5() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj4EEEEC2Ev(%"struct.thrust::detail::functional::actor.9"* @_ZN6thrust12placeholdersL2_5E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.9", %"struct.thrust::detail::functional::actor.9"* @_ZN6thrust12placeholdersL2_5E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj4EEEEC2Ev(%"struct.thrust::detail::functional::actor.9"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.9"*, align 8
  store %"struct.thrust::detail::functional::actor.9"* %this, %"struct.thrust::detail::functional::actor.9"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.9"*, %"struct.thrust::detail::functional::actor.9"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.9"* %this1 to %"class.thrust::detail::functional::argument.10"*
  call void @_ZN6thrust6detail10functional8argumentILj4EEC2Ev(%"class.thrust::detail::functional::argument.10"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.6() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj5EEEEC2Ev(%"struct.thrust::detail::functional::actor.12"* @_ZN6thrust12placeholdersL2_6E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.12", %"struct.thrust::detail::functional::actor.12"* @_ZN6thrust12placeholdersL2_6E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj5EEEEC2Ev(%"struct.thrust::detail::functional::actor.12"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.12"*, align 8
  store %"struct.thrust::detail::functional::actor.12"* %this, %"struct.thrust::detail::functional::actor.12"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.12"*, %"struct.thrust::detail::functional::actor.12"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.12"* %this1 to %"class.thrust::detail::functional::argument.13"*
  call void @_ZN6thrust6detail10functional8argumentILj5EEC2Ev(%"class.thrust::detail::functional::argument.13"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.7() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj6EEEEC2Ev(%"struct.thrust::detail::functional::actor.15"* @_ZN6thrust12placeholdersL2_7E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.15", %"struct.thrust::detail::functional::actor.15"* @_ZN6thrust12placeholdersL2_7E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj6EEEEC2Ev(%"struct.thrust::detail::functional::actor.15"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.15"*, align 8
  store %"struct.thrust::detail::functional::actor.15"* %this, %"struct.thrust::detail::functional::actor.15"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.15"*, %"struct.thrust::detail::functional::actor.15"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.15"* %this1 to %"class.thrust::detail::functional::argument.16"*
  call void @_ZN6thrust6detail10functional8argumentILj6EEC2Ev(%"class.thrust::detail::functional::argument.16"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.8() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj7EEEEC2Ev(%"struct.thrust::detail::functional::actor.18"* @_ZN6thrust12placeholdersL2_8E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.18", %"struct.thrust::detail::functional::actor.18"* @_ZN6thrust12placeholdersL2_8E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj7EEEEC2Ev(%"struct.thrust::detail::functional::actor.18"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.18"*, align 8
  store %"struct.thrust::detail::functional::actor.18"* %this, %"struct.thrust::detail::functional::actor.18"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.18"*, %"struct.thrust::detail::functional::actor.18"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.18"* %this1 to %"class.thrust::detail::functional::argument.19"*
  call void @_ZN6thrust6detail10functional8argumentILj7EEC2Ev(%"class.thrust::detail::functional::argument.19"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.9() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj8EEEEC2Ev(%"struct.thrust::detail::functional::actor.21"* @_ZN6thrust12placeholdersL2_9E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.21", %"struct.thrust::detail::functional::actor.21"* @_ZN6thrust12placeholdersL2_9E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj8EEEEC2Ev(%"struct.thrust::detail::functional::actor.21"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.21"*, align 8
  store %"struct.thrust::detail::functional::actor.21"* %this, %"struct.thrust::detail::functional::actor.21"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.21"*, %"struct.thrust::detail::functional::actor.21"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.21"* %this1 to %"class.thrust::detail::functional::argument.22"*
  call void @_ZN6thrust6detail10functional8argumentILj8EEC2Ev(%"class.thrust::detail::functional::argument.22"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.10() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail10functional5actorINS1_8argumentILj9EEEEC2Ev(%"struct.thrust::detail::functional::actor.24"* @_ZN6thrust12placeholdersL3_10E)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::functional::actor.24", %"struct.thrust::detail::functional::actor.24"* @_ZN6thrust12placeholdersL3_10E, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail10functional5actorINS1_8argumentILj9EEEEC2Ev(%"struct.thrust::detail::functional::actor.24"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::functional::actor.24"*, align 8
  store %"struct.thrust::detail::functional::actor.24"* %this, %"struct.thrust::detail::functional::actor.24"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::functional::actor.24"*, %"struct.thrust::detail::functional::actor.24"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::functional::actor.24"* %this1 to %"class.thrust::detail::functional::argument.25"*
  call void @_ZN6thrust6detail10functional8argumentILj9EEC2Ev(%"class.thrust::detail::functional::argument.25"* %0)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.11() #0 section ".text.startup" {
entry:
  call void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"* @_ZStL8__ioinit)
  %0 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.std::ios_base::Init"*)* @_ZNSt8ios_base4InitD1Ev to void (i8*)*), i8* getelementptr inbounds (%"class.std::ios_base::Init", %"class.std::ios_base::Init"* @_ZStL8__ioinit, i32 0, i32 0), i8* @__dso_handle) #5
  ret void
}

declare void @_ZNSt8ios_base4InitC1Ev(%"class.std::ios_base::Init"*) unnamed_addr #3

; Function Attrs: nounwind
declare void @_ZNSt8ios_base4InitD1Ev(%"class.std::ios_base::Init"*) unnamed_addr #4

; Function Attrs: nounwind
declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*) #5

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.12() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj0EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj0EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj1EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %this_exec)
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.13() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6detail5seq_tC2Ev(%"struct.thrust::detail::seq_t"* @_ZN6thrustL3seqE)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::detail::seq_t", %"struct.thrust::detail::seq_t"* @_ZN6thrustL3seqE, i32 0, i32 0))
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail5seq_tC2Ev(%"struct.thrust::detail::seq_t"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::seq_t"*, align 8
  store %"struct.thrust::detail::seq_t"* %this, %"struct.thrust::detail::seq_t"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::seq_t"*, %"struct.thrust::detail::seq_t"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::seq_t"* %this1 to %"struct.thrust::system::detail::sequential::execution_policy.30"*
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.14() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6system3cpp6detail5par_tC2Ev(%"struct.thrust::system::cpp::detail::par_t"* @_ZN6thrust6system3cppL3parE)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::system::cpp::detail::par_t", %"struct.thrust::system::cpp::detail::par_t"* @_ZN6thrust6system3cppL3parE, i32 0, i32 0))
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system3cpp6detail5par_tC2Ev(%"struct.thrust::system::cpp::detail::par_t"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cpp::detail::par_t"*, align 8
  store %"struct.thrust::system::cpp::detail::par_t"* %this, %"struct.thrust::system::cpp::detail::par_t"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cpp::detail::par_t"*, %"struct.thrust::system::cpp::detail::par_t"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::par_t"* %this1 to %"struct.thrust::system::cpp::detail::execution_policy"*
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.15() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6system4cuda6detail5par_tC2Ev(%"struct.thrust::system::cuda::detail::par_t"* @_ZN6thrust6system4cudaL3parE)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::par_t", %"struct.thrust::system::cuda::detail::par_t"* @_ZN6thrust6system4cudaL3parE, i32 0, i32 0))
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5par_tC2Ev(%"struct.thrust::system::cuda::detail::par_t"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::par_t"*, align 8
  store %"struct.thrust::system::cuda::detail::par_t"* %this, %"struct.thrust::system::cuda::detail::par_t"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::par_t"*, %"struct.thrust::system::cuda::detail::par_t"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::par_t"* %this1 to %"struct.thrust::system::cuda::detail::execution_policy"*
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.16() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6system3cpp6detail5par_tC2Ev(%"struct.thrust::system::cpp::detail::par_t"* @_ZN6thrustL4hostE)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::system::cpp::detail::par_t", %"struct.thrust::system::cpp::detail::par_t"* @_ZN6thrustL4hostE, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.17() #0 section ".text.startup" {
entry:
  call void @_ZN6thrust6system4cuda6detail5par_tC2Ev(%"struct.thrust::system::cuda::detail::par_t"* @_ZN6thrustL6deviceE)
  %0 = call {}* @llvm.invariant.start(i64 1, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::par_t", %"struct.thrust::system::cuda::detail::par_t"* @_ZN6thrustL6deviceE, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define internal void @__cxx_global_var_init.18() #0 section ".text.startup" {
entry:
  call void @_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEEC2Ev(%class.VariableUnitTest* @TestPairScanByKeyInstance)
  %0 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%class.UnitTest*)* @_ZN8UnitTestD2Ev to void (i8*)*), i8* bitcast (%class.VariableUnitTest* @TestPairScanByKeyInstance to i8*), i8* @__dso_handle) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEEC2Ev(%class.VariableUnitTest* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %class.VariableUnitTest*, align 8
  %temp.lvalue = alloca %"class.std::basic_string", align 8
  %ref.tmp = alloca %"class.std::basic_string", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %class.VariableUnitTest* %this, %class.VariableUnitTest** %this.addr, align 8, !tbaa !1
  %this1 = load %class.VariableUnitTest*, %class.VariableUnitTest** %this.addr, align 8
  %0 = bitcast %class.VariableUnitTest* %this1 to %class.UnitTest*
  call void @_ZN8unittest9type_nameI17TestPairScanByKeyIiEEESsv(%"class.std::basic_string"* sret %ref.tmp)
  invoke void @_Z15base_class_nameRKSs(%"class.std::basic_string"* sret %temp.lvalue, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %call = call i8* @_ZNKSs5c_strEv(%"class.std::basic_string"* %temp.lvalue) #5
  invoke void @_ZN8UnitTestC2EPKc(%class.UnitTest* %0, i8* %call)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %temp.lvalue) #5
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  %1 = bitcast %class.VariableUnitTest* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTV16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  ret void

lpad:                                             ; preds = %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad2:                                            ; preds = %invoke.cont
  %5 = landingpad { i8*, i32 }
          cleanup
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %temp.lvalue) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad2, %lpad
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN8UnitTestD2Ev(%class.UnitTest* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %class.UnitTest*, align 8
  store %class.UnitTest* %this, %class.UnitTest** %this.addr, align 8, !tbaa !1
  %this1 = load %class.UnitTest*, %class.UnitTest** %this.addr, align 8
  %0 = bitcast %class.UnitTest* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTV8UnitTest, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  %name = getelementptr inbounds %class.UnitTest, %class.UnitTest* %this1, i32 0, i32 1
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %name) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj1EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj2EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"* %this_exec)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj2EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.28"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj3EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29"* %this_exec)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail6cursorILj3EEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.29"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSsD2Ev(%"class.std::basic_string"* %this) unnamed_addr #1 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::allocator", align 1
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %call = invoke %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNKSs6_M_repEv(%"class.std::basic_string"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZNKSs13get_allocatorEv(%"class.std::allocator"* sret %ref.tmp, %"class.std::basic_string"* %this1) #5
  invoke void @_ZNSs4_Rep10_M_disposeERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %call, %"class.std::allocator"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  %_M_dataplus = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.std::allocator"*)* @_ZNSaIcED2Ev to void (%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*)*)(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad2:                                            ; preds = %invoke.cont
  %3 = landingpad { i8*, i32 }
          catch i8* null
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad2, %lpad
  %_M_dataplus4 = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.std::allocator"*)* @_ZNSaIcED2Ev to void (%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*)*)(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus4) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN8UnitTestD0Ev(%class.UnitTest* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %class.UnitTest*, align 8
  store %class.UnitTest* %this, %class.UnitTest** %this.addr, align 8, !tbaa !1
  %this1 = load %class.UnitTest*, %class.UnitTest** %this.addr, align 8
  call void @_ZN8UnitTestD2Ev(%class.UnitTest* %this1) #5
  %0 = bitcast %class.UnitTest* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN8UnitTest3runEv(%class.UnitTest* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %class.UnitTest*, align 8
  store %class.UnitTest* %this, %class.UnitTest** %this.addr, align 8, !tbaa !1
  %this1 = load %class.UnitTest*, %class.UnitTest** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define available_externally %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNKSs6_M_repEv(%"class.std::basic_string"* %this) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %call = call i8* @_ZNKSs7_M_dataEv(%"class.std::basic_string"* %this1)
  %0 = bitcast i8* %call to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*
  %arrayidx = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %0, i64 -1
  ret %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %arrayidx
}

declare i32 @__gxx_personality_v0(...)

; Function Attrs: uwtable
define available_externally void @_ZNSs4_Rep10_M_disposeERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this, %"class.std::allocator"* dereferenceable(1) %__a) #0 align 2 {
entry:
  %this.addr = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, align 8
  %__a.addr = alloca %"class.std::allocator"*, align 8
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8
  %call = call dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs4_Rep12_S_empty_repEv()
  %cmp = icmp ne %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1, %call
  %conv = zext i1 %cmp to i64
  %expval = call i64 @llvm.expect.i64(i64 %conv, i64 0)
  %tobool = icmp ne i64 %expval, 0
  br i1 %tobool, label %if.then, label %if.end5

if.then:                                          ; preds = %entry
  %0 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1 to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"*
  %_M_refcount = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"* %0, i32 0, i32 2
  %call2 = call i32 @_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii(i32* %_M_refcount, i32 -1)
  %cmp3 = icmp sle i32 %call2, 0
  br i1 %cmp3, label %if.then4, label %if.end

if.then4:                                         ; preds = %if.then
  %1 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  call void @_ZNSs4_Rep10_M_destroyERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1, %"class.std::allocator"* dereferenceable(1) %1) #5
  br label %if.end

if.end:                                           ; preds = %if.then4, %if.then
  br label %if.end5

if.end5:                                          ; preds = %if.end, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNKSs13get_allocatorEv(%"class.std::allocator"* noalias sret %agg.result, %"class.std::basic_string"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %_M_dataplus = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus to %"class.std::allocator"*
  call void @_ZNSaIcEC2ERKS_(%"class.std::allocator"* %agg.result, %"class.std::allocator"* dereferenceable(1) %0) #5
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSaIcED2Ev(%"class.std::allocator"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::allocator"*, align 8
  store %"class.std::allocator"* %this, %"class.std::allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator"*, %"class.std::allocator"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator"* %this1 to %"class.__gnu_cxx::new_allocator"*
  call void @_ZN9__gnu_cxx13new_allocatorIcED2Ev(%"class.__gnu_cxx::new_allocator"* %0) #5
  ret void
}

; Function Attrs: noinline noreturn nounwind
define linkonce_odr hidden void @__clang_call_terminate(i8*) #6 comdat {
  %2 = call i8* @__cxa_begin_catch(i8* %0) #5
  call void @_ZSt9terminatev() #13
  unreachable
}

declare i8* @__cxa_begin_catch(i8*)

declare void @_ZSt9terminatev()

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNKSs7_M_dataEv(%"class.std::basic_string"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %_M_dataplus = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  %_M_p = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus, i32 0, i32 0
  %0 = load i8*, i8** %_M_p, align 8, !tbaa !8
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define available_externally dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs4_Rep12_S_empty_repEv() #1 align 2 {
entry:
  %__p = alloca i8*, align 8
  %0 = bitcast i8** %__p to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  store i8* bitcast ([0 x i64]* @_ZNSs4_Rep20_S_empty_rep_storageE to i8*), i8** %__p, align 8, !tbaa !1
  %1 = load i8*, i8** %__p, align 8, !tbaa !1
  %2 = bitcast i8* %1 to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*
  %3 = bitcast i8** %__p to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  ret %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %2
}

; Function Attrs: nounwind readnone
declare i64 @llvm.expect.i64(i64, i64) #7

; Function Attrs: inlinehint uwtable
define internal i32 @_ZN9__gnu_cxxL27__exchange_and_add_dispatchEPii(i32* %__mem, i32 %__val) #8 {
entry:
  %retval = alloca i32, align 4
  %__mem.addr = alloca i32*, align 8
  %__val.addr = alloca i32, align 4
  store i32* %__mem, i32** %__mem.addr, align 8, !tbaa !1
  store i32 %__val, i32* %__val.addr, align 4, !tbaa !11
  %call = call i32 @_ZL18__gthread_active_pv()
  %tobool = icmp ne i32 %call, 0
  br i1 %tobool, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %0 = load i32*, i32** %__mem.addr, align 8, !tbaa !1
  %1 = load i32, i32* %__val.addr, align 4, !tbaa !11
  %call1 = call i32 @_ZN9__gnu_cxxL18__exchange_and_addEPVii(i32* %0, i32 %1)
  store i32 %call1, i32* %retval, align 4
  br label %return

if.else:                                          ; preds = %entry
  %2 = load i32*, i32** %__mem.addr, align 8, !tbaa !1
  %3 = load i32, i32* %__val.addr, align 4, !tbaa !11
  %call2 = call i32 @_ZN9__gnu_cxxL25__exchange_and_add_singleEPii(i32* %2, i32 %3)
  store i32 %call2, i32* %retval, align 4
  br label %return

return:                                           ; preds = %if.else, %if.then
  %4 = load i32, i32* %retval, align 4
  ret i32 %4
}

; Function Attrs: nounwind
declare void @_ZNSs4_Rep10_M_destroyERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"class.std::allocator"* dereferenceable(1)) #4

; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #2

; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #2

; Function Attrs: inlinehint nounwind uwtable
define internal i32 @_ZL18__gthread_active_pv() #9 {
entry:
  %0 = load i8*, i8** @_ZZL18__gthread_active_pvE20__gthread_active_ptr, align 8, !tbaa !1
  %cmp = icmp ne i8* %0, null
  %conv = zext i1 %cmp to i32
  ret i32 %conv
}

; Function Attrs: inlinehint nounwind uwtable
define internal i32 @_ZN9__gnu_cxxL18__exchange_and_addEPVii(i32* %__mem, i32 %__val) #9 {
entry:
  %__mem.addr = alloca i32*, align 8
  %__val.addr = alloca i32, align 4
  %.atomictmp = alloca i32, align 4
  %atomic-temp = alloca i32, align 4
  store i32* %__mem, i32** %__mem.addr, align 8, !tbaa !1
  store i32 %__val, i32* %__val.addr, align 4, !tbaa !11
  %0 = load i32*, i32** %__mem.addr, align 8, !tbaa !1
  %1 = load i32, i32* %__val.addr, align 4, !tbaa !11
  store i32 %1, i32* %.atomictmp, align 4, !tbaa !11
  %2 = load i32, i32* %.atomictmp, align 4
  %3 = atomicrmw volatile add i32* %0, i32 %2 acq_rel
  store i32 %3, i32* %atomic-temp, align 4
  %4 = load i32, i32* %atomic-temp, align 4, !tbaa !11
  ret i32 %4
}

; Function Attrs: inlinehint nounwind uwtable
define internal i32 @_ZN9__gnu_cxxL25__exchange_and_add_singleEPii(i32* %__mem, i32 %__val) #9 {
entry:
  %__mem.addr = alloca i32*, align 8
  %__val.addr = alloca i32, align 4
  %__result = alloca i32, align 4
  store i32* %__mem, i32** %__mem.addr, align 8, !tbaa !1
  store i32 %__val, i32* %__val.addr, align 4, !tbaa !11
  %0 = bitcast i32* %__result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32*, i32** %__mem.addr, align 8, !tbaa !1
  %2 = load i32, i32* %1, align 4, !tbaa !11
  store i32 %2, i32* %__result, align 4, !tbaa !11
  %3 = load i32, i32* %__val.addr, align 4, !tbaa !11
  %4 = load i32*, i32** %__mem.addr, align 8, !tbaa !1
  %5 = load i32, i32* %4, align 4, !tbaa !11
  %add = add nsw i32 %5, %3
  store i32 %add, i32* %4, align 4, !tbaa !11
  %6 = load i32, i32* %__result, align 4, !tbaa !11
  %7 = bitcast i32* %__result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  ret i32 %6
}

; Function Attrs: nounwind
declare extern_weak i32 @__pthread_key_create(i32*, void (i8*)*) #4

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSaIcEC2ERKS_(%"class.std::allocator"* %this, %"class.std::allocator"* dereferenceable(1) %__a) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::allocator"*, align 8
  %__a.addr = alloca %"class.std::allocator"*, align 8
  store %"class.std::allocator"* %this, %"class.std::allocator"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator"*, %"class.std::allocator"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator"* %this1 to %"class.__gnu_cxx::new_allocator"*
  %1 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator"* %1 to %"class.__gnu_cxx::new_allocator"*
  call void @_ZN9__gnu_cxx13new_allocatorIcEC2ERKS1_(%"class.__gnu_cxx::new_allocator"* %0, %"class.__gnu_cxx::new_allocator"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIcEC2ERKS1_(%"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
  store %"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator"* %0, %"class.__gnu_cxx::new_allocator"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIcED2Ev(%"class.__gnu_cxx::new_allocator"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
  store %"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
  ret void
}

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPv(i8*) #10

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj0EEC2Ev(%"class.thrust::detail::functional::argument"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument"*, align 8
  store %"class.thrust::detail::functional::argument"* %this, %"class.thrust::detail::functional::argument"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument"*, %"class.thrust::detail::functional::argument"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj1EEC2Ev(%"class.thrust::detail::functional::argument.1"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.1"*, align 8
  store %"class.thrust::detail::functional::argument.1"* %this, %"class.thrust::detail::functional::argument.1"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.1"*, %"class.thrust::detail::functional::argument.1"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj2EEC2Ev(%"class.thrust::detail::functional::argument.4"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.4"*, align 8
  store %"class.thrust::detail::functional::argument.4"* %this, %"class.thrust::detail::functional::argument.4"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.4"*, %"class.thrust::detail::functional::argument.4"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj3EEC2Ev(%"class.thrust::detail::functional::argument.7"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.7"*, align 8
  store %"class.thrust::detail::functional::argument.7"* %this, %"class.thrust::detail::functional::argument.7"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.7"*, %"class.thrust::detail::functional::argument.7"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj4EEC2Ev(%"class.thrust::detail::functional::argument.10"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.10"*, align 8
  store %"class.thrust::detail::functional::argument.10"* %this, %"class.thrust::detail::functional::argument.10"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.10"*, %"class.thrust::detail::functional::argument.10"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj5EEC2Ev(%"class.thrust::detail::functional::argument.13"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.13"*, align 8
  store %"class.thrust::detail::functional::argument.13"* %this, %"class.thrust::detail::functional::argument.13"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.13"*, %"class.thrust::detail::functional::argument.13"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj6EEC2Ev(%"class.thrust::detail::functional::argument.16"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.16"*, align 8
  store %"class.thrust::detail::functional::argument.16"* %this, %"class.thrust::detail::functional::argument.16"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.16"*, %"class.thrust::detail::functional::argument.16"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj7EEC2Ev(%"class.thrust::detail::functional::argument.19"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.19"*, align 8
  store %"class.thrust::detail::functional::argument.19"* %this, %"class.thrust::detail::functional::argument.19"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.19"*, %"class.thrust::detail::functional::argument.19"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj8EEC2Ev(%"class.thrust::detail::functional::argument.22"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.22"*, align 8
  store %"class.thrust::detail::functional::argument.22"* %this, %"class.thrust::detail::functional::argument.22"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.22"*, %"class.thrust::detail::functional::argument.22"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail10functional8argumentILj9EEC2Ev(%"class.thrust::detail::functional::argument.25"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::functional::argument.25"*, align 8
  store %"class.thrust::detail::functional::argument.25"* %this, %"class.thrust::detail::functional::argument.25"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::functional::argument.25"*, %"class.thrust::detail::functional::argument.25"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_Z15base_class_nameRKSs(%"class.std::basic_string"* noalias sret %agg.result, %"class.std::basic_string"* dereferenceable(8) %name) #8 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %name.addr = alloca %"class.std::basic_string"*, align 8
  %result = alloca %"class.std::basic_string", align 8
  %ref.tmp = alloca %"class.std::basic_string", align 8
  %ref.tmp1 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  store %"class.std::basic_string"* %name, %"class.std::basic_string"** %name.addr, align 8, !tbaa !7
  %0 = bitcast %"class.std::basic_string"* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %name.addr, align 8
  call void @_ZNSsC1ERKSs(%"class.std::basic_string"* %result, %"class.std::basic_string"* dereferenceable(8) %1)
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp1) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_Z11chop_prefixRSsRKSs(%"class.std::basic_string"* dereferenceable(8) %result, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp1) #5
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont3
  invoke void @_Z11chop_prefixRSsRKSs(%"class.std::basic_string"* dereferenceable(8) %result, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont9 unwind label %lpad8

invoke.cont9:                                     ; preds = %invoke.cont7
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %call = invoke i64 @_ZNKSs13find_first_ofEPKcm(%"class.std::basic_string"* %result, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i32 0, i32 0), i64 0)
          to label %invoke.cont13 unwind label %lpad12

invoke.cont13:                                    ; preds = %invoke.cont9
  %call14 = call i64 @_ZNKSs4sizeEv(%"class.std::basic_string"* %result) #5
  %call16 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSs7replaceEmmPKc(%"class.std::basic_string"* %result, i64 %call, i64 %call14, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.21, i32 0, i32 0))
          to label %invoke.cont15 unwind label %lpad12

invoke.cont15:                                    ; preds = %invoke.cont13
  invoke void @_ZNSsC1ERKSs(%"class.std::basic_string"* %agg.result, %"class.std::basic_string"* dereferenceable(8) %call16)
          to label %invoke.cont17 unwind label %lpad12

invoke.cont17:                                    ; preds = %invoke.cont15
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %result) #5
  %2 = bitcast %"class.std::basic_string"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %2) #5
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad2:                                            ; preds = %invoke.cont
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad2, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp1) #5
  br label %ehcleanup18

lpad6:                                            ; preds = %invoke.cont3
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  br label %ehcleanup11

lpad8:                                            ; preds = %invoke.cont7
  %12 = landingpad { i8*, i32 }
          cleanup
  %13 = extractvalue { i8*, i32 } %12, 0
  store i8* %13, i8** %exn.slot, align 8
  %14 = extractvalue { i8*, i32 } %12, 1
  store i32 %14, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup11

ehcleanup11:                                      ; preds = %lpad8, %lpad6
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  br label %ehcleanup18

lpad12:                                           ; preds = %invoke.cont15, %invoke.cont13, %invoke.cont9
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup18

ehcleanup18:                                      ; preds = %lpad12, %ehcleanup11, %ehcleanup
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %result) #5
  %18 = bitcast %"class.std::basic_string"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup18
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val20 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val20
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest9type_nameI17TestPairScanByKeyIiEEESsv(%"class.std::basic_string"* noalias sret %agg.result) #0 comdat {
entry:
  %call = call i8* @_ZNKSt9type_info4nameEv(%"class.std::type_info"* bitcast ({ i8*, i8* }* @_ZTI17TestPairScanByKeyIiE to %"class.std::type_info"*)) #5
  call void @_ZN8unittest8demangleEPKc(%"class.std::basic_string"* sret %agg.result, i8* %call)
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNKSs5c_strEv(%"class.std::basic_string"* %this) #1 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %call = invoke i8* @_ZNKSs7_M_dataEv(%"class.std::basic_string"* %this1)
          to label %invoke.cont unwind label %terminate.lpad

invoke.cont:                                      ; preds = %entry
  ret i8* %call

terminate.lpad:                                   ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  call void @__clang_call_terminate(i8* %1) #13
  unreachable
}

declare void @_ZN8UnitTestC2EPKc(%class.UnitTest*, i8*) unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEED0Ev(%class.VariableUnitTest* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %class.VariableUnitTest*, align 8
  store %class.VariableUnitTest* %this, %class.VariableUnitTest** %this.addr, align 8, !tbaa !1
  %this1 = load %class.VariableUnitTest*, %class.VariableUnitTest** %this.addr, align 8
  call void bitcast (void (%class.UnitTest*)* @_ZN8UnitTestD2Ev to void (%class.VariableUnitTest*)*)(%class.VariableUnitTest* %this1) #5
  %0 = bitcast %class.VariableUnitTest* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN16VariableUnitTestI17TestPairScanByKeyN8unittest9type_listIasiNS1_9null_typeES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_EEE3runEv(%class.VariableUnitTest* %this) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %class.VariableUnitTest*, align 8
  %sizes = alloca %"class.std::vector", align 8
  %i = alloca i64, align 8
  %loop = alloca %"struct.unittest::for_each_type", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %class.VariableUnitTest* %this, %class.VariableUnitTest** %this.addr, align 8, !tbaa !1
  %this1 = load %class.VariableUnitTest*, %class.VariableUnitTest** %this.addr, align 8
  %0 = bitcast %"class.std::vector"* %sizes to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  call void @_Z14get_test_sizesv(%"class.std::vector"* sret %sizes)
  %1 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = load i64, i64* %i, align 8, !tbaa !13
  %call = call i64 @_ZNKSt6vectorImSaImEE4sizeEv(%"class.std::vector"* %sizes) #5
  %cmp = icmp ne i64 %2, %call
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %3 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"struct.unittest::for_each_type"* %loop to i8*
  call void @llvm.lifetime.start(i64 1, i8* %4) #5
  %5 = load i64, i64* %i, align 8, !tbaa !13
  %call2 = invoke dereferenceable(8) i64* @_ZNSt6vectorImSaImEEixEm(%"class.std::vector"* %sizes, i64 %5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %for.body
  %6 = load i64, i64* %call2, align 8, !tbaa !13
  invoke void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyaLj0EEclImEEvT_(%"struct.unittest::for_each_type"* %loop, i64 %6)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %7 = bitcast %"struct.unittest::for_each_type"* %loop to i8*
  call void @llvm.lifetime.end(i64 1, i8* %7) #5
  br label %for.inc

for.inc:                                          ; preds = %invoke.cont3
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

lpad:                                             ; preds = %invoke.cont, %for.body
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  %12 = bitcast %"struct.unittest::for_each_type"* %loop to i8*
  call void @llvm.lifetime.end(i64 1, i8* %12) #5
  %13 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  call void @_ZNSt6vectorImSaImEED2Ev(%"class.std::vector"* %sizes) #5
  %14 = bitcast %"class.std::vector"* %sizes to i8*
  call void @llvm.lifetime.end(i64 24, i8* %14) #5
  br label %eh.resume

for.end:                                          ; preds = %for.cond.cleanup
  call void @_ZNSt6vectorImSaImEED2Ev(%"class.std::vector"* %sizes) #5
  %15 = bitcast %"class.std::vector"* %sizes to i8*
  call void @llvm.lifetime.end(i64 24, i8* %15) #5
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

declare void @_ZNSsC1ERKSs(%"class.std::basic_string"*, %"class.std::basic_string"* dereferenceable(8)) unnamed_addr #3

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_Z11chop_prefixRSsRKSs(%"class.std::basic_string"* dereferenceable(8) %str, %"class.std::basic_string"* dereferenceable(8) %prefix) #8 comdat {
entry:
  %str.addr = alloca %"class.std::basic_string"*, align 8
  %prefix.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %str, %"class.std::basic_string"** %str.addr, align 8, !tbaa !7
  store %"class.std::basic_string"* %prefix, %"class.std::basic_string"** %prefix.addr, align 8, !tbaa !7
  %0 = load %"class.std::basic_string"*, %"class.std::basic_string"** %str.addr, align 8
  %1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %str.addr, align 8
  %2 = load %"class.std::basic_string"*, %"class.std::basic_string"** %prefix.addr, align 8
  %call = call i64 @_ZNKSs4findERKSsm(%"class.std::basic_string"* %1, %"class.std::basic_string"* dereferenceable(8) %2, i64 0) #5
  %cmp = icmp eq i64 %call, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  br label %cond.end

cond.false:                                       ; preds = %entry
  %3 = load %"class.std::basic_string"*, %"class.std::basic_string"** %str.addr, align 8
  %call1 = call i64 @_ZNKSs4sizeEv(%"class.std::basic_string"* %3) #5
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i64 [ 0, %cond.true ], [ %call1, %cond.false ]
  %4 = load %"class.std::basic_string"*, %"class.std::basic_string"** %prefix.addr, align 8
  %call2 = call i64 @_ZNKSs4sizeEv(%"class.std::basic_string"* %4) #5
  %call3 = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs7replaceEmmPKc(%"class.std::basic_string"* %0, i64 %cond, i64 %call2, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.21, i32 0, i32 0))
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSaIcEC2Ev(%"class.std::allocator"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::allocator"*, align 8
  store %"class.std::allocator"* %this, %"class.std::allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator"*, %"class.std::allocator"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator"* %this1 to %"class.__gnu_cxx::new_allocator"*
  call void @_ZN9__gnu_cxx13new_allocatorIcEC2Ev(%"class.__gnu_cxx::new_allocator"* %0) #5
  ret void
}

declare void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"*, i8*, %"class.std::allocator"* dereferenceable(1)) unnamed_addr #3

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSs7replaceEmmPKc(%"class.std::basic_string"* %this, i64 %__pos, i64 %__n1, i8* %__s) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__pos.addr = alloca i64, align 8
  %__n1.addr = alloca i64, align 8
  %__s.addr = alloca i8*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i64 %__pos, i64* %__pos.addr, align 8, !tbaa !13
  store i64 %__n1, i64* %__n1.addr, align 8, !tbaa !13
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load i64, i64* %__pos.addr, align 8, !tbaa !13
  %1 = load i64, i64* %__n1.addr, align 8, !tbaa !13
  %2 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %3 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call i64 @_ZNSt11char_traitsIcE6lengthEPKc(i8* %3)
  %call2 = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs7replaceEmmPKcm(%"class.std::basic_string"* %this1, i64 %0, i64 %1, i8* %2, i64 %call)
  ret %"class.std::basic_string"* %call2
}

; Function Attrs: uwtable
define available_externally i64 @_ZNKSs13find_first_ofEPKcm(%"class.std::basic_string"* %this, i8* %__s, i64 %__pos) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__s.addr = alloca i8*, align 8
  %__pos.addr = alloca i64, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  store i64 %__pos, i64* %__pos.addr, align 8, !tbaa !13
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %1 = load i64, i64* %__pos.addr, align 8, !tbaa !13
  %2 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call i64 @_ZNSt11char_traitsIcE6lengthEPKc(i8* %2)
  %call2 = call i64 @_ZNKSs13find_first_ofEPKcmm(%"class.std::basic_string"* %this1, i8* %0, i64 %1, i64 %call)
  ret i64 %call2
}

; Function Attrs: nounwind uwtable
define available_externally i64 @_ZNKSs4sizeEv(%"class.std::basic_string"* %this) #1 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %call = invoke %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNKSs6_M_repEv(%"class.std::basic_string"* %this1)
          to label %invoke.cont unwind label %terminate.lpad

invoke.cont:                                      ; preds = %entry
  %0 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %call to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"*
  %_M_length = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"* %0, i32 0, i32 0
  %1 = load i64, i64* %_M_length, align 8, !tbaa !15
  ret i64 %1

terminate.lpad:                                   ; preds = %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  call void @__clang_call_terminate(i8* %3) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define available_externally i64 @_ZNKSs4findERKSsm(%"class.std::basic_string"* %this, %"class.std::basic_string"* dereferenceable(8) %__str, i64 %__pos) #1 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__str.addr = alloca %"class.std::basic_string"*, align 8
  %__pos.addr = alloca i64, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store %"class.std::basic_string"* %__str, %"class.std::basic_string"** %__str.addr, align 8, !tbaa !7
  store i64 %__pos, i64* %__pos.addr, align 8, !tbaa !13
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %call = call i8* @_ZNKSs4dataEv(%"class.std::basic_string"* %0) #5
  %1 = load i64, i64* %__pos.addr, align 8, !tbaa !13
  %2 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %call2 = call i64 @_ZNKSs4sizeEv(%"class.std::basic_string"* %2) #5
  %call3 = invoke i64 @_ZNKSs4findEPKcmm(%"class.std::basic_string"* %this1, i8* %call, i64 %1, i64 %call2)
          to label %invoke.cont unwind label %terminate.lpad

invoke.cont:                                      ; preds = %entry
  ret i64 %call3

terminate.lpad:                                   ; preds = %entry
  %3 = landingpad { i8*, i32 }
          catch i8* null
  %4 = extractvalue { i8*, i32 } %3, 0
  call void @__clang_call_terminate(i8* %4) #13
  unreachable
}

declare i64 @_ZNKSs4findEPKcmm(%"class.std::basic_string"*, i8*, i64, i64) #3

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNKSs4dataEv(%"class.std::basic_string"* %this) #1 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %call = invoke i8* @_ZNKSs7_M_dataEv(%"class.std::basic_string"* %this1)
          to label %invoke.cont unwind label %terminate.lpad

invoke.cont:                                      ; preds = %entry
  ret i8* %call

terminate.lpad:                                   ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  call void @__clang_call_terminate(i8* %1) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIcEC2Ev(%"class.__gnu_cxx::new_allocator"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator"*, align 8
  store %"class.__gnu_cxx::new_allocator"* %this, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator"*, %"class.__gnu_cxx::new_allocator"** %this.addr, align 8
  ret void
}

declare dereferenceable(8) %"class.std::basic_string"* @_ZNSs7replaceEmmPKcm(%"class.std::basic_string"*, i64, i64, i8*, i64) #3

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNSt11char_traitsIcE6lengthEPKc(i8* %__s) #1 comdat align 2 {
entry:
  %__s.addr = alloca i8*, align 8
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call i64 @strlen(i8* %0) #5
  ret i64 %call
}

; Function Attrs: nounwind
declare i64 @strlen(i8*) #4

declare i64 @_ZNKSs13find_first_ofEPKcmm(%"class.std::basic_string"*, i8*, i64, i64) #3

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN8unittest8demangleEPKc(%"class.std::basic_string"* noalias sret %agg.result, i8* %name) #8 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %name.addr = alloca i8*, align 8
  %status = alloca i32, align 4
  %realname = alloca i8*, align 8
  %nrvo = alloca i1, align 1
  %ref.tmp = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store i8* %name, i8** %name.addr, align 8, !tbaa !1
  %0 = bitcast i32* %status to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %status, align 4, !tbaa !11
  %1 = bitcast i8** %realname to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = load i8*, i8** %name.addr, align 8, !tbaa !1
  %call = call i8* @__cxa_demangle(i8* %2, i8* null, i64* null, i32* %status)
  store i8* %call, i8** %realname, align 8, !tbaa !1
  store i1 false, i1* %nrvo, align 1
  %3 = load i8*, i8** %realname, align 8, !tbaa !1
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %agg.result, i8* %3, %"class.std::allocator"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  %4 = load i8*, i8** %realname, align 8, !tbaa !1
  call void @free(i8* %4) #5
  store i1 true, i1* %nrvo, align 1
  %nrvo.val = load i1, i1* %nrvo, align 1
  br i1 %nrvo.val, label %nrvo.skipdtor, label %nrvo.unused

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          cleanup
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  %8 = bitcast i8** %realname to i8*
  call void @llvm.lifetime.end(i64 8, i8* %8) #5
  %9 = bitcast i32* %status to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  br label %eh.resume

nrvo.unused:                                      ; preds = %invoke.cont
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %agg.result) #5
  br label %nrvo.skipdtor

nrvo.skipdtor:                                    ; preds = %nrvo.unused, %invoke.cont
  %10 = bitcast i8** %realname to i8*
  call void @llvm.lifetime.end(i64 8, i8* %10) #5
  %11 = bitcast i32* %status to i8*
  call void @llvm.lifetime.end(i64 4, i8* %11) #5
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val1 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val1
}

; Function Attrs: nounwind uwtable
define linkonce_odr i8* @_ZNKSt9type_info4nameEv(%"class.std::type_info"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::type_info"*, align 8
  store %"class.std::type_info"* %this, %"class.std::type_info"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::type_info"*, %"class.std::type_info"** %this.addr, align 8
  %__name = getelementptr inbounds %"class.std::type_info", %"class.std::type_info"* %this1, i32 0, i32 1
  %0 = load i8*, i8** %__name, align 8, !tbaa !17
  %arrayidx = getelementptr inbounds i8, i8* %0, i64 0
  %1 = load i8, i8* %arrayidx, align 1, !tbaa !7
  %conv = sext i8 %1 to i32
  %cmp = icmp eq i32 %conv, 42
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %__name2 = getelementptr inbounds %"class.std::type_info", %"class.std::type_info"* %this1, i32 0, i32 1
  %2 = load i8*, i8** %__name2, align 8, !tbaa !17
  %add.ptr = getelementptr inbounds i8, i8* %2, i64 1
  br label %cond.end

cond.false:                                       ; preds = %entry
  %__name3 = getelementptr inbounds %"class.std::type_info", %"class.std::type_info"* %this1, i32 0, i32 1
  %3 = load i8*, i8** %__name3, align 8, !tbaa !17
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i8* [ %add.ptr, %cond.true ], [ %3, %cond.false ]
  ret i8* %cond
}

declare i8* @__cxa_demangle(i8*, i8*, i64*, i32*) #3

; Function Attrs: nounwind
declare void @free(i8*) #4

declare void @_Z14get_test_sizesv(%"class.std::vector"* sret) #3

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNKSt6vectorImSaImEE4sizeEv(%"class.std::vector"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::vector"*, align 8
  store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
  %0 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  %_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %0, i32 0, i32 0
  %_M_finish = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl, i32 0, i32 1
  %1 = load i64*, i64** %_M_finish, align 8, !tbaa !19
  %2 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  %_M_impl2 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %2, i32 0, i32 0
  %_M_start = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl2, i32 0, i32 0
  %3 = load i64*, i64** %_M_start, align 8, !tbaa !22
  %sub.ptr.lhs.cast = ptrtoint i64* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i64* %3 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyaLj0EEclImEEvT_(%"struct.unittest::for_each_type"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::for_each_type"*, align 8
  %n.addr = alloca i64, align 8
  %f = alloca %struct.TestPairScanByKey, align 1
  %loop = alloca %"struct.unittest::for_each_type.41", align 1
  store %"struct.unittest::for_each_type"* %this, %"struct.unittest::for_each_type"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"struct.unittest::for_each_type"*, %"struct.unittest::for_each_type"** %this.addr, align 8
  %0 = bitcast %struct.TestPairScanByKey* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN17TestPairScanByKeyIaEclEm(%struct.TestPairScanByKey* %f, i64 %1)
  %2 = bitcast %"struct.unittest::for_each_type.41"* %loop to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeysLj1EEclImEEvT_(%"struct.unittest::for_each_type.41"* %loop, i64 %3)
  %4 = bitcast %"struct.unittest::for_each_type.41"* %loop to i8*
  call void @llvm.lifetime.end(i64 1, i8* %4) #5
  %5 = bitcast %struct.TestPairScanByKey* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %5) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i64* @_ZNSt6vectorImSaImEEixEm(%"class.std::vector"* %this, i64 %__n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::vector"*, align 8
  %__n.addr = alloca i64, align 8
  store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  %this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
  %0 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  %_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %0, i32 0, i32 0
  %_M_start = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl, i32 0, i32 0
  %1 = load i64*, i64** %_M_start, align 8, !tbaa !22
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %add.ptr = getelementptr inbounds i64, i64* %1, i64 %2
  ret i64* %add.ptr
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSt6vectorImSaImEED2Ev(%"class.std::vector"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::vector"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.std::vector"* %this, %"class.std::vector"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::vector"*, %"class.std::vector"** %this.addr, align 8
  %0 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  %_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %0, i32 0, i32 0
  %_M_start = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl, i32 0, i32 0
  %1 = load i64*, i64** %_M_start, align 8, !tbaa !22
  %2 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  %_M_impl2 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %2, i32 0, i32 0
  %_M_finish = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl2, i32 0, i32 1
  %3 = load i64*, i64** %_M_finish, align 8, !tbaa !19
  %4 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  %call = call dereferenceable(1) %"class.std::allocator.38"* @_ZNSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %4) #5
  invoke void @_ZSt8_DestroyIPmmEvT_S1_RSaIT0_E(i64* %1, i64* %3, %"class.std::allocator.38"* dereferenceable(1) %call)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %5 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  call void @_ZNSt12_Vector_baseImSaImEED2Ev(%"struct.std::_Vector_base"* %5) #5
  ret void

lpad:                                             ; preds = %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.std::vector"* %this1 to %"struct.std::_Vector_base"*
  call void @_ZNSt12_Vector_baseImSaImEED2Ev(%"struct.std::_Vector_base"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN17TestPairScanByKeyIaEclEm(%struct.TestPairScanByKey* %this, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %struct.TestPairScanByKey*, align 8
  %n.addr = alloca i64, align 8
  %h_p1 = alloca %"class.thrust::host_vector", align 8
  %h_p2 = alloca %"class.thrust::host_vector", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %h_pairs = alloca %"class.thrust::host_vector.45", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp22 = alloca %struct.make_pair_functor, align 1
  %coerce = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %d_p1 = alloca %"class.thrust::device_vector", align 8
  %d_p2 = alloca %"class.thrust::device_vector", align 8
  %d_pairs = alloca %"class.thrust::device_vector.61", align 8
  %h_keys = alloca %"class.thrust::host_vector", align 8
  %ref.tmp = alloca %"class.thrust::host_vector.73", align 8
  %d_keys = alloca %"class.thrust::device_vector", align 8
  %init = alloca %"struct.thrust::pair", align 1
  %ref.tmp46 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp51 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp57 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp67 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp72 = alloca %"struct.thrust::pair", align 1
  %agg.tmp73 = alloca %"struct.thrust::equal_to", align 1
  %agg.tmp74 = alloca %struct.add_pairs, align 1
  %coerce85 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp88 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp96 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp104 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp112 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp120 = alloca %"struct.thrust::pair", align 1
  %agg.tmp121 = alloca %"struct.thrust::equal_to", align 1
  %agg.tmp122 = alloca %struct.add_pairs, align 1
  %coerce145 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %ref.tmp151 = alloca %"class.std::basic_string", align 8
  %ref.tmp152 = alloca %"class.std::allocator", align 1
  store %struct.TestPairScanByKey* %this, %struct.TestPairScanByKey** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %struct.TestPairScanByKey*, %struct.TestPairScanByKey** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector"* %h_p1 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %0) #5
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN8unittest15random_integersIaEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector"* sret %h_p1, i64 %1)
  %2 = bitcast %"class.thrust::host_vector"* %h_p2 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN8unittest15random_integersIaEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector"* sret %h_p2, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %4 = bitcast %"class.thrust::host_vector.45"* %h_pairs to i8*
  call void @llvm.lifetime.start(i64 32, i8* %4) #5
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust11host_vectorINS_4pairIaaEESaIS2_EEC2Em(%"class.thrust::host_vector.45"* %h_pairs, i64 %5)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %6 = bitcast %"class.thrust::host_vector"* %h_p1 to %"class.thrust::detail::vector_base"*
  %call = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %6)
          to label %invoke.cont5 unwind label %lpad4

invoke.cont5:                                     ; preds = %invoke.cont3
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive6, align 8
  %7 = bitcast %"class.thrust::host_vector"* %h_p1 to %"class.thrust::detail::vector_base"*
  %call9 = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE3endEv(%"class.thrust::detail::vector_base"* %7)
          to label %invoke.cont8 unwind label %lpad4

invoke.cont8:                                     ; preds = %invoke.cont5
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive10, i32 0, i32 0
  store i8* %call9, i8** %coerce.dive11, align 8
  %8 = bitcast %"class.thrust::host_vector"* %h_p2 to %"class.thrust::detail::vector_base"*
  %call14 = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %8)
          to label %invoke.cont13 unwind label %lpad4

invoke.cont13:                                    ; preds = %invoke.cont8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp12, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive15, i32 0, i32 0
  store i8* %call14, i8** %coerce.dive16, align 8
  %9 = bitcast %"class.thrust::host_vector.45"* %h_pairs to %"class.thrust::detail::vector_base.46"*
  %call19 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %9)
          to label %invoke.cont18 unwind label %lpad4

invoke.cont18:                                    ; preds = %invoke.cont13
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp17, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair"* %call19, %"struct.thrust::pair"** %coerce.dive21, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive23, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive24, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp7, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive25, i32 0, i32 0
  %11 = load i8*, i8** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp12, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive27, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive29, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive30, align 8
  %call32 = invoke %"struct.thrust::pair"* @_ZN6thrust9transformINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_(i8* %10, i8* %11, i8* %12, %"struct.thrust::pair"* %13)
          to label %invoke.cont31 unwind label %lpad4

invoke.cont31:                                    ; preds = %invoke.cont18
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %coerce, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive33, i32 0, i32 0
  store %"struct.thrust::pair"* %call32, %"struct.thrust::pair"** %coerce.dive34, align 8
  %14 = bitcast %"class.thrust::device_vector"* %d_p1 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %14) #5
  invoke void @_ZN6thrust13device_vectorIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector"* %d_p1, %"class.thrust::host_vector"* dereferenceable(32) %h_p1)
          to label %invoke.cont35 unwind label %lpad4

invoke.cont35:                                    ; preds = %invoke.cont31
  %15 = bitcast %"class.thrust::device_vector"* %d_p2 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %15) #5
  invoke void @_ZN6thrust13device_vectorIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector"* %d_p2, %"class.thrust::host_vector"* dereferenceable(32) %h_p2)
          to label %invoke.cont37 unwind label %lpad36

invoke.cont37:                                    ; preds = %invoke.cont35
  %16 = bitcast %"class.thrust::device_vector.61"* %d_pairs to i8*
  call void @llvm.lifetime.start(i64 32, i8* %16) #5
  invoke void @_ZN6thrust13device_vectorINS_4pairIaaEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.61"* %d_pairs, %"class.thrust::host_vector.45"* dereferenceable(32) %h_pairs)
          to label %invoke.cont39 unwind label %lpad38

invoke.cont39:                                    ; preds = %invoke.cont37
  %17 = bitcast %"class.thrust::host_vector"* %h_keys to i8*
  call void @llvm.lifetime.start(i64 32, i8* %17) #5
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN8unittest15random_integersIbEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.73"* sret %ref.tmp, i64 %18)
          to label %invoke.cont41 unwind label %lpad40

invoke.cont41:                                    ; preds = %invoke.cont39
  invoke void @_ZN6thrust11host_vectorIaSaIaEEC2IbSaIbEEERKNS0_IT_T0_EE(%"class.thrust::host_vector"* %h_keys, %"class.thrust::host_vector.73"* dereferenceable(32) %ref.tmp)
          to label %invoke.cont43 unwind label %lpad42

invoke.cont43:                                    ; preds = %invoke.cont41
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %ref.tmp) #5
  %19 = bitcast %"class.thrust::device_vector"* %d_keys to i8*
  call void @llvm.lifetime.start(i64 32, i8* %19) #5
  invoke void @_ZN6thrust13device_vectorIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector"* %d_keys, %"class.thrust::host_vector"* dereferenceable(32) %h_keys)
          to label %invoke.cont45 unwind label %lpad44

invoke.cont45:                                    ; preds = %invoke.cont43
  %20 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.lifetime.start(i64 2, i8* %20) #5
  %call49 = invoke i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 13, i32 13)
          to label %invoke.cont48 unwind label %lpad47

invoke.cont48:                                    ; preds = %invoke.cont45
  %21 = bitcast %"struct.thrust::pair.82"* %ref.tmp46 to i64*
  store i64 %call49, i64* %21, align 4
  invoke void @_ZN6thrust4pairIaaEC2IiiEERKNS0_IT_T0_EE(%"struct.thrust::pair"* %init, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp46)
          to label %invoke.cont50 unwind label %lpad47

invoke.cont50:                                    ; preds = %invoke.cont48
  %22 = bitcast %"class.thrust::host_vector"* %h_keys to %"class.thrust::detail::vector_base"*
  %call54 = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %22)
          to label %invoke.cont53 unwind label %lpad52

invoke.cont53:                                    ; preds = %invoke.cont50
  %coerce.dive55 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp51, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive55, i32 0, i32 0
  store i8* %call54, i8** %coerce.dive56, align 8
  %23 = bitcast %"class.thrust::host_vector"* %h_keys to %"class.thrust::detail::vector_base"*
  %call59 = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE3endEv(%"class.thrust::detail::vector_base"* %23)
          to label %invoke.cont58 unwind label %lpad52

invoke.cont58:                                    ; preds = %invoke.cont53
  %coerce.dive60 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp57, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive60, i32 0, i32 0
  store i8* %call59, i8** %coerce.dive61, align 8
  %24 = bitcast %"class.thrust::host_vector.45"* %h_pairs to %"class.thrust::detail::vector_base.46"*
  %call64 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %24)
          to label %invoke.cont63 unwind label %lpad52

invoke.cont63:                                    ; preds = %invoke.cont58
  %coerce.dive65 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp62, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive65, i32 0, i32 0
  store %"struct.thrust::pair"* %call64, %"struct.thrust::pair"** %coerce.dive66, align 8
  %25 = bitcast %"class.thrust::host_vector.45"* %h_pairs to %"class.thrust::detail::vector_base.46"*
  %call69 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %25)
          to label %invoke.cont68 unwind label %lpad52

invoke.cont68:                                    ; preds = %invoke.cont63
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp67, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive70, i32 0, i32 0
  store %"struct.thrust::pair"* %call69, %"struct.thrust::pair"** %coerce.dive71, align 8
  %26 = bitcast %"struct.thrust::pair"* %agg.tmp72 to i8*
  %27 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %26, i8* %27, i64 2, i32 1, i1 false), !tbaa.struct !23
  %coerce.dive75 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp51, i32 0, i32 0
  %coerce.dive76 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive75, i32 0, i32 0
  %28 = load i8*, i8** %coerce.dive76, align 8
  %coerce.dive77 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp57, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive77, i32 0, i32 0
  %29 = load i8*, i8** %coerce.dive78, align 8
  %coerce.dive79 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp62, i32 0, i32 0
  %coerce.dive80 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive79, i32 0, i32 0
  %30 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive80, align 8
  %coerce.dive81 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp67, i32 0, i32 0
  %coerce.dive82 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive81, i32 0, i32 0
  %31 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive82, align 8
  %32 = bitcast %"struct.thrust::pair"* %agg.tmp72 to i16*
  %33 = load i16, i16* %32, align 1
  %call84 = invoke %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPaEENS2_IPNS_4pairIaaEEEES8_S6_NS_8equal_toIaEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_(i8* %28, i8* %29, %"struct.thrust::pair"* %30, %"struct.thrust::pair"* %31, i16 %33)
          to label %invoke.cont83 unwind label %lpad52

invoke.cont83:                                    ; preds = %invoke.cont68
  %coerce.dive86 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %coerce85, i32 0, i32 0
  %coerce.dive87 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive86, i32 0, i32 0
  store %"struct.thrust::pair"* %call84, %"struct.thrust::pair"** %coerce.dive87, align 8
  %34 = bitcast %"class.thrust::device_vector"* %d_keys to %"class.thrust::detail::vector_base.54"*
  %call90 = invoke i8* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::vector_base.54"* %34)
          to label %invoke.cont89 unwind label %lpad52

invoke.cont89:                                    ; preds = %invoke.cont83
  %coerce.dive91 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp88, i32 0, i32 0
  %coerce.dive92 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive91, i32 0, i32 0
  %coerce.dive93 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive92, i32 0, i32 0
  %coerce.dive94 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive93, i32 0, i32 0
  %coerce.dive95 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive94, i32 0, i32 0
  store i8* %call90, i8** %coerce.dive95, align 8
  %35 = bitcast %"class.thrust::device_vector"* %d_keys to %"class.thrust::detail::vector_base.54"*
  %call98 = invoke i8* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE3endEv(%"class.thrust::detail::vector_base.54"* %35)
          to label %invoke.cont97 unwind label %lpad52

invoke.cont97:                                    ; preds = %invoke.cont89
  %coerce.dive99 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp96, i32 0, i32 0
  %coerce.dive100 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive99, i32 0, i32 0
  %coerce.dive101 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive100, i32 0, i32 0
  %coerce.dive102 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive101, i32 0, i32 0
  %coerce.dive103 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive102, i32 0, i32 0
  store i8* %call98, i8** %coerce.dive103, align 8
  %36 = bitcast %"class.thrust::device_vector.61"* %d_pairs to %"class.thrust::detail::vector_base.62"*
  %call106 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.62"* %36)
          to label %invoke.cont105 unwind label %lpad52

invoke.cont105:                                   ; preds = %invoke.cont97
  %coerce.dive107 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp104, i32 0, i32 0
  %coerce.dive108 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive107, i32 0, i32 0
  %coerce.dive109 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive108, i32 0, i32 0
  %coerce.dive110 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive109, i32 0, i32 0
  %coerce.dive111 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive110, i32 0, i32 0
  store %"struct.thrust::pair"* %call106, %"struct.thrust::pair"** %coerce.dive111, align 8
  %37 = bitcast %"class.thrust::device_vector.61"* %d_pairs to %"class.thrust::detail::vector_base.62"*
  %call114 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.62"* %37)
          to label %invoke.cont113 unwind label %lpad52

invoke.cont113:                                   ; preds = %invoke.cont105
  %coerce.dive115 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp112, i32 0, i32 0
  %coerce.dive116 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive115, i32 0, i32 0
  %coerce.dive117 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive116, i32 0, i32 0
  %coerce.dive118 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive117, i32 0, i32 0
  %coerce.dive119 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive118, i32 0, i32 0
  store %"struct.thrust::pair"* %call114, %"struct.thrust::pair"** %coerce.dive119, align 8
  %38 = bitcast %"struct.thrust::pair"* %agg.tmp120 to i8*
  %39 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %38, i8* %39, i64 2, i32 1, i1 false), !tbaa.struct !23
  %coerce.dive123 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp88, i32 0, i32 0
  %coerce.dive124 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive123, i32 0, i32 0
  %coerce.dive125 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive124, i32 0, i32 0
  %coerce.dive126 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive125, i32 0, i32 0
  %coerce.dive127 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive126, i32 0, i32 0
  %40 = load i8*, i8** %coerce.dive127, align 8
  %coerce.dive128 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp96, i32 0, i32 0
  %coerce.dive129 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive128, i32 0, i32 0
  %coerce.dive130 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive129, i32 0, i32 0
  %coerce.dive131 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive130, i32 0, i32 0
  %coerce.dive132 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive131, i32 0, i32 0
  %41 = load i8*, i8** %coerce.dive132, align 8
  %coerce.dive133 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp104, i32 0, i32 0
  %coerce.dive134 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive133, i32 0, i32 0
  %coerce.dive135 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive134, i32 0, i32 0
  %coerce.dive136 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive135, i32 0, i32 0
  %coerce.dive137 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive136, i32 0, i32 0
  %42 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive137, align 8
  %coerce.dive138 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp112, i32 0, i32 0
  %coerce.dive139 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive138, i32 0, i32 0
  %coerce.dive140 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive139, i32 0, i32 0
  %coerce.dive141 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive140, i32 0, i32 0
  %coerce.dive142 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive141, i32 0, i32 0
  %43 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive142, align 8
  %44 = bitcast %"struct.thrust::pair"* %agg.tmp120 to i16*
  %45 = load i16, i16* %44, align 1
  %call144 = invoke %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIaEEEENS2_INS3_INS_4pairIaaEEEEEES9_S7_NS_8equal_toIaEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_(i8* %40, i8* %41, %"struct.thrust::pair"* %42, %"struct.thrust::pair"* %43, i16 %45)
          to label %invoke.cont143 unwind label %lpad52

invoke.cont143:                                   ; preds = %invoke.cont113
  %coerce.dive146 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %coerce145, i32 0, i32 0
  %coerce.dive147 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive146, i32 0, i32 0
  %coerce.dive148 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive147, i32 0, i32 0
  %coerce.dive149 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive148, i32 0, i32 0
  %coerce.dive150 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive149, i32 0, i32 0
  store %"struct.thrust::pair"* %call144, %"struct.thrust::pair"** %coerce.dive150, align 8
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp152) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp151, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.22, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp152)
          to label %invoke.cont154 unwind label %lpad153

invoke.cont154:                                   ; preds = %invoke.cont143
  invoke void @_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIaaEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi(%"class.thrust::host_vector.45"* dereferenceable(32) %h_pairs, %"class.thrust::device_vector.61"* dereferenceable(32) %d_pairs, %"class.std::basic_string"* dereferenceable(8) %ref.tmp151, i32 57)
          to label %invoke.cont156 unwind label %lpad155

invoke.cont156:                                   ; preds = %invoke.cont154
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp151) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp152) #5
  %46 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.lifetime.end(i64 2, i8* %46) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.54"*)* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev to void (%"class.thrust::device_vector"*)*)(%"class.thrust::device_vector"* %d_keys) #5
  %47 = bitcast %"class.thrust::device_vector"* %d_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %47) #5
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %h_keys) #5
  %48 = bitcast %"class.thrust::host_vector"* %h_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %48) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.62"*)* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev to void (%"class.thrust::device_vector.61"*)*)(%"class.thrust::device_vector.61"* %d_pairs) #5
  %49 = bitcast %"class.thrust::device_vector.61"* %d_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %49) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.54"*)* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev to void (%"class.thrust::device_vector"*)*)(%"class.thrust::device_vector"* %d_p2) #5
  %50 = bitcast %"class.thrust::device_vector"* %d_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %50) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.54"*)* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev to void (%"class.thrust::device_vector"*)*)(%"class.thrust::device_vector"* %d_p1) #5
  %51 = bitcast %"class.thrust::device_vector"* %d_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %51) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.46"*)* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EED2Ev to void (%"class.thrust::host_vector.45"*)*)(%"class.thrust::host_vector.45"* %h_pairs) #5
  %52 = bitcast %"class.thrust::host_vector.45"* %h_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %52) #5
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %h_p2) #5
  %53 = bitcast %"class.thrust::host_vector"* %h_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %53) #5
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %h_p1) #5
  %54 = bitcast %"class.thrust::host_vector"* %h_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %54) #5
  ret void

lpad:                                             ; preds = %entry
  %55 = landingpad { i8*, i32 }
          cleanup
  %56 = extractvalue { i8*, i32 } %55, 0
  store i8* %56, i8** %exn.slot, align 8
  %57 = extractvalue { i8*, i32 } %55, 1
  store i32 %57, i32* %ehselector.slot, align 4
  br label %ehcleanup172

lpad2:                                            ; preds = %invoke.cont
  %58 = landingpad { i8*, i32 }
          cleanup
  %59 = extractvalue { i8*, i32 } %58, 0
  store i8* %59, i8** %exn.slot, align 8
  %60 = extractvalue { i8*, i32 } %58, 1
  store i32 %60, i32* %ehselector.slot, align 4
  br label %ehcleanup170

lpad4:                                            ; preds = %invoke.cont31, %invoke.cont18, %invoke.cont13, %invoke.cont8, %invoke.cont5, %invoke.cont3
  %61 = landingpad { i8*, i32 }
          cleanup
  %62 = extractvalue { i8*, i32 } %61, 0
  store i8* %62, i8** %exn.slot, align 8
  %63 = extractvalue { i8*, i32 } %61, 1
  store i32 %63, i32* %ehselector.slot, align 4
  br label %ehcleanup168

lpad36:                                           ; preds = %invoke.cont35
  %64 = landingpad { i8*, i32 }
          cleanup
  %65 = extractvalue { i8*, i32 } %64, 0
  store i8* %65, i8** %exn.slot, align 8
  %66 = extractvalue { i8*, i32 } %64, 1
  store i32 %66, i32* %ehselector.slot, align 4
  br label %ehcleanup166

lpad38:                                           ; preds = %invoke.cont37
  %67 = landingpad { i8*, i32 }
          cleanup
  %68 = extractvalue { i8*, i32 } %67, 0
  store i8* %68, i8** %exn.slot, align 8
  %69 = extractvalue { i8*, i32 } %67, 1
  store i32 %69, i32* %ehselector.slot, align 4
  br label %ehcleanup164

lpad40:                                           ; preds = %invoke.cont39
  %70 = landingpad { i8*, i32 }
          cleanup
  %71 = extractvalue { i8*, i32 } %70, 0
  store i8* %71, i8** %exn.slot, align 8
  %72 = extractvalue { i8*, i32 } %70, 1
  store i32 %72, i32* %ehselector.slot, align 4
  br label %ehcleanup162

lpad42:                                           ; preds = %invoke.cont41
  %73 = landingpad { i8*, i32 }
          cleanup
  %74 = extractvalue { i8*, i32 } %73, 0
  store i8* %74, i8** %exn.slot, align 8
  %75 = extractvalue { i8*, i32 } %73, 1
  store i32 %75, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %ref.tmp) #5
  br label %ehcleanup162

lpad44:                                           ; preds = %invoke.cont43
  %76 = landingpad { i8*, i32 }
          cleanup
  %77 = extractvalue { i8*, i32 } %76, 0
  store i8* %77, i8** %exn.slot, align 8
  %78 = extractvalue { i8*, i32 } %76, 1
  store i32 %78, i32* %ehselector.slot, align 4
  br label %ehcleanup160

lpad47:                                           ; preds = %invoke.cont48, %invoke.cont45
  %79 = landingpad { i8*, i32 }
          cleanup
  %80 = extractvalue { i8*, i32 } %79, 0
  store i8* %80, i8** %exn.slot, align 8
  %81 = extractvalue { i8*, i32 } %79, 1
  store i32 %81, i32* %ehselector.slot, align 4
  br label %ehcleanup158

lpad52:                                           ; preds = %invoke.cont113, %invoke.cont105, %invoke.cont97, %invoke.cont89, %invoke.cont83, %invoke.cont68, %invoke.cont63, %invoke.cont58, %invoke.cont53, %invoke.cont50
  %82 = landingpad { i8*, i32 }
          cleanup
  %83 = extractvalue { i8*, i32 } %82, 0
  store i8* %83, i8** %exn.slot, align 8
  %84 = extractvalue { i8*, i32 } %82, 1
  store i32 %84, i32* %ehselector.slot, align 4
  br label %ehcleanup157

lpad153:                                          ; preds = %invoke.cont143
  %85 = landingpad { i8*, i32 }
          cleanup
  %86 = extractvalue { i8*, i32 } %85, 0
  store i8* %86, i8** %exn.slot, align 8
  %87 = extractvalue { i8*, i32 } %85, 1
  store i32 %87, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad155:                                          ; preds = %invoke.cont154
  %88 = landingpad { i8*, i32 }
          cleanup
  %89 = extractvalue { i8*, i32 } %88, 0
  store i8* %89, i8** %exn.slot, align 8
  %90 = extractvalue { i8*, i32 } %88, 1
  store i32 %90, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp151) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad155, %lpad153
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp152) #5
  br label %ehcleanup157

ehcleanup157:                                     ; preds = %ehcleanup, %lpad52
  %91 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.lifetime.end(i64 2, i8* %91) #5
  br label %ehcleanup158

ehcleanup158:                                     ; preds = %ehcleanup157, %lpad47
  call void bitcast (void (%"class.thrust::detail::vector_base.54"*)* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev to void (%"class.thrust::device_vector"*)*)(%"class.thrust::device_vector"* %d_keys) #5
  %92 = bitcast %"class.thrust::device_vector"* %d_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %92) #5
  br label %ehcleanup160

ehcleanup160:                                     ; preds = %ehcleanup158, %lpad44
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %h_keys) #5
  %93 = bitcast %"class.thrust::host_vector"* %h_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %93) #5
  br label %ehcleanup162

ehcleanup162:                                     ; preds = %ehcleanup160, %lpad42, %lpad40
  call void bitcast (void (%"class.thrust::detail::vector_base.62"*)* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev to void (%"class.thrust::device_vector.61"*)*)(%"class.thrust::device_vector.61"* %d_pairs) #5
  %94 = bitcast %"class.thrust::device_vector.61"* %d_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %94) #5
  br label %ehcleanup164

ehcleanup164:                                     ; preds = %ehcleanup162, %lpad38
  call void bitcast (void (%"class.thrust::detail::vector_base.54"*)* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev to void (%"class.thrust::device_vector"*)*)(%"class.thrust::device_vector"* %d_p2) #5
  %95 = bitcast %"class.thrust::device_vector"* %d_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %95) #5
  br label %ehcleanup166

ehcleanup166:                                     ; preds = %ehcleanup164, %lpad36
  call void bitcast (void (%"class.thrust::detail::vector_base.54"*)* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev to void (%"class.thrust::device_vector"*)*)(%"class.thrust::device_vector"* %d_p1) #5
  %96 = bitcast %"class.thrust::device_vector"* %d_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %96) #5
  br label %ehcleanup168

ehcleanup168:                                     ; preds = %ehcleanup166, %lpad4
  call void bitcast (void (%"class.thrust::detail::vector_base.46"*)* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EED2Ev to void (%"class.thrust::host_vector.45"*)*)(%"class.thrust::host_vector.45"* %h_pairs) #5
  %97 = bitcast %"class.thrust::host_vector.45"* %h_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %97) #5
  br label %ehcleanup170

ehcleanup170:                                     ; preds = %ehcleanup168, %lpad2
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %h_p2) #5
  %98 = bitcast %"class.thrust::host_vector"* %h_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %98) #5
  br label %ehcleanup172

ehcleanup172:                                     ; preds = %ehcleanup170, %lpad
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %h_p1) #5
  %99 = bitcast %"class.thrust::host_vector"* %h_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %99) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup172
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val174 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val174
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeysLj1EEclImEEvT_(%"struct.unittest::for_each_type.41"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::for_each_type.41"*, align 8
  %n.addr = alloca i64, align 8
  %f = alloca %struct.TestPairScanByKey.467, align 1
  %loop = alloca %"struct.unittest::for_each_type.468", align 1
  store %"struct.unittest::for_each_type.41"* %this, %"struct.unittest::for_each_type.41"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"struct.unittest::for_each_type.41"*, %"struct.unittest::for_each_type.41"** %this.addr, align 8
  %0 = bitcast %struct.TestPairScanByKey.467* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN17TestPairScanByKeyIsEclEm(%struct.TestPairScanByKey.467* %f, i64 %1)
  %2 = bitcast %"struct.unittest::for_each_type.468"* %loop to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyiLj2EEclImEEvT_(%"struct.unittest::for_each_type.468"* %loop, i64 %3)
  %4 = bitcast %"struct.unittest::for_each_type.468"* %loop to i8*
  call void @llvm.lifetime.end(i64 1, i8* %4) #5
  %5 = bitcast %struct.TestPairScanByKey.467* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %5) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest15random_integersIaEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector"* noalias sret %agg.result, i64 %N) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %N.addr = alloca i64, align 8
  %nrvo = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp1 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp6 = alloca %"struct.unittest::random_integer", align 1
  %coerce = alloca %"class.thrust::detail::normal_iterator", align 8
  store i64 %N, i64* %N.addr, align 8, !tbaa !13
  store i1 false, i1* %nrvo, align 1
  %0 = load i64, i64* %N.addr, align 8, !tbaa !13
  call void @_ZN6thrust11host_vectorIaSaIaEEC2Em(%"class.thrust::host_vector"* %agg.result, i64 %0)
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp, i64 0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %1 = load i64, i64* %N.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp1, i64 %1)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %2 = bitcast %"class.thrust::host_vector"* %agg.result to %"class.thrust::detail::vector_base"*
  %call = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive5, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive7, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive8, align 8
  %call10 = invoke i8* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp1, i8* %3)
          to label %invoke.cont9 unwind label %lpad

invoke.cont9:                                     ; preds = %invoke.cont4
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %coerce, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive11, i32 0, i32 0
  store i8* %call10, i8** %coerce.dive12, align 8
  store i1 true, i1* %nrvo, align 1
  %nrvo.val = load i1, i1* %nrvo, align 1
  br i1 %nrvo.val, label %nrvo.skipdtor, label %nrvo.unused

lpad:                                             ; preds = %invoke.cont4, %invoke.cont2, %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %agg.result) #5
  br label %eh.resume

nrvo.unused:                                      ; preds = %invoke.cont9
  call void bitcast (void (%"class.thrust::detail::vector_base"*)* @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev to void (%"class.thrust::host_vector"*)*)(%"class.thrust::host_vector"* %agg.result) #5
  br label %nrvo.skipdtor

nrvo.skipdtor:                                    ; preds = %nrvo.unused, %invoke.cont9
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorINS_4pairIaaEESaIS2_EEC2Em(%"class.thrust::host_vector.45"* %this, i64 %n) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.45"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::host_vector.45"* %this, %"class.thrust::host_vector.45"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::host_vector.45"*, %"class.thrust::host_vector.45"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.45"* %this1 to %"class.thrust::detail::vector_base.46"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEC2Em(%"class.thrust::detail::vector_base.46"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust9transformINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_(i8* %first1.coerce, i8* %last1.coerce, i8* %first2.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp11 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive2, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive4, i32 0, i32 0
  store i8* %first2.coerce, i8** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %3, %"struct.thrust::execution_policy.88"* dereferenceable(1) %4, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %7 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp8 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp9 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"class.thrust::detail::normal_iterator.51"* %agg.tmp10 to i8*
  %14 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive12, i32 0, i32 0
  %15 = load i8*, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive14, i32 0, i32 0
  %16 = load i8*, i8** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive16, i32 0, i32 0
  %17 = load i8*, i8** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive18, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair"* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPaEES8_NS6_IPNS_4pairIaaEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6, i8* %15, i8* %16, i8* %17, %"struct.thrust::pair"* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive21, i32 0, i32 0
  store %"struct.thrust::pair"* %call20, %"struct.thrust::pair"** %coerce.dive22, align 8
  %19 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %19) #5
  %20 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %20) #5
  %21 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %21) #5
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive23, i32 0, i32 0
  %22 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive24, align 8
  ret %"struct.thrust::pair"* %22
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  %call = call i8* @_ZN6thrust6detail18contiguous_storageIaSaIaEE5beginEv(%"class.thrust::detail::contiguous_storage"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive3, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail11vector_baseIaSaIaEE3endEv(%"class.thrust::detail::vector_base"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %call = call i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE4sizeEv(%"class.thrust::detail::vector_base"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive4, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.47"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive3, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust13device_vectorIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector"* %this, %"class.thrust::host_vector"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_vector"*, align 8
  %v.addr = alloca %"class.thrust::host_vector"*, align 8
  store %"class.thrust::device_vector"* %this, %"class.thrust::device_vector"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector"* %v, %"class.thrust::host_vector"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_vector"*, %"class.thrust::device_vector"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_vector"* %this1 to %"class.thrust::detail::vector_base.54"*
  %1 = load %"class.thrust::host_vector"*, %"class.thrust::host_vector"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector"* %1 to %"class.thrust::detail::vector_base"*
  call void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.54"* %0, %"class.thrust::detail::vector_base"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust13device_vectorINS_4pairIaaEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.61"* %this, %"class.thrust::host_vector.45"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_vector.61"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.45"*, align 8
  store %"class.thrust::device_vector.61"* %this, %"class.thrust::device_vector.61"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.45"* %v, %"class.thrust::host_vector.45"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_vector.61"*, %"class.thrust::device_vector.61"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_vector.61"* %this1 to %"class.thrust::detail::vector_base.62"*
  %1 = load %"class.thrust::host_vector.45"*, %"class.thrust::host_vector.45"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.45"* %1 to %"class.thrust::detail::vector_base.46"*
  call void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.62"* %0, %"class.thrust::detail::vector_base.46"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest15random_integersIbEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.73"* noalias sret %agg.result, i64 %N) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %N.addr = alloca i64, align 8
  %nrvo = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp1 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %agg.tmp6 = alloca %"struct.unittest::random_integer.176", align 1
  %coerce = alloca %"class.thrust::detail::normal_iterator.79", align 8
  store i64 %N, i64* %N.addr, align 8, !tbaa !13
  store i1 false, i1* %nrvo, align 1
  %0 = load i64, i64* %N.addr, align 8, !tbaa !13
  call void @_ZN6thrust11host_vectorIbSaIbEEC2Em(%"class.thrust::host_vector.73"* %agg.result, i64 %0)
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp, i64 0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %1 = load i64, i64* %N.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp1, i64 %1)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %2 = bitcast %"class.thrust::host_vector.73"* %agg.result to %"class.thrust::detail::vector_base.74"*
  %call = invoke i8* @_ZN6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive5, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive7, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive8, align 8
  %call10 = invoke i8* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp1, i8* %3)
          to label %invoke.cont9 unwind label %lpad

invoke.cont9:                                     ; preds = %invoke.cont4
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %coerce, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive11, i32 0, i32 0
  store i8* %call10, i8** %coerce.dive12, align 8
  store i1 true, i1* %nrvo, align 1
  %nrvo.val = load i1, i1* %nrvo, align 1
  br i1 %nrvo.val, label %nrvo.skipdtor, label %nrvo.unused

lpad:                                             ; preds = %invoke.cont4, %invoke.cont2, %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %agg.result) #5
  br label %eh.resume

nrvo.unused:                                      ; preds = %invoke.cont9
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %agg.result) #5
  br label %nrvo.skipdtor

nrvo.skipdtor:                                    ; preds = %nrvo.unused, %invoke.cont9
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorIaSaIaEEC2IbSaIbEEERKNS0_IT_T0_EE(%"class.thrust::host_vector"* %this, %"class.thrust::host_vector.73"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.73"*, align 8
  store %"class.thrust::host_vector"* %this, %"class.thrust::host_vector"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.73"* %v, %"class.thrust::host_vector.73"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::host_vector"*, %"class.thrust::host_vector"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector"* %this1 to %"class.thrust::detail::vector_base"*
  %1 = load %"class.thrust::host_vector.73"*, %"class.thrust::host_vector.73"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.73"* %1 to %"class.thrust::detail::vector_base.74"*
  call void @_ZN6thrust6detail11vector_baseIaSaIaEEC2IbSaIbEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base"* %0, %"class.thrust::detail::vector_base.74"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev(%"class.thrust::detail::vector_base.74"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.79", align 8
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  %call = invoke i8* @_ZN6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %call5 = invoke i8* @_ZN6thrust6detail11vector_baseIbSaIbEE3endEv(%"class.thrust::detail::vector_base.74"* %this1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp3, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive6, i32 0, i32 0
  store i8* %call5, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive8, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp3, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive10, i32 0, i32 0
  %1 = load i8*, i8** %coerce.dive11, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIbSaIbEE7destroyENS0_15normal_iteratorIPbEES6_(%"class.thrust::detail::contiguous_storage.75"* %m_storage, i8* %0, i8* %1)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont4
  %m_storage13 = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIbSaIbEED2Ev(%"class.thrust::detail::contiguous_storage.75"* %m_storage13) #5
  ret void

lpad:                                             ; preds = %invoke.cont4, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage14 = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIbSaIbEED2Ev(%"class.thrust::detail::contiguous_storage.75"* %m_storage14) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %x, i32 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %x.addr = alloca i32, align 4
  %y.addr = alloca i32, align 4
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  store i32 %y, i32* %y.addr, align 4, !tbaa !11
  call void @_ZN6thrust4pairIiiEC2ERKiS3_(%"struct.thrust::pair.82"* %retval, i32* dereferenceable(4) %x.addr, i32* dereferenceable(4) %y.addr)
  %0 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %1 = load i64, i64* %0, align 4
  ret i64 %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIaaEC2IiiEERKNS0_IT_T0_EE(%"struct.thrust::pair"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair"* %this, %"struct.thrust::pair"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 0, i32 0
  %1 = load i32, i32* %first2, align 4, !tbaa !24
  %conv = trunc i32 %1 to i8
  store i8 %conv, i8* %first, align 1, !tbaa !26
  %second = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %2, i32 0, i32 1
  %3 = load i32, i32* %second3, align 4, !tbaa !28
  %conv4 = trunc i32 %3 to i8
  store i8 %conv4, i8* %second, align 1, !tbaa !29
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPaEENS2_IPNS_4pairIaaEEEES8_S6_NS_8equal_toIaEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_(i8* %first1.coerce, i8* %last1.coerce, %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i16 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %init = alloca %"struct.thrust::pair", align 1
  %binary_pred = alloca %"struct.thrust::equal_to", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp12 = alloca %"struct.thrust::pair", align 1
  %agg.tmp13 = alloca %"struct.thrust::equal_to", align 1
  %agg.tmp14 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive2, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::pair"* %init to i16*
  store i16 %init.coerce, i16* %0, align 1
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %4, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5, %"struct.thrust::execution_policy.88"* dereferenceable(1) %6)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %8 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp9 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.51"* %agg.tmp10 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.51"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.51"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::pair"* %agg.tmp12 to i8*
  %17 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 2, i32 1, i1 false), !tbaa.struct !23
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive15, i32 0, i32 0
  %18 = load i8*, i8** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp9, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive17, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp10, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive19, i32 0, i32 0
  %20 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive20, align 8
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp11, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive21, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  %22 = bitcast %"struct.thrust::pair"* %agg.tmp12 to i16*
  %23 = load i16, i16* %22, align 1
  %call23 = call %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPaEENS6_IPNS_4pairIaaEEEESC_SA_NS_8equal_toIaEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %7, i8* %18, i8* %19, %"struct.thrust::pair"* %20, %"struct.thrust::pair"* %21, i16 %23)
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive24, i32 0, i32 0
  store %"struct.thrust::pair"* %call23, %"struct.thrust::pair"** %coerce.dive25, align 8
  %24 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %24) #5
  %25 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %25) #5
  %26 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %26) #5
  %coerce.dive26 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive26, i32 0, i32 0
  %27 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  ret %"struct.thrust::pair"* %27
}

; Function Attrs: argmemonly nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) #2

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIaEEEENS2_INS3_INS_4pairIaaEEEEEES9_S7_NS_8equal_toIaEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_(i8* %first1.coerce, i8* %last1.coerce, %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i16 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %init = alloca %"struct.thrust::pair", align 1
  %binary_pred = alloca %"struct.thrust::equal_to", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %system1 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp23 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp24 = alloca %"struct.thrust::pair", align 1
  %agg.tmp25 = alloca %"struct.thrust::equal_to", align 1
  %agg.tmp26 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair"* %init to i16*
  store i16 %init.coerce, i16* %0, align 1
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %4 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to %"struct.thrust::execution_policy.120"*
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to %"struct.thrust::execution_policy.120"*
  %6 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to %"struct.thrust::execution_policy.120"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.120"* dereferenceable(1) %4, %"struct.thrust::execution_policy.120"* dereferenceable(1) %5, %"struct.thrust::execution_policy.120"* dereferenceable(1) %6)
  %7 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.56"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp21 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.56"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp22 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.66"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp23 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::pair"* %agg.tmp24 to i8*
  %17 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 2, i32 1, i1 false), !tbaa.struct !23
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive30, i32 0, i32 0
  %18 = load i8*, i8** %coerce.dive31, align 8
  %coerce.dive32 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp21, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive35, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp22, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive40, i32 0, i32 0
  %20 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive41, align 8
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp23, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive45, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive46, align 8
  %22 = bitcast %"struct.thrust::pair"* %agg.tmp24 to i16*
  %23 = load i16, i16* %22, align 1
  %call47 = call %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS6_INS7_INS_4pairIaaEEEEEESD_SB_NS_8equal_toIaEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %7, i8* %18, i8* %19, %"struct.thrust::pair"* %20, %"struct.thrust::pair"* %21, i16 %23)
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive50, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive51, i32 0, i32 0
  store %"struct.thrust::pair"* %call47, %"struct.thrust::pair"** %coerce.dive52, align 8
  %24 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %24) #5
  %25 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %25) #5
  %26 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %26) #5
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive56, i32 0, i32 0
  %27 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive57, align 8
  ret %"struct.thrust::pair"* %27
}

; Function Attrs: nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::vector_base.54"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 0
  %call = call i8* @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::contiguous_storage.55"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  store i8* %call, i8** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive9, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive10, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE3endEv(%"class.thrust::detail::vector_base.54"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %call = call i8* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::vector_base.54"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  store i8* %call, i8** %coerce.dive5, align 8
  %call6 = call i64 @_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE4sizeEv(%"class.thrust::detail::vector_base.54"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %retval, i64 %call6)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive10, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive11, align 8
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.62"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.63"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive9, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIaaEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi(%"class.thrust::host_vector.45"* dereferenceable(32) %a, %"class.thrust::device_vector.61"* dereferenceable(32) %b, %"class.std::basic_string"* dereferenceable(8) %filename, i32 %lineno) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %a.addr = alloca %"class.thrust::host_vector.45"*, align 8
  %b.addr = alloca %"class.thrust::device_vector.61"*, align 8
  %filename.addr = alloca %"class.std::basic_string"*, align 8
  %lineno.addr = alloca i32, align 4
  %f = alloca %"class.unittest::UnitTestFailure", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.thrust::host_vector.45"* %a, %"class.thrust::host_vector.45"** %a.addr, align 8, !tbaa !7
  store %"class.thrust::device_vector.61"* %b, %"class.thrust::device_vector.61"** %b.addr, align 8, !tbaa !7
  store %"class.std::basic_string"* %filename, %"class.std::basic_string"** %filename.addr, align 8, !tbaa !7
  store i32 %lineno, i32* %lineno.addr, align 4, !tbaa !11
  %0 = load %"class.thrust::host_vector.45"*, %"class.thrust::host_vector.45"** %a.addr, align 8
  %1 = bitcast %"class.thrust::host_vector.45"* %0 to %"class.thrust::detail::vector_base.46"*
  %2 = load %"class.thrust::device_vector.61"*, %"class.thrust::device_vector.61"** %b.addr, align 8
  %3 = bitcast %"class.thrust::device_vector.61"* %2 to %"class.thrust::detail::vector_base.62"*
  %call = call zeroext i1 @_ZN6thrusteqINS_4pairIaaEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE(%"class.thrust::detail::vector_base.46"* dereferenceable(32) %1, %"class.thrust::detail::vector_base.62"* dereferenceable(32) %3)
  br i1 %call, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  %4 = bitcast %"class.unittest::UnitTestFailure"* %f to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  call void @_ZN8unittest15UnitTestFailureC2Ev(%"class.unittest::UnitTestFailure"* %f)
  %5 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call1 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_(%"class.unittest::UnitTestException"* %5, [2 x i8]* dereferenceable(2) @.str.45)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %6 = load %"class.std::basic_string"*, %"class.std::basic_string"** %filename.addr, align 8
  %call3 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_(%"class.unittest::UnitTestException"* %call1, %"class.std::basic_string"* dereferenceable(8) %6)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call3, [2 x i8]* dereferenceable(2) @.str.46)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %call7 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIiEERS0_RKT_(%"class.unittest::UnitTestException"* %call5, i32* dereferenceable(4) %lineno.addr)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont4
  %call9 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call7, [3 x i8]* dereferenceable(3) @.str.47)
          to label %invoke.cont8 unwind label %lpad

invoke.cont8:                                     ; preds = %invoke.cont6
  %7 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call11 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA22_cEERS0_RKT_(%"class.unittest::UnitTestException"* %7, [22 x i8]* dereferenceable(22) @.str.48)
          to label %invoke.cont10 unwind label %lpad

invoke.cont10:                                    ; preds = %invoke.cont8
  %8 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call13 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA9_cEERS0_RKT_(%"class.unittest::UnitTestException"* %8, [9 x i8]* dereferenceable(9) @.str.49)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont10
  invoke void @_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIaaEESaIS4_EEEEESsv(%"class.std::basic_string"* sret %ref.tmp)
          to label %invoke.cont14 unwind label %lpad

invoke.cont14:                                    ; preds = %invoke.cont12
  %call17 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_(%"class.unittest::UnitTestException"* %call13, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont16 unwind label %lpad15

invoke.cont16:                                    ; preds = %invoke.cont14
  %call19 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call17, [3 x i8]* dereferenceable(3) @.str.50)
          to label %invoke.cont18 unwind label %lpad15

invoke.cont18:                                    ; preds = %invoke.cont16
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %9 = bitcast i8* %exception to %"class.unittest::UnitTestFailure"*
  call void @_ZN8unittest15UnitTestFailureC2EOS0_(%"class.unittest::UnitTestFailure"* %9, %"class.unittest::UnitTestFailure"* dereferenceable(8) %f) #5
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN8unittest15UnitTestFailureE to i8*), i8* bitcast (void (%"class.unittest::UnitTestException"*)* @_ZN8unittest17UnitTestExceptionD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad

lpad:                                             ; preds = %invoke.cont18, %invoke.cont12, %invoke.cont10, %invoke.cont8, %invoke.cont6, %invoke.cont4, %invoke.cont2, %invoke.cont, %if.then
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad15:                                           ; preds = %invoke.cont16, %invoke.cont14
  %13 = landingpad { i8*, i32 }
          cleanup
  %14 = extractvalue { i8*, i32 } %13, 0
  store i8* %14, i8** %exn.slot, align 8
  %15 = extractvalue { i8*, i32 } %13, 1
  store i32 %15, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad15, %lpad
  call void bitcast (void (%"class.unittest::UnitTestException"*)* @_ZN8unittest17UnitTestExceptionD2Ev to void (%"class.unittest::UnitTestFailure"*)*)(%"class.unittest::UnitTestFailure"* %f) #5
  %16 = bitcast %"class.unittest::UnitTestFailure"* %f to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  ret void

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val21 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val21

unreachable:                                      ; preds = %invoke.cont18
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEED2Ev(%"class.thrust::detail::vector_base.54"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp6 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 0
  %call = invoke i8* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::vector_base.54"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  store i8* %call, i8** %coerce.dive5, align 8
  %call8 = invoke i8* @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE3endEv(%"class.thrust::detail::vector_base.54"* %this1)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %invoke.cont
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp6, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive12, i32 0, i32 0
  store i8* %call8, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive17, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp6, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive22, i32 0, i32 0
  %1 = load i8*, i8** %coerce.dive23, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE7destroyENS0_15normal_iteratorINS_10device_ptrIaEEEES8_(%"class.thrust::detail::contiguous_storage.55"* %m_storage, i8* %0, i8* %1)
          to label %invoke.cont24 unwind label %lpad

invoke.cont24:                                    ; preds = %invoke.cont7
  %m_storage25 = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEED2Ev(%"class.thrust::detail::contiguous_storage.55"* %m_storage25) #5
  ret void

lpad:                                             ; preds = %invoke.cont7, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage26 = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEED2Ev(%"class.thrust::detail::contiguous_storage.55"* %m_storage26) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaSaIaEED2Ev(%"class.thrust::detail::vector_base"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator", align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  %call = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %call5 = invoke i8* @_ZN6thrust6detail11vector_baseIaSaIaEE3endEv(%"class.thrust::detail::vector_base"* %this1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp3, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive6, i32 0, i32 0
  store i8* %call5, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive8, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp3, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive10, i32 0, i32 0
  %1 = load i8*, i8** %coerce.dive11, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaSaIaEE7destroyENS0_15normal_iteratorIPaEES6_(%"class.thrust::detail::contiguous_storage"* %m_storage, i8* %0, i8* %1)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont4
  %m_storage13 = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEED2Ev(%"class.thrust::detail::contiguous_storage"* %m_storage13) #5
  ret void

lpad:                                             ; preds = %invoke.cont4, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage14 = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEED2Ev(%"class.thrust::detail::contiguous_storage"* %m_storage14) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::vector_base.62"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp6 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  %call = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.62"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive5, align 8
  %call8 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE3endEv(%"class.thrust::detail::vector_base.62"* %this1)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %invoke.cont
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp6, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair"* %call8, %"struct.thrust::pair"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive17, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp6, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive22, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.63"* %m_storage, %"struct.thrust::pair"* %0, %"struct.thrust::pair"* %1)
          to label %invoke.cont24 unwind label %lpad

invoke.cont24:                                    ; preds = %invoke.cont7
  %m_storage25 = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.63"* %m_storage25) #5
  ret void

lpad:                                             ; preds = %invoke.cont7, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage26 = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.63"* %m_storage26) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EED2Ev(%"class.thrust::detail::vector_base.46"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  %call = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %call5 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.46"* %this1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp3, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %call5, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive8, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp3, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive10, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_(%"class.thrust::detail::contiguous_storage.47"* %m_storage, %"struct.thrust::pair"* %0, %"struct.thrust::pair"* %1)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont4
  %m_storage13 = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.47"* %m_storage13) #5
  ret void

lpad:                                             ; preds = %invoke.cont4, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage14 = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.47"* %m_storage14) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorIaSaIaEEC2Em(%"class.thrust::host_vector"* %this, i64 %n) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::host_vector"* %this, %"class.thrust::host_vector"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::host_vector"*, %"class.thrust::host_vector"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector"* %this1 to %"class.thrust::detail::vector_base"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail11vector_baseIaSaIaEEC2Em(%"class.thrust::detail::vector_base"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator", align 8
  %result = alloca %"class.thrust::detail::normal_iterator", align 8
  %op = alloca %"struct.unittest::random_integer", align 1
  %system1 = alloca %"struct.thrust::any_system_tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp2 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp4 = alloca %"struct.unittest::random_integer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive1, align 8
  %0 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::any_system_tag"* %system1 to %"struct.thrust::execution_policy.89"*
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS_14any_system_tagENS0_3cpp6detail3tagEEERNS_6detail17enable_if_definedINS8_14minimum_systemIT_T0_NS8_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyISB_EERNSJ_ISC_EE(%"struct.thrust::execution_policy.89"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %5 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp3, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive5, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive6, align 8
  %call7 = call i8* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp2, i8* %7)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive8, i32 0, i32 0
  store i8* %call7, i8** %coerce.dive9, align 8
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %8) #5
  %9 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %9) #5
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive10, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive11, align 8
  ret i8* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %this, i64 %x) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %x.addr = alloca i64, align 8
  store %"class.thrust::counting_iterator"* %this, %"class.thrust::counting_iterator"** %this.addr, align 8, !tbaa !1
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::counting_iterator"* %this1 to %"class.thrust::iterator_adaptor.83"*
  call void @_ZN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxEC2ERKm(%"class.thrust::iterator_adaptor.83"* %0, i64* dereferenceable(8) %x.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaSaIaEEC2Em(%"class.thrust::detail::vector_base"* %this, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.std::allocator.42", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  call void @_ZNSaIaEC2Ev(%"class.std::allocator.42"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageIaSaIaEEC2ERKS2_(%"class.thrust::detail::contiguous_storage"* %m_storage, %"class.std::allocator.42"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.43"*)* @_ZN9__gnu_cxx13new_allocatorIaED2Ev to void (%"class.std::allocator.42"*)*)(%"class.std::allocator.42"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !30
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail11vector_baseIaSaIaEE12default_initEm(%"class.thrust::detail::vector_base"* %this1, i64 %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.43"*)* @_ZN9__gnu_cxx13new_allocatorIaED2Ev to void (%"class.std::allocator.42"*)*)(%"class.std::allocator.42"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEED2Ev(%"class.thrust::detail::contiguous_storage"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIaEC2Ev(%"class.std::allocator.42"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.42"*, align 8
  store %"class.std::allocator.42"* %this, %"class.std::allocator.42"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.42"* %this1 to %"class.__gnu_cxx::new_allocator.43"*
  call void @_ZN9__gnu_cxx13new_allocatorIaEC2Ev(%"class.__gnu_cxx::new_allocator.43"* %0) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaSaIaEEC2ERKS2_(%"class.thrust::detail::contiguous_storage"* %this, %"class.std::allocator.42"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %alloc.addr = alloca %"class.std::allocator.42"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.42"* %alloc, %"class.std::allocator.42"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %alloc.addr, align 8
  call void @_ZNSaIaEC2ERKS_(%"class.std::allocator.42"* %m_allocator, %"class.std::allocator.42"* dereferenceable(1) %0) #5
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust6detail15normal_iteratorIPaEC2ES2_(%"class.thrust::detail::normal_iterator"* %m_begin, i8* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !35
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.43"*)* @_ZN9__gnu_cxx13new_allocatorIaED2Ev to void (%"class.std::allocator.42"*)*)(%"class.std::allocator.42"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIaED2Ev(%"class.__gnu_cxx::new_allocator.43"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.43"*, align 8
  store %"class.__gnu_cxx::new_allocator.43"* %this, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.43"*, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaSaIaEE12default_initEm(%"class.thrust::detail::vector_base"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEE8allocateEm(%"class.thrust::detail::contiguous_storage"* %m_storage, i64 %1)
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 1
  store i64 %2, i64* %m_size, align 8, !tbaa !30
  %m_storage2 = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  %call = call i8* @_ZN6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive3, align 8
  %call4 = call i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE4sizeEv(%"class.thrust::detail::vector_base"* %this1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive5, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEE19default_construct_nENS0_15normal_iteratorIPaEEm(%"class.thrust::detail::contiguous_storage"* %m_storage2, i8* %3, i64 %call4)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaSaIaEED2Ev(%"class.thrust::detail::contiguous_storage"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaSaIaEE10deallocateEv(%"class.thrust::detail::contiguous_storage"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.43"*)* @_ZN9__gnu_cxx13new_allocatorIaED2Ev to void (%"class.std::allocator.42"*)*)(%"class.std::allocator.42"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.43"*)* @_ZN9__gnu_cxx13new_allocatorIaED2Ev to void (%"class.std::allocator.42"*)*)(%"class.std::allocator.42"* %m_allocator2) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIaEC2Ev(%"class.__gnu_cxx::new_allocator.43"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.43"*, align 8
  store %"class.__gnu_cxx::new_allocator.43"* %this, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.43"*, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIaEC2ERKS_(%"class.std::allocator.42"* %this, %"class.std::allocator.42"* dereferenceable(1) %__a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.42"*, align 8
  %__a.addr = alloca %"class.std::allocator.42"*, align 8
  store %"class.std::allocator.42"* %this, %"class.std::allocator.42"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.42"* %__a, %"class.std::allocator.42"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.42"* %this1 to %"class.__gnu_cxx::new_allocator.43"*
  %1 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator.42"* %1 to %"class.__gnu_cxx::new_allocator.43"*
  call void @_ZN9__gnu_cxx13new_allocatorIaEC2ERKS1_(%"class.__gnu_cxx::new_allocator.43"* %0, %"class.__gnu_cxx::new_allocator.43"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPaEC2ES2_(%"class.thrust::detail::normal_iterator"* %this, i8* %p) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %p.addr = alloca i8*, align 8
  store %"class.thrust::detail::normal_iterator"* %this, %"class.thrust::detail::normal_iterator"** %this.addr, align 8, !tbaa !1
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator"* %this1 to %"class.thrust::iterator_adaptor"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor"* %0, i8** dereferenceable(8) %p.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIaEC2ERKS1_(%"class.__gnu_cxx::new_allocator.43"* %this, %"class.__gnu_cxx::new_allocator.43"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.43"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator.43"*, align 8
  store %"class.__gnu_cxx::new_allocator.43"* %this, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator.43"* %0, %"class.__gnu_cxx::new_allocator.43"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator.43"*, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor"* %this1 to %"class.thrust::iterator_facade"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !36
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaSaIaEE8allocateEm(%"class.thrust::detail::contiguous_storage"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  %ref.tmp3 = alloca %"class.thrust::detail::normal_iterator", align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZN6thrust6detail16allocator_traitsISaIaEE8allocateERS2_m(%"class.std::allocator.42"* dereferenceable(1) %m_allocator, i64 %1)
  call void @_ZN6thrust6detail15normal_iteratorIPaEC2ES2_(%"class.thrust::detail::normal_iterator"* %ref.tmp, i8* %call)
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %m_begin to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 2
  store i64 %4, i64* %m_size, align 8, !tbaa !35
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPaEC2ES2_(%"class.thrust::detail::normal_iterator"* %ref.tmp3, i8* null)
  %5 = bitcast %"class.thrust::detail::normal_iterator"* %m_begin2 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator"* %ref.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size4, align 8, !tbaa !35
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaSaIaEE19default_construct_nENS0_15normal_iteratorIPaEEm(%"class.thrust::detail::contiguous_storage"* %this, i8* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %n.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this2, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator"* %first to %"class.thrust::iterator_adaptor"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23default_construct_rangeISaIaEPamEEvRT_T0_T1_(%"class.std::allocator.42"* dereferenceable(1) %m_allocator, i8* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE4sizeEv(%"class.thrust::detail::vector_base"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !30
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust6detail16allocator_traitsISaIaEE8allocateERS2_m(%"class.std::allocator.42"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZZN6thrust6detail16allocator_traitsISaIaEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.42"* dereferenceable(1) %0, i64 %1)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZZN6thrust6detail16allocator_traitsISaIaEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.42"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.42"* %0 to %"class.__gnu_cxx::new_allocator.43"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZN9__gnu_cxx13new_allocatorIaE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.43"* %1, i64 %2, i8* null)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN9__gnu_cxx13new_allocatorIaE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.43"* %this, i64 %__n, i8*) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.43"*, align 8
  %__n.addr = alloca i64, align 8
  %.addr = alloca i8*, align 8
  store %"class.__gnu_cxx::new_allocator.43"* %this, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.43"*, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8
  %1 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK9__gnu_cxx13new_allocatorIaE8max_sizeEv(%"class.__gnu_cxx::new_allocator.43"* %this1) #5
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZSt17__throw_bad_allocv() #15
  unreachable

if.end:                                           ; preds = %entry
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %mul = mul i64 %2, 1
  %call2 = call i8* @_Znwm(i64 %mul)
  ret i8* %call2
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK9__gnu_cxx13new_allocatorIaE8max_sizeEv(%"class.__gnu_cxx::new_allocator.43"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.43"*, align 8
  store %"class.__gnu_cxx::new_allocator.43"* %this, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.43"*, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8
  ret i64 -1
}

; Function Attrs: noreturn
declare void @_ZSt17__throw_bad_allocv() #11

; Function Attrs: nobuiltin
declare noalias i8* @_Znwm(i64) #12

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23default_construct_rangeISaIaEPamEEvRT_T0_T1_(%"class.std::allocator.42"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %1 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIaEPamEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.42"* dereferenceable(1) %0, i8* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  store %"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIaEPamEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.42"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %ref.tmp1 = alloca i8, align 1
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaIaEE3getERS2_(%"class.std::allocator.42"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  store i8 0, i8* %ref.tmp1, align 1, !tbaa !7
  %call = call i8* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPamaEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i8* %2, i64 %3, i8* dereferenceable(1) %ref.tmp1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPamaEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i8*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i8*, i8** %x.addr, align 8
  %call2 = call i8* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i8* %2, i64 %3, i8* dereferenceable(1) %4)
  ret i8* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemISaIaEE3getERS2_(%"class.std::allocator.42"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemISaIaEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.42"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i8*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  %ref.tmp = alloca %"struct.thrust::detail::has_trivial_copy_constructor", align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %3 = load i8*, i8** %x.addr, align 8
  %4 = bitcast %"struct.thrust::detail::has_trivial_copy_constructor"* %ref.tmp to %"struct.thrust::detail::integral_constant"*
  %call = call i8* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, i8* %1, i64 %2, i8* dereferenceable(1) %3)
  ret i8* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %x, %"struct.thrust::detail::execution_policy_base.85"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %x.addr, align 8
  %1 = bitcast %"struct.thrust::detail::execution_policy_base.85"* %0 to %"struct.thrust::system::cpp::detail::tag"*
  ret %"struct.thrust::system::cpp::detail::tag"* %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %x, %"struct.thrust::detail::execution_policy_base.85"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %x.addr, align 8
  ret %"struct.thrust::detail::execution_policy_base.85"* %0
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %x) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i8*, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %5 = load i8*, i8** %x.addr, align 8
  %call = call i8* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPamaEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i8* %3, i64 %4, i8* dereferenceable(1) %5)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPamaEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i8*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %value, i8** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i8*, i8** %value.addr, align 8
  %call2 = call i8* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i8* %2, i64 %3, i8* dereferenceable(1) %4)
  ret i8* %call2
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPamaEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i8*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor", align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %value, i8** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i8*, i8** %value.addr, align 8
  call void @_ZN6thrust6detail12fill_functorIaEC2ERKa(%"struct.thrust::detail::fill_functor"* %agg.tmp, i8* dereferenceable(1) %4)
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %agg.tmp, i32 0, i32 0
  %5 = load i8, i8* %coerce.dive, align 1
  %call = call i8* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPamNS_6detail12fill_functorIaEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %5)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPamNS_6detail12fill_functorIaEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %gen, i32 0, i32 0
  store i8 %gen.coerce, i8* %coerce.dive, align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !38
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %agg.tmp, i32 0, i32 0
  %6 = load i8, i8* %coerce.dive2, align 1
  %call3 = call i8* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPamNS_6detail12fill_functorIaEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %6)
  ret i8* %call3
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail12fill_functorIaEC2ERKa(%"struct.thrust::detail::fill_functor"* %this, i8* dereferenceable(1) %_exemplar) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor"*, align 8
  %_exemplar.addr = alloca i8*, align 8
  store %"struct.thrust::detail::fill_functor"* %this, %"struct.thrust::detail::fill_functor"** %this.addr, align 8, !tbaa !1
  store i8* %_exemplar, i8** %_exemplar.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::fill_functor"*, %"struct.thrust::detail::fill_functor"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %_exemplar.addr, align 8
  %1 = load i8, i8* %0, align 1, !tbaa !7
  store i8 %1, i8* %exemplar, align 1, !tbaa !39
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPamNS_6detail12fill_functorIaEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::fill_functor", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %gen, i32 0, i32 0
  store i8 %gen.coerce, i8* %coerce.dive, align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor"* %agg.tmp1 to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !38
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %agg.tmp1, i32 0, i32 0
  %6 = load i8, i8* %coerce.dive2, align 1
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIaEEEC2ES3_(%"struct.thrust::detail::host_generate_functor"* %agg.tmp, i8 %6)
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor", %"struct.thrust::detail::host_generate_functor"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %coerce.dive3, i32 0, i32 0
  %7 = load i8, i8* %coerce.dive4, align 1
  %call = call i8* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPamNS_6detail21host_generate_functorINS6_12fill_functorIaEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %7)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPamNS_6detail21host_generate_functorINS6_12fill_functorIaEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor", %"struct.thrust::detail::host_generate_functor"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %coerce.dive, i32 0, i32 0
  store i8 %f.coerce, i8* %coerce.dive1, align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::host_generate_functor"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::host_generate_functor"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !38
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor", %"struct.thrust::detail::host_generate_functor"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %coerce.dive3, i32 0, i32 0
  %6 = load i8, i8* %coerce.dive4, align 1
  %call5 = call i8* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPamNS_6detail21host_generate_functorINS8_12fill_functorIaEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %6)
  ret i8* %call5
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIaEEEC2ES3_(%"struct.thrust::detail::host_generate_functor"* %this, i8 %g.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %g = alloca %"struct.thrust::detail::fill_functor", align 1
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor"*, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %g, i32 0, i32 0
  store i8 %g.coerce, i8* %coerce.dive, align 1
  store %"struct.thrust::detail::host_generate_functor"* %this, %"struct.thrust::detail::host_generate_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::host_generate_functor"*, %"struct.thrust::detail::host_generate_functor"** %this.addr, align 8
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor", %"struct.thrust::detail::host_generate_functor"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::fill_functor"* %gen to i8*
  %1 = bitcast %"struct.thrust::detail::fill_functor"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 1, i32 1, i1 false), !tbaa.struct !38
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPamNS_6detail21host_generate_functorINS8_12fill_functorIaEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i8* %first, i64 %n, i8 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function", align 1
  %i = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor", %"struct.thrust::detail::host_generate_functor"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %coerce.dive, i32 0, i32 0
  store i8 %f.coerce, i8* %coerce.dive1, align 1
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIaEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function"* %wrapped_f, %"struct.thrust::detail::host_generate_functor"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load i8*, i8** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIaEEEEvEclIaEEvRT_(%"struct.thrust::detail::wrapped_function"* %wrapped_f, i8* dereferenceable(1) %6)
  %7 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds i8, i8* %7, i32 1
  store i8* %incdec.ptr, i8** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  ret i8* %9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIaEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function"* %this, %"struct.thrust::detail::host_generate_functor"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function"*, align 8
  %f.addr = alloca %"struct.thrust::detail::host_generate_functor"*, align 8
  store %"struct.thrust::detail::wrapped_function"* %this, %"struct.thrust::detail::wrapped_function"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::host_generate_functor"* %f, %"struct.thrust::detail::host_generate_functor"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function"*, %"struct.thrust::detail::wrapped_function"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function", %"struct.thrust::detail::wrapped_function"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::host_generate_functor"*, %"struct.thrust::detail::host_generate_functor"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::host_generate_functor"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::host_generate_functor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !38
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIaEEEEvEclIaEEvRT_(%"struct.thrust::detail::wrapped_function"* %this, i8* dereferenceable(1) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function"*, align 8
  %x.addr = alloca i8*, align 8
  store %"struct.thrust::detail::wrapped_function"* %this, %"struct.thrust::detail::wrapped_function"** %this.addr, align 8, !tbaa !1
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function"*, %"struct.thrust::detail::wrapped_function"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function", %"struct.thrust::detail::wrapped_function"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %x.addr, align 8
  %call = call dereferenceable(1) i8* @_ZN6thrust18raw_reference_castIaEENS_6detail13raw_referenceIT_E4typeERS3_(i8* dereferenceable(1) %0)
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIaEEEclIaEEvRKT_(%"struct.thrust::detail::host_generate_functor"* %m_f, i8* dereferenceable(1) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIaEEEclIaEEvRKT_(%"struct.thrust::detail::host_generate_functor"* %this, i8* dereferenceable(1) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor"*, align 8
  %x.addr = alloca i8*, align 8
  %lvalue = alloca i8*, align 8
  store %"struct.thrust::detail::host_generate_functor"* %this, %"struct.thrust::detail::host_generate_functor"** %this.addr, align 8, !tbaa !1
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::host_generate_functor"*, %"struct.thrust::detail::host_generate_functor"** %this.addr, align 8
  %0 = bitcast i8** %lvalue to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load i8*, i8** %x.addr, align 8
  store i8* %1, i8** %lvalue, align 8, !tbaa !7
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor", %"struct.thrust::detail::host_generate_functor"* %this1, i32 0, i32 0
  %call = call signext i8 @_ZNK6thrust6detail12fill_functorIaEclEv(%"struct.thrust::detail::fill_functor"* %gen)
  %2 = load i8*, i8** %lvalue, align 8
  store i8 %call, i8* %2, align 1, !tbaa !7
  %3 = bitcast i8** %lvalue to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust18raw_reference_castIaEENS_6detail13raw_referenceIT_E4typeERS3_(i8* dereferenceable(1) %ref) #8 comdat {
entry:
  %ref.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  store i8* %ref, i8** %ref.addr, align 8, !tbaa !7
  %0 = load i8*, i8** %ref.addr, align 8
  store i8* %0, i8** %ref.tmp, align 8, !tbaa !1
  %call = call i8* @_ZN6thrust16raw_pointer_castIPaEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i8** dereferenceable(8) %ref.tmp)
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr signext i8 @_ZNK6thrust6detail12fill_functorIaEclEv(%"struct.thrust::detail::fill_functor"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor"*, align 8
  store %"struct.thrust::detail::fill_functor"* %this, %"struct.thrust::detail::fill_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::fill_functor"*, %"struct.thrust::detail::fill_functor"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor", %"struct.thrust::detail::fill_functor"* %this1, i32 0, i32 0
  %0 = load i8, i8* %exemplar, align 1, !tbaa !39
  ret i8 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust16raw_pointer_castIPaEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i8** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i8**, align 8
  store i8** %ptr, i8*** %ptr.addr, align 8, !tbaa !7
  %0 = load i8**, i8*** %ptr.addr, align 8
  %1 = load i8*, i8** %0, align 8, !tbaa !1
  %call = call i8* @_ZN6thrust6detail14pointer_traitsIPaE3getES2_(i8* %1)
  ret i8* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail14pointer_traitsIPaE3getES2_(i8* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i8*, align 8
  store i8* %ptr, i8** %ptr.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %ptr.addr, align 8, !tbaa !1
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemISaIaEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.42"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaSaIaEE10deallocateEv(%"class.thrust::detail::contiguous_storage"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIaSaIaEE4sizeEv(%"class.thrust::detail::contiguous_storage"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator"* %m_begin to %"class.thrust::iterator_adaptor"*
  %call2 = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %0)
  %1 = load i8*, i8** %call2, align 8, !tbaa !1
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIaSaIaEE4sizeEv(%"class.thrust::detail::contiguous_storage"* %this1)
  call void @_ZN6thrust6detail16allocator_traitsISaIaEE10deallocateERS2_Pam(%"class.std::allocator.42"* dereferenceable(1) %m_allocator, i8* %1, i64 %call3)
  %m_begin4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPaEC2ES2_(%"class.thrust::detail::normal_iterator"* %ref.tmp, i8* null)
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %m_begin4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !35
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

declare void @__cxa_call_unexpected(i8*)

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIaSaIaEE4sizeEv(%"class.thrust::detail::contiguous_storage"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !35
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaIaEE10deallocateERS2_Pam(%"class.std::allocator.42"* dereferenceable(1) %a, i8* %p, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %1 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZZN6thrust6detail16allocator_traitsISaIaEE10deallocateERS2_PamEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.42"* dereferenceable(1) %0, i8* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsISaIaEE10deallocateERS2_PamEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.42"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.42"* %0 to %"class.__gnu_cxx::new_allocator.43"*
  %2 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorIaE10deallocateEPam(%"class.__gnu_cxx::new_allocator.43"* %1, i8* %2, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIaE10deallocateEPam(%"class.__gnu_cxx::new_allocator.43"* %this, i8* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.43"*, align 8
  %__p.addr = alloca i8*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.43"* %this, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8, !tbaa !1
  store i8* %__p, i8** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.43"*, %"class.__gnu_cxx::new_allocator.43"** %this.addr, align 8
  %1 = load i8*, i8** %__p.addr, align 8, !tbaa !1
  call void @_ZdlPv(i8* %1) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator", align 8
  %result = alloca %"class.thrust::detail::normal_iterator", align 8
  %op = alloca %"struct.unittest::random_integer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp5 = alloca %"struct.unittest::random_integer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::execution_policy.88"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp3, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp4, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive6, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive7, align 8
  %call8 = call i8* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp3, i8* %4)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive9, i32 0, i32 0
  store i8* %call8, i8** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive11, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive12, align 8
  ret i8* %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS_14any_system_tagENS0_3cpp6detail3tagEEERNS_6detail17enable_if_definedINS8_14minimum_systemIT_T0_NS8_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyISB_EERNSJ_ISC_EE(%"struct.thrust::execution_policy.89"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2) #0 comdat {
entry:
  %system1.addr = alloca %"struct.thrust::execution_policy.89"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  store %"struct.thrust::execution_policy.89"* %system1, %"struct.thrust::execution_policy.89"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.89"*, %"struct.thrust::execution_policy.89"** %system1.addr, align 8
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS_14any_system_tagENS0_3cpp6detail3tagEEENS_6detail9enable_ifIXsr6thrust6detail7is_sameIT0_NS9_14minimum_systemIT_SB_NS9_19minimum_type_detail14any_conversionESF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_E4typeEEE5valueERSB_E4typeERNS_16execution_policyISD_EERNSL_ISB_EE(%"struct.thrust::execution_policy.89"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %rhs) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %rhs.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"class.thrust::counting_iterator"* %this, %"class.thrust::counting_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %rhs, %"class.thrust::counting_iterator"** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::counting_iterator"* %this1 to %"class.thrust::iterator_adaptor.83"*
  %1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %rhs.addr, align 8
  %2 = bitcast %"class.thrust::counting_iterator"* %1 to %"class.thrust::iterator_adaptor.83"*
  %call = call dereferenceable(8) i64* @_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE4baseEv(%"class.thrust::iterator_adaptor.83"* %2)
  call void @_ZN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxEC2ERKm(%"class.thrust::iterator_adaptor.83"* %0, i64* dereferenceable(8) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPaEEN8unittest14random_integerIaLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator", align 8
  %result = alloca %"class.thrust::detail::normal_iterator", align 8
  %op = alloca %"struct.unittest::random_integer", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator", align 8
  %agg.tmp2 = alloca %"class.thrust::tuple", align 8
  %agg.tmp3 = alloca %"class.thrust::zip_iterator", align 8
  %agg.tmp4 = alloca %"class.thrust::tuple", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::unary_transform_functor", align 1
  %agg.tmp6 = alloca %"struct.unittest::random_integer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple"* sret %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %first, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator"* sret %agg.tmp, %"class.thrust::tuple"* %agg.tmp2)
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple"* sret %agg.tmp4, %"class.thrust::counting_iterator"* dereferenceable(8) %last, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator"* sret %agg.tmp3, %"class.thrust::tuple"* %agg.tmp4)
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIaLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor"* %agg.tmp5)
  call void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPaEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, %"class.thrust::zip_iterator"* %agg.tmp, %"class.thrust::zip_iterator"* %agg.tmp3)
  %call = call dereferenceable(16) %"class.thrust::tuple"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator"* %zipped_result)
  %3 = bitcast %"class.thrust::tuple"* %call to %"struct.thrust::detail::cons"*
  %call7 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator"* %retval to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %6) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  ret i8* %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPaEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::zip_iterator"* %first, %"class.thrust::zip_iterator"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::unary_transform_functor", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator"* %agg.tmp, %"class.thrust::zip_iterator"* dereferenceable(16) %first)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator"* %agg.tmp2, %"class.thrust::zip_iterator"* dereferenceable(16) %last)
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor"* %agg.tmp3 to i8*
  %3 = bitcast %"struct.thrust::detail::unary_transform_functor"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPaEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator"* sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"class.thrust::zip_iterator"* %agg.tmp, %"class.thrust::zip_iterator"* %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator"* noalias sret %agg.result, %"class.thrust::tuple"* %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple", align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple"* %agg.tmp, %"class.thrust::tuple"* dereferenceable(16) %t)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator"* %agg.result, %"class.thrust::tuple"* %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple"* noalias sret %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t1) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %t1, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple"* %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIaLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.unittest::random_integer", align 1
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor"*, align 8
  store %"struct.thrust::detail::unary_transform_functor"* %this, %"struct.thrust::detail::unary_transform_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor"*, %"struct.thrust::detail::unary_transform_functor"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor", %"struct.thrust::detail::unary_transform_functor"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons"*, align 8
  store %"struct.thrust::detail::cons"* %c, %"struct.thrust::detail::cons"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPaEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator", %"class.thrust::zip_iterator"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPaEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator"* noalias sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"class.thrust::zip_iterator"* %first, %"class.thrust::zip_iterator"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.93", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references", align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %1 = bitcast %"struct.thrust::detail::wrapped_function.93"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.93"* %wrapped_f, %"struct.thrust::detail::unary_transform_functor"* dereferenceable(1) %f)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = bitcast %"class.thrust::zip_iterator"* %first to %"class.thrust::iterator_facade.91"*
  %3 = bitcast %"class.thrust::zip_iterator"* %last to %"class.thrust::iterator_facade.91"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.91"* dereferenceable(1) %2, %"class.thrust::iterator_facade.91"* dereferenceable(1) %3)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"class.thrust::zip_iterator"* %first to %"class.thrust::iterator_facade.91"*
  %call1 = call { i64, i8* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.91"* %4)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references", %"class.thrust::detail::tuple_of_iterator_references"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %coerce.dive, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive2 to { i64, i8* }*
  %6 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %5, i32 0, i32 0
  %7 = extractvalue { i64, i8* } %call1, 0
  store i64 %7, i64* %6, align 8
  %8 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %5, i32 0, i32 1
  %9 = extractvalue { i64, i8* } %call1, 1
  store i8* %9, i8** %8, align 8
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRaNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.93"* %wrapped_f, %"class.thrust::detail::tuple_of_iterator_references"* dereferenceable(16) %ref.tmp)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %10 = bitcast %"class.thrust::zip_iterator"* %first to %"class.thrust::iterator_facade.91"*
  %call3 = call dereferenceable(16) %"class.thrust::zip_iterator"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.91"* %10)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator"* %agg.result, %"class.thrust::zip_iterator"* dereferenceable(16) %first)
  %11 = bitcast %"struct.thrust::detail::wrapped_function.93"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %11) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator"* %0, %"class.thrust::zip_iterator"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator"* %this1 to %"class.thrust::iterator_facade.91"*
  %2 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator"* %2 to %"class.thrust::iterator_facade.91"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator", %"class.thrust::zip_iterator"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator", %"class.thrust::zip_iterator"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple"* %m_iterator_tuple, %"class.thrust::tuple"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.93"* %this, %"struct.thrust::detail::unary_transform_functor"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.93"*, align 8
  %f.addr = alloca %"struct.thrust::detail::unary_transform_functor"*, align 8
  store %"struct.thrust::detail::wrapped_function.93"* %this, %"struct.thrust::detail::wrapped_function.93"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::unary_transform_functor"* %f, %"struct.thrust::detail::unary_transform_functor"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.93"*, %"struct.thrust::detail::wrapped_function.93"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.93", %"struct.thrust::detail::wrapped_function.93"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::unary_transform_functor"*, %"struct.thrust::detail::unary_transform_functor"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::unary_transform_functor"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.91"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.91"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.91"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.91"*, align 8
  store %"class.thrust::iterator_facade.91"* %lhs, %"class.thrust::iterator_facade.91"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.91"* %rhs, %"class.thrust::iterator_facade.91"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.91"*, %"class.thrust::iterator_facade.91"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.91"* %0 to %"class.thrust::zip_iterator"*
  %2 = load %"class.thrust::iterator_facade.91"*, %"class.thrust::iterator_facade.91"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.91"* %2 to %"class.thrust::zip_iterator"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator"* dereferenceable(16) %1, %"class.thrust::zip_iterator"* dereferenceable(16) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIaLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRaNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.93"* %this, %"class.thrust::detail::tuple_of_iterator_references"* dereferenceable(16) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.93"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references", align 8
  store %"struct.thrust::detail::wrapped_function.93"* %this, %"struct.thrust::detail::wrapped_function.93"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references"* %x, %"class.thrust::detail::tuple_of_iterator_references"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.93"*, %"struct.thrust::detail::wrapped_function.93"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.93", %"struct.thrust::detail::wrapped_function.93"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references"*, %"class.thrust::detail::tuple_of_iterator_references"** %x.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references"* %agg.tmp to { i64, i8* }*
  %4 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %3, i32 0, i32 0
  %5 = load i64, i64* %4, align 8
  %6 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %3, i32 0, i32 1
  %7 = load i8*, i8** %6, align 8
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIaLb0EEEEclINS0_28tuple_of_iterator_referencesImRaNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor"* %m_f, i64 %5, i8* %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.91"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.91"*, align 8
  store %"class.thrust::iterator_facade.91"* %this, %"class.thrust::iterator_facade.91"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.91"*, %"class.thrust::iterator_facade.91"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.91"* %this1)
  %call2 = call { i64, i8* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references", %"class.thrust::detail::tuple_of_iterator_references"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %coerce.dive, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive3 to { i64, i8* }*
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i8* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i8* } %call2, 1
  store i8* %4, i8** %3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references", %"class.thrust::detail::tuple_of_iterator_references"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %coerce.dive4, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive5 to { i64, i8* }*
  %6 = load { i64, i8* }, { i64, i8* }* %5, align 8
  ret { i64, i8* } %6
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.91"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.91"*, align 8
  store %"class.thrust::iterator_facade.91"* %this, %"class.thrust::iterator_facade.91"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.91"*, %"class.thrust::iterator_facade.91"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.91"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator"* dereferenceable(16) %call)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.91"* %this1)
  ret %"class.thrust::zip_iterator"* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator"* %0, %"class.thrust::zip_iterator"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator"* %this1 to %"class.thrust::iterator_facade.91"*
  %2 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator"* %2 to %"class.thrust::iterator_facade.91"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator", %"class.thrust::zip_iterator"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator", %"class.thrust::zip_iterator"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple"* %m_iterator_tuple, %"class.thrust::tuple"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator"* dereferenceable(16) %f1, %"class.thrust::zip_iterator"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %f1, %"class.thrust::zip_iterator"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator"* %f2, %"class.thrust::zip_iterator"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator"* %0, %"class.thrust::zip_iterator"* dereferenceable(16) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator"* %other, %"class.thrust::zip_iterator"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator"* %this1)
  %0 = bitcast %"class.thrust::tuple"* %call to %"struct.thrust::detail::cons"*
  %call2 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::counting_iterator"* %call2 to %"class.thrust::iterator_facade.84"*
  %2 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %other.addr, align 8
  %call3 = call dereferenceable(16) %"class.thrust::tuple"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator"* %2)
  %3 = bitcast %"class.thrust::tuple"* %call3 to %"struct.thrust::detail::cons"*
  %call4 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::counting_iterator"* %call4 to %"class.thrust::iterator_facade.84"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxS3_mS4_S5_mxEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNS6_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.84"* dereferenceable(1) %1, %"class.thrust::iterator_facade.84"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxS3_mS4_S5_mxEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNS6_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.84"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.84"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.84"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.84"*, align 8
  store %"class.thrust::iterator_facade.84"* %lhs, %"class.thrust::iterator_facade.84"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.84"* %rhs, %"class.thrust::iterator_facade.84"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.84"*, %"class.thrust::iterator_facade.84"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.84"* %0 to %"class.thrust::counting_iterator"*
  %2 = load %"class.thrust::iterator_facade.84"*, %"class.thrust::iterator_facade.84"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.84"* %2 to %"class.thrust::counting_iterator"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_17counting_iteratorImNS_11use_defaultES3_S3_EES4_EEbRKT_RKT0_(%"class.thrust::counting_iterator"* dereferenceable(8) %1, %"class.thrust::counting_iterator"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons"*, align 8
  store %"struct.thrust::detail::cons"* %c, %"struct.thrust::detail::cons"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPaEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons"* dereferenceable(16) %0)
  ret %"class.thrust::counting_iterator"* %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_17counting_iteratorImNS_11use_defaultES3_S3_EES4_EEbRKT_RKT0_(%"class.thrust::counting_iterator"* dereferenceable(8) %f1, %"class.thrust::counting_iterator"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %f2.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"class.thrust::counting_iterator"* %f1, %"class.thrust::counting_iterator"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::counting_iterator"* %f2, %"class.thrust::counting_iterator"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %f1.addr, align 8
  %1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust17counting_iteratorImNS_11use_defaultES1_S1_E5equalImS1_S1_S1_EEbRKNS0_IT_T0_T1_T2_EE(%"class.thrust::counting_iterator"* %0, %"class.thrust::counting_iterator"* dereferenceable(8) %1)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust17counting_iteratorImNS_11use_defaultES1_S1_E5equalImS1_S1_S1_EEbRKNS0_IT_T0_T1_T2_EE(%"class.thrust::counting_iterator"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %y.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"class.thrust::counting_iterator"* %this, %"class.thrust::counting_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %y, %"class.thrust::counting_iterator"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::counting_iterator"* %this1 to %"class.thrust::iterator_adaptor.83"*
  %call = call dereferenceable(8) i64* @_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE4baseEv(%"class.thrust::iterator_adaptor.83"* %0)
  %1 = load i64, i64* %call, align 8, !tbaa !13
  %2 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %y.addr, align 8
  %3 = bitcast %"class.thrust::counting_iterator"* %2 to %"class.thrust::iterator_adaptor.83"*
  %call2 = call dereferenceable(8) i64* @_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE4baseEv(%"class.thrust::iterator_adaptor.83"* %3)
  %4 = load i64, i64* %call2, align 8, !tbaa !13
  %call3 = call zeroext i1 @_ZN6thrust6detail23counting_iterator_equalIxmmvE5equalEmm(i64 %1, i64 %4)
  ret i1 %call3
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail23counting_iterator_equalIxmmvE5equalEmm(i64 %x, i64 %y) #1 comdat align 2 {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i64, align 8
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  %0 = load i64, i64* %x.addr, align 8, !tbaa !13
  %1 = load i64, i64* %y.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, %1
  ret i1 %cmp
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i64* @_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE4baseEv(%"class.thrust::iterator_adaptor.83"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.83"*, align 8
  store %"class.thrust::iterator_adaptor.83"* %this, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.83"*, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.83", %"class.thrust::iterator_adaptor.83"* %this1, i32 0, i32 0
  ret i64* %m_iterator
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPaEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons"*, align 8
  store %"struct.thrust::detail::cons"* %t, %"struct.thrust::detail::cons"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %0, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIaLb0EEEEclINS0_28tuple_of_iterator_referencesImRaNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor"* %this, i64 %t.coerce0, i8* %t.coerce1) #8 comdat align 2 {
entry:
  %t = alloca %"class.thrust::detail::tuple_of_iterator_references", align 8
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor"*, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references"* %t to { i64, i8* }*
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 0
  store i64 %t.coerce0, i64* %1, align 8
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 1
  store i8* %t.coerce1, i8** %2, align 8
  store %"struct.thrust::detail::unary_transform_functor"* %this, %"struct.thrust::detail::unary_transform_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor"*, %"struct.thrust::detail::unary_transform_functor"** %this.addr, align 8
  %f = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor", %"struct.thrust::detail::unary_transform_functor"* %this1, i32 0, i32 0
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references"* %t to %"struct.thrust::detail::cons.95"*
  %call = call dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRaNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.95"* dereferenceable(16) %3)
  %4 = load i64, i64* %call, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %call2 = call signext i8 @_ZNK8unittest14random_integerIaLb0EEclEj(%"struct.unittest::random_integer"* %f, i32 %conv)
  %5 = bitcast %"class.thrust::detail::tuple_of_iterator_references"* %t to %"struct.thrust::detail::cons.95"*
  %call3 = call dereferenceable(1) i8* @_ZN6thrust3getILi1EmNS_6detail4consIRaNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.95"* dereferenceable(16) %5)
  store i8 %call2, i8* %call3, align 1, !tbaa !7
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references"* dereferenceable(16) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::detail::tuple_of_iterator_references"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references"* %ref, %"class.thrust::detail::tuple_of_iterator_references"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references"*, %"class.thrust::detail::tuple_of_iterator_references"** %ref.addr, align 8
  store %"class.thrust::detail::tuple_of_iterator_references"* %0, %"class.thrust::detail::tuple_of_iterator_references"** %ref.tmp, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references"** dereferenceable(8) %ref.tmp)
  ret %"class.thrust::detail::tuple_of_iterator_references"* %call
}

; Function Attrs: uwtable
define linkonce_odr signext i8 @_ZNK8unittest14random_integerIaLb0EEclEj(%"struct.unittest::random_integer"* %this, i32 %i) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::random_integer"*, align 8
  %i.addr = alloca i32, align 4
  %rng = alloca %"class.thrust::random::linear_congruential_engine", align 4
  %dist = alloca %"class.thrust::random::uniform_int_distribution", align 1
  store %"struct.unittest::random_integer"* %this, %"struct.unittest::random_integer"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"struct.unittest::random_integer"*, %"struct.unittest::random_integer"** %this.addr, align 8
  %0 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %i.addr, align 4, !tbaa !11
  %call = call i32 @_ZN8unittest4hashEj(i32 %1)
  call void @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEC2Ej(%"class.thrust::random::linear_congruential_engine"* %rng, i32 %call)
  %2 = bitcast %"class.thrust::random::uniform_int_distribution"* %dist to i8*
  call void @llvm.lifetime.start(i64 2, i8* %2) #5
  call void @_ZN6thrust6random24uniform_int_distributionIaEC2Eaa(%"class.thrust::random::uniform_int_distribution"* %dist, i8 signext 0, i8 signext 127)
  %call2 = call signext i8 @_ZN6thrust6random24uniform_int_distributionIaEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEaRT_(%"class.thrust::random::uniform_int_distribution"* %dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %rng)
  %3 = bitcast %"class.thrust::random::uniform_int_distribution"* %dist to i8*
  call void @llvm.lifetime.end(i64 2, i8* %3) #5
  %4 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.end(i64 4, i8* %4) #5
  ret i8 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRaNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.95"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.95"*, align 8
  store %"struct.thrust::detail::cons.95"* %c, %"struct.thrust::detail::cons.95"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.95"*, %"struct.thrust::detail::cons.95"** %c.addr, align 8
  %call = call dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRaNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.95"* dereferenceable(16) %0)
  ret i64* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust3getILi1EmNS_6detail4consIRaNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.95"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.95"*, align 8
  store %"struct.thrust::detail::cons.95"* %c, %"struct.thrust::detail::cons.95"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.95"*, %"struct.thrust::detail::cons.95"** %c.addr, align 8
  %call = call dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi1EE3getIRamNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.95"* dereferenceable(16) %0)
  ret i8* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZN8unittest4hashEj(i32 %a) #9 comdat {
entry:
  %a.addr = alloca i32, align 4
  store i32 %a, i32* %a.addr, align 4, !tbaa !11
  %0 = load i32, i32* %a.addr, align 4, !tbaa !11
  %add = add i32 %0, 2127912214
  %1 = load i32, i32* %a.addr, align 4, !tbaa !11
  %shl = shl i32 %1, 12
  %add1 = add i32 %add, %shl
  store i32 %add1, i32* %a.addr, align 4, !tbaa !11
  %2 = load i32, i32* %a.addr, align 4, !tbaa !11
  %xor = xor i32 %2, -949894596
  %3 = load i32, i32* %a.addr, align 4, !tbaa !11
  %shr = lshr i32 %3, 19
  %xor2 = xor i32 %xor, %shr
  store i32 %xor2, i32* %a.addr, align 4, !tbaa !11
  %4 = load i32, i32* %a.addr, align 4, !tbaa !11
  %add3 = add i32 %4, 374761393
  %5 = load i32, i32* %a.addr, align 4, !tbaa !11
  %shl4 = shl i32 %5, 5
  %add5 = add i32 %add3, %shl4
  store i32 %add5, i32* %a.addr, align 4, !tbaa !11
  %6 = load i32, i32* %a.addr, align 4, !tbaa !11
  %add6 = add i32 %6, -744332180
  %7 = load i32, i32* %a.addr, align 4, !tbaa !11
  %shl7 = shl i32 %7, 9
  %xor8 = xor i32 %add6, %shl7
  store i32 %xor8, i32* %a.addr, align 4, !tbaa !11
  %8 = load i32, i32* %a.addr, align 4, !tbaa !11
  %add9 = add i32 %8, -42973499
  %9 = load i32, i32* %a.addr, align 4, !tbaa !11
  %shl10 = shl i32 %9, 3
  %add11 = add i32 %add9, %shl10
  store i32 %add11, i32* %a.addr, align 4, !tbaa !11
  %10 = load i32, i32* %a.addr, align 4, !tbaa !11
  %xor12 = xor i32 %10, -1252372727
  %11 = load i32, i32* %a.addr, align 4, !tbaa !11
  %shr13 = lshr i32 %11, 16
  %xor14 = xor i32 %xor12, %shr13
  store i32 %xor14, i32* %a.addr, align 4, !tbaa !11
  %12 = load i32, i32* %a.addr, align 4, !tbaa !11
  ret i32 %12
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEC2Ej(%"class.thrust::random::linear_congruential_engine"* %this, i32 %s) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  %s.addr = alloca i32, align 4
  store %"class.thrust::random::linear_congruential_engine"* %this, %"class.thrust::random::linear_congruential_engine"** %this.addr, align 8, !tbaa !1
  store i32 %s, i32* %s.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %this.addr, align 8
  %0 = load i32, i32* %s.addr, align 4, !tbaa !11
  call void @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EE4seedEj(%"class.thrust::random::linear_congruential_engine"* %this1, i32 %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6random24uniform_int_distributionIaEC2Eaa(%"class.thrust::random::uniform_int_distribution"* %this, i8 signext %a, i8 signext %b) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution"*, align 8
  %a.addr = alloca i8, align 1
  %b.addr = alloca i8, align 1
  store %"class.thrust::random::uniform_int_distribution"* %this, %"class.thrust::random::uniform_int_distribution"** %this.addr, align 8, !tbaa !1
  store i8 %a, i8* %a.addr, align 1, !tbaa !7
  store i8 %b, i8* %b.addr, align 1, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution"*, %"class.thrust::random::uniform_int_distribution"** %this.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution", %"class.thrust::random::uniform_int_distribution"* %this1, i32 0, i32 0
  call void @_ZN6thrust4pairIaaEC2ERKaS3_(%"struct.thrust::pair"* %m_param, i8* dereferenceable(1) %a.addr, i8* dereferenceable(1) %b.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr signext i8 @_ZN6thrust6random24uniform_int_distributionIaEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEaRT_(%"class.thrust::random::uniform_int_distribution"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  store %"class.thrust::random::uniform_int_distribution"* %this, %"class.thrust::random::uniform_int_distribution"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution"*, %"class.thrust::random::uniform_int_distribution"** %this.addr, align 8
  %0 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution", %"class.thrust::random::uniform_int_distribution"* %this1, i32 0, i32 0
  %call = call signext i8 @_ZN6thrust6random24uniform_int_distributionIaEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEaRT_RKNS_4pairIaaEE(%"class.thrust::random::uniform_int_distribution"* %this1, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %0, %"struct.thrust::pair"* dereferenceable(2) %m_param)
  ret i8 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EE4seedEj(%"class.thrust::random::linear_congruential_engine"* %this, i32 %s) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  %s.addr = alloca i32, align 4
  store %"class.thrust::random::linear_congruential_engine"* %this, %"class.thrust::random::linear_congruential_engine"** %this.addr, align 8, !tbaa !1
  store i32 %s, i32* %s.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %this.addr, align 8
  %call = call i32 @_ZN6thrust6random6detail3modIjLj1ELj0ELj2147483647EEET_S3_(i32 0)
  %cmp = icmp eq i32 %call, 0
  br i1 %cmp, label %land.lhs.true, label %if.else

land.lhs.true:                                    ; preds = %entry
  %0 = load i32, i32* %s.addr, align 4, !tbaa !11
  %call2 = call i32 @_ZN6thrust6random6detail3modIjLj1ELj0ELj2147483647EEET_S3_(i32 %0)
  %cmp3 = icmp eq i32 %call2, 0
  br i1 %cmp3, label %if.then, label %if.else

if.then:                                          ; preds = %land.lhs.true
  %call4 = call i32 @_ZN6thrust6random6detail3modIjLj1ELj0ELj2147483647EEET_S3_(i32 1)
  %m_x = getelementptr inbounds %"class.thrust::random::linear_congruential_engine", %"class.thrust::random::linear_congruential_engine"* %this1, i32 0, i32 0
  store i32 %call4, i32* %m_x, align 4, !tbaa !42
  br label %if.end

if.else:                                          ; preds = %land.lhs.true, %entry
  %1 = load i32, i32* %s.addr, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust6random6detail3modIjLj1ELj0ELj2147483647EEET_S3_(i32 %1)
  %m_x6 = getelementptr inbounds %"class.thrust::random::linear_congruential_engine", %"class.thrust::random::linear_congruential_engine"* %this1, i32 0, i32 0
  store i32 %call5, i32* %m_x6, align 4, !tbaa !42
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6random6detail3modIjLj1ELj0ELj2147483647EEET_S3_(i32 %x) #0 comdat {
entry:
  %x.addr = alloca i32, align 4
  %f = alloca %"struct.thrust::random::detail::static_mod", align 1
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  %0 = bitcast %"struct.thrust::random::detail::static_mod"* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = load i32, i32* %x.addr, align 4, !tbaa !11
  %call = call i32 @_ZNK6thrust6random6detail10static_modIjLj1ELj0ELj2147483647ELb0EEclEj(%"struct.thrust::random::detail::static_mod"* %f, i32 %1)
  %2 = bitcast %"struct.thrust::random::detail::static_mod"* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %2) #5
  ret i32 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6random6detail10static_modIjLj1ELj0ELj2147483647ELb0EEclEj(%"struct.thrust::random::detail::static_mod"* %this, i32 %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::random::detail::static_mod"*, align 8
  %x.addr = alloca i32, align 4
  store %"struct.thrust::random::detail::static_mod"* %this, %"struct.thrust::random::detail::static_mod"** %this.addr, align 8, !tbaa !1
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::random::detail::static_mod"*, %"struct.thrust::random::detail::static_mod"** %this.addr, align 8
  %0 = load i32, i32* %x.addr, align 4, !tbaa !11
  %rem = urem i32 %0, 2147483647
  store i32 %rem, i32* %x.addr, align 4, !tbaa !11
  %1 = load i32, i32* %x.addr, align 4, !tbaa !11
  ret i32 %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIaaEC2ERKaS3_(%"struct.thrust::pair"* %this, i8* dereferenceable(1) %x, i8* dereferenceable(1) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair"*, align 8
  %x.addr = alloca i8*, align 8
  %y.addr = alloca i8*, align 8
  store %"struct.thrust::pair"* %this, %"struct.thrust::pair"** %this.addr, align 8, !tbaa !1
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  store i8* %y, i8** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %x.addr, align 8
  %1 = load i8, i8* %0, align 1, !tbaa !7
  store i8 %1, i8* %first, align 1, !tbaa !26
  %second = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %this1, i32 0, i32 1
  %2 = load i8*, i8** %y.addr, align 8
  %3 = load i8, i8* %2, align 1, !tbaa !7
  store i8 %3, i8* %second, align 1, !tbaa !29
  ret void
}

; Function Attrs: uwtable
define linkonce_odr signext i8 @_ZN6thrust6random24uniform_int_distributionIaEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEaRT_RKNS_4pairIaaEE(%"class.thrust::random::uniform_int_distribution"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng, %"struct.thrust::pair"* dereferenceable(2) %parm) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  %parm.addr = alloca %"struct.thrust::pair"*, align 8
  %real_min = alloca double, align 8
  %real_max = alloca double, align 8
  %real_dist = alloca %"class.thrust::random::uniform_real_distribution", align 8
  store %"class.thrust::random::uniform_int_distribution"* %this, %"class.thrust::random::uniform_int_distribution"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %parm, %"struct.thrust::pair"** %parm.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution"*, %"class.thrust::random::uniform_int_distribution"** %this.addr, align 8
  %0 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %parm.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %1, i32 0, i32 0
  %2 = load i8, i8* %first, align 1, !tbaa !26
  %conv = sitofp i8 %2 to double
  store double %conv, double* %real_min, align 8, !tbaa !44
  %3 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %parm.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %4, i32 0, i32 1
  %5 = load i8, i8* %second, align 1, !tbaa !29
  %conv2 = sitofp i8 %5 to double
  store double %conv2, double* %real_max, align 8, !tbaa !44
  %6 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.start(i64 16, i8* %6) #5
  %7 = load double, double* %real_min, align 8, !tbaa !44
  %8 = load double, double* %real_max, align 8, !tbaa !44
  %add = fadd double %8, 1.000000e+00
  call void @_ZN6thrust6random25uniform_real_distributionIdEC2Edd(%"class.thrust::random::uniform_real_distribution"* %real_dist, double %7, double %add)
  %9 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %call = call double @_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_(%"class.thrust::random::uniform_real_distribution"* %real_dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %9)
  %conv3 = fptosi double %call to i8
  %10 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.end(i64 16, i8* %10) #5
  %11 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.end(i64 8, i8* %11) #5
  %12 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret i8 %conv3
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6random25uniform_real_distributionIdEC2Edd(%"class.thrust::random::uniform_real_distribution"* %this, double %a, double %b) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_real_distribution"*, align 8
  %a.addr = alloca double, align 8
  %b.addr = alloca double, align 8
  store %"class.thrust::random::uniform_real_distribution"* %this, %"class.thrust::random::uniform_real_distribution"** %this.addr, align 8, !tbaa !1
  store double %a, double* %a.addr, align 8, !tbaa !44
  store double %b, double* %b.addr, align 8, !tbaa !44
  %this1 = load %"class.thrust::random::uniform_real_distribution"*, %"class.thrust::random::uniform_real_distribution"** %this.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_real_distribution", %"class.thrust::random::uniform_real_distribution"* %this1, i32 0, i32 0
  call void @_ZN6thrust4pairIddEC2ERKdS3_(%"struct.thrust::pair.97"* %m_param, double* dereferenceable(8) %a.addr, double* dereferenceable(8) %b.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr double @_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_(%"class.thrust::random::uniform_real_distribution"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_real_distribution"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  store %"class.thrust::random::uniform_real_distribution"* %this, %"class.thrust::random::uniform_real_distribution"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_real_distribution"*, %"class.thrust::random::uniform_real_distribution"** %this.addr, align 8
  %0 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_real_distribution", %"class.thrust::random::uniform_real_distribution"* %this1, i32 0, i32 0
  %call = call double @_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_RKNS_4pairIddEE(%"class.thrust::random::uniform_real_distribution"* %this1, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %0, %"struct.thrust::pair.97"* dereferenceable(16) %m_param)
  ret double %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIddEC2ERKdS3_(%"struct.thrust::pair.97"* %this, double* dereferenceable(8) %x, double* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.97"*, align 8
  %x.addr = alloca double*, align 8
  %y.addr = alloca double*, align 8
  store %"struct.thrust::pair.97"* %this, %"struct.thrust::pair.97"** %this.addr, align 8, !tbaa !1
  store double* %x, double** %x.addr, align 8, !tbaa !7
  store double* %y, double** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.97"*, %"struct.thrust::pair.97"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.97", %"struct.thrust::pair.97"* %this1, i32 0, i32 0
  %0 = load double*, double** %x.addr, align 8
  %1 = load double, double* %0, align 8, !tbaa !44
  store double %1, double* %first, align 8, !tbaa !46
  %second = getelementptr inbounds %"struct.thrust::pair.97", %"struct.thrust::pair.97"* %this1, i32 0, i32 1
  %2 = load double*, double** %y.addr, align 8
  %3 = load double, double* %2, align 8, !tbaa !44
  store double %3, double* %second, align 8, !tbaa !48
  ret void
}

; Function Attrs: uwtable
define linkonce_odr double @_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_RKNS_4pairIddEE(%"class.thrust::random::uniform_real_distribution"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng, %"struct.thrust::pair.97"* dereferenceable(16) %parm) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_real_distribution"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  %parm.addr = alloca %"struct.thrust::pair.97"*, align 8
  %result = alloca double, align 8
  store %"class.thrust::random::uniform_real_distribution"* %this, %"class.thrust::random::uniform_real_distribution"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.97"* %parm, %"struct.thrust::pair.97"** %parm.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_real_distribution"*, %"class.thrust::random::uniform_real_distribution"** %this.addr, align 8
  %0 = bitcast double* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %call = call i32 @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEclEv(%"class.thrust::random::linear_congruential_engine"* %1)
  %sub = sub i32 %call, 1
  %conv = uitofp i32 %sub to double
  store double %conv, double* %result, align 8, !tbaa !44
  %2 = load double, double* %result, align 8, !tbaa !44
  %div = fdiv double %2, 0x41DFFFFFFF800000
  store double %div, double* %result, align 8, !tbaa !44
  %3 = load double, double* %result, align 8, !tbaa !44
  %4 = load %"struct.thrust::pair.97"*, %"struct.thrust::pair.97"** %parm.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.97", %"struct.thrust::pair.97"* %4, i32 0, i32 1
  %5 = load double, double* %second, align 8, !tbaa !48
  %6 = load %"struct.thrust::pair.97"*, %"struct.thrust::pair.97"** %parm.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.97", %"struct.thrust::pair.97"* %6, i32 0, i32 0
  %7 = load double, double* %first, align 8, !tbaa !46
  %sub2 = fsub double %5, %7
  %mul = fmul double %3, %sub2
  %8 = load %"struct.thrust::pair.97"*, %"struct.thrust::pair.97"** %parm.addr, align 8
  %first3 = getelementptr inbounds %"struct.thrust::pair.97", %"struct.thrust::pair.97"* %8, i32 0, i32 0
  %9 = load double, double* %first3, align 8, !tbaa !46
  %add = fadd double %mul, %9
  %10 = bitcast double* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %10) #5
  ret double %add
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEclEv(%"class.thrust::random::linear_congruential_engine"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  store %"class.thrust::random::linear_congruential_engine"* %this, %"class.thrust::random::linear_congruential_engine"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %this.addr, align 8
  %m_x = getelementptr inbounds %"class.thrust::random::linear_congruential_engine", %"class.thrust::random::linear_congruential_engine"* %this1, i32 0, i32 0
  %0 = load i32, i32* %m_x, align 4, !tbaa !42
  %call = call i32 @_ZN6thrust6random6detail3modIjLj48271ELj0ELj2147483647EEET_S3_(i32 %0)
  %m_x2 = getelementptr inbounds %"class.thrust::random::linear_congruential_engine", %"class.thrust::random::linear_congruential_engine"* %this1, i32 0, i32 0
  store i32 %call, i32* %m_x2, align 4, !tbaa !42
  %m_x3 = getelementptr inbounds %"class.thrust::random::linear_congruential_engine", %"class.thrust::random::linear_congruential_engine"* %this1, i32 0, i32 0
  %1 = load i32, i32* %m_x3, align 4, !tbaa !42
  ret i32 %1
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6random6detail3modIjLj48271ELj0ELj2147483647EEET_S3_(i32 %x) #0 comdat {
entry:
  %x.addr = alloca i32, align 4
  %f = alloca %"struct.thrust::random::detail::static_mod.98", align 1
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  %0 = bitcast %"struct.thrust::random::detail::static_mod.98"* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = load i32, i32* %x.addr, align 4, !tbaa !11
  %call = call i32 @_ZNK6thrust6random6detail10static_modIjLj48271ELj0ELj2147483647ELb0EEclEj(%"struct.thrust::random::detail::static_mod.98"* %f, i32 %1)
  %2 = bitcast %"struct.thrust::random::detail::static_mod.98"* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %2) #5
  ret i32 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6random6detail10static_modIjLj48271ELj0ELj2147483647ELb0EEclEj(%"struct.thrust::random::detail::static_mod.98"* %this, i32 %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::random::detail::static_mod.98"*, align 8
  %x.addr = alloca i32, align 4
  %t1 = alloca i32, align 4
  %t2 = alloca i32, align 4
  store %"struct.thrust::random::detail::static_mod.98"* %this, %"struct.thrust::random::detail::static_mod.98"** %this.addr, align 8, !tbaa !1
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::random::detail::static_mod.98"*, %"struct.thrust::random::detail::static_mod.98"** %this.addr, align 8
  %0 = bitcast i32* %t1 to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %x.addr, align 4, !tbaa !11
  %rem = urem i32 %1, 44488
  %mul = mul i32 48271, %rem
  store i32 %mul, i32* %t1, align 4, !tbaa !11
  %2 = bitcast i32* %t2 to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %3 = load i32, i32* %x.addr, align 4, !tbaa !11
  %div = udiv i32 %3, 44488
  %mul2 = mul i32 3399, %div
  store i32 %mul2, i32* %t2, align 4, !tbaa !11
  %4 = load i32, i32* %t1, align 4, !tbaa !11
  %5 = load i32, i32* %t2, align 4, !tbaa !11
  %cmp = icmp uge i32 %4, %5
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %6 = load i32, i32* %t1, align 4, !tbaa !11
  %7 = load i32, i32* %t2, align 4, !tbaa !11
  %sub = sub i32 %6, %7
  store i32 %sub, i32* %x.addr, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  %8 = load i32, i32* %t2, align 4, !tbaa !11
  %sub3 = sub i32 2147483647, %8
  %9 = load i32, i32* %t1, align 4, !tbaa !11
  %add = add i32 %sub3, %9
  store i32 %add, i32* %x.addr, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %10 = bitcast i32* %t2 to i8*
  call void @llvm.lifetime.end(i64 4, i8* %10) #5
  %11 = bitcast i32* %t1 to i8*
  call void @llvm.lifetime.end(i64 4, i8* %11) #5
  %12 = load i32, i32* %x.addr, align 4, !tbaa !11
  ret i32 %12
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRaNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.95"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.95"*, align 8
  store %"struct.thrust::detail::cons.95"* %t, %"struct.thrust::detail::cons.95"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.95"*, %"struct.thrust::detail::cons.95"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.95", %"struct.thrust::detail::cons.95"* %0, i32 0, i32 0
  ret i64* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi1EE3getIRamNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.95"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.95"*, align 8
  store %"struct.thrust::detail::cons.95"* %t, %"struct.thrust::detail::cons.95"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.95"*, %"struct.thrust::detail::cons.95"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.95", %"struct.thrust::detail::cons.95"* %0, i32 0, i32 1
  %call = call dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.96"* dereferenceable(8) %tail)
  ret i8* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.96"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.96"*, align 8
  store %"struct.thrust::detail::cons.96"* %t, %"struct.thrust::detail::cons.96"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.96"*, %"struct.thrust::detail::cons.96"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.96", %"struct.thrust::detail::cons.96"* %0, i32 0, i32 0
  %ref = load i8*, i8** %head, align 8, !tbaa !7
  ret i8* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references"**, align 8
  store %"class.thrust::detail::tuple_of_iterator_references"** %ptr, %"class.thrust::detail::tuple_of_iterator_references"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references"**, %"class.thrust::detail::tuple_of_iterator_references"*** %ptr.addr, align 8
  %1 = load %"class.thrust::detail::tuple_of_iterator_references"*, %"class.thrust::detail::tuple_of_iterator_references"** %0, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references"* %1)
  ret %"class.thrust::detail::tuple_of_iterator_references"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRaNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references"* %ptr, %"class.thrust::detail::tuple_of_iterator_references"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"class.thrust::detail::tuple_of_iterator_references"*, %"class.thrust::detail::tuple_of_iterator_references"** %ptr.addr, align 8, !tbaa !1
  ret %"class.thrust::detail::tuple_of_iterator_references"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references", align 8
  %f.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %f, %"class.thrust::zip_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %f.addr, align 8
  %call = call { i64, i8* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references", %"class.thrust::detail::tuple_of_iterator_references"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %coerce.dive, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive1 to { i64, i8* }*
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i8* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i8* } %call, 1
  store i8* %5, i8** %4, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references", %"class.thrust::detail::tuple_of_iterator_references"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %coerce.dive2, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive3 to { i64, i8* }*
  %7 = load { i64, i8* }, { i64, i8* }* %6, align 8
  ret { i64, i8* } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.91"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.91"*, align 8
  store %"class.thrust::iterator_facade.91"* %this, %"class.thrust::iterator_facade.91"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.91"*, %"class.thrust::iterator_facade.91"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.91"* %this1 to %"class.thrust::zip_iterator"*
  ret %"class.thrust::zip_iterator"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references", align 8
  %this.addr = alloca %"class.thrust::zip_iterator"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.94", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator"* %this1)
  %call2 = call { i64, i8* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %ref.tmp, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive to { i64, i8* }*
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i8* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i8* } %call2, 1
  store i8* %4, i8** %3, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesImRaNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references"* %retval, %"class.thrust::tuple.94"* dereferenceable(16) %ref.tmp)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references", %"class.thrust::detail::tuple_of_iterator_references"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %coerce.dive3, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive4 to { i64, i8* }*
  %6 = load { i64, i8* }, { i64, i8* }* %5, align 8
  ret { i64, i8* } %6
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.94", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple"* %t, %"class.thrust::tuple"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %t.addr, align 8
  %call = call { i64, i8* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive to { i64, i8* }*
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i8* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i8* } %call, 1
  store i8* %5, i8** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive1 to { i64, i8* }*
  %7 = load { i64, i8* }, { i64, i8* }* %6, align 8
  ret { i64, i8* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesImRaNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references"* %this, %"class.thrust::tuple.94"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references"*, align 8
  %other.addr = alloca %"class.thrust::tuple.94"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references"* %this, %"class.thrust::detail::tuple_of_iterator_references"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.94"* %other, %"class.thrust::tuple.94"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references"*, %"class.thrust::detail::tuple_of_iterator_references"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references"* %this1 to %"class.thrust::tuple.94"*
  %1 = load %"class.thrust::tuple.94"*, %"class.thrust::tuple.94"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.94"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.94"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.94", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple"*, align 8
  %ref.tmp = alloca i64, align 8
  store %"class.thrust::tuple"* %t, %"class.thrust::tuple"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple"* %0 to %"struct.thrust::detail::cons"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons"* dereferenceable(16) %1)
  %call1 = call i64 @_ZN6thrust6detail20dereference_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  store i64 %call1, i64* %ref.tmp, align 8, !tbaa !13
  %2 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple"* %2 to %"struct.thrust::detail::cons"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPaEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons"* dereferenceable(16) %3)
  %call3 = call dereferenceable(1) i8* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPaEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %call2)
  call void @_ZN6thrust5tupleImRaNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.94"* %retval, i64* dereferenceable(8) %ref.tmp, i8* dereferenceable(1) %call3)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.94", %"class.thrust::tuple.94"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.95"* %coerce.dive to { i64, i8* }*
  %5 = load { i64, i8* }, { i64, i8* }* %4, align 8
  ret { i64, i8* } %5
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6detail20dereference_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %it, %"class.thrust::counting_iterator"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %it.addr, align 8
  %1 = bitcast %"class.thrust::counting_iterator"* %0 to %"class.thrust::iterator_facade.84"*
  %call = call i64 @_ZNK6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxEdeEv(%"class.thrust::iterator_facade.84"* %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPaEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator"* %it, %"class.thrust::detail::normal_iterator"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %0 to %"class.thrust::iterator_facade"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEdeEv(%"class.thrust::iterator_facade"* %1)
  ret i8* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleImRaNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.94"* %this, i64* dereferenceable(8) %t0, i8* dereferenceable(1) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.94"*, align 8
  %t0.addr = alloca i64*, align 8
  %t1.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.94"* %this, %"class.thrust::tuple.94"** %this.addr, align 8, !tbaa !1
  store i64* %t0, i64** %t0.addr, align 8, !tbaa !7
  store i8* %t1, i8** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.94"*, %"class.thrust::tuple.94"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.94"* %this1 to %"struct.thrust::detail::cons.95"*
  %1 = load i64*, i64** %t0.addr, align 8
  %2 = load i8*, i8** %t1.addr, align 8
  call void @_ZN6thrust6detail4consImNS1_IRaNS_9null_typeEEEEC2IKmaKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.95"* %0, i64* dereferenceable(8) %1, i8* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxEdeEv(%"class.thrust::iterator_facade.84"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.84"*, align 8
  store %"class.thrust::iterator_facade.84"* %this, %"class.thrust::iterator_facade.84"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.84"*, %"class.thrust::iterator_facade.84"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZNK6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxE7derivedEv(%"class.thrust::iterator_facade.84"* %this1)
  %call2 = call i64 @_ZN6thrust20iterator_core_access11dereferenceINS_17counting_iteratorImNS_11use_defaultES3_S3_EEEENT_9referenceERKS5_(%"class.thrust::counting_iterator"* dereferenceable(8) %call)
  ret i64 %call2
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access11dereferenceINS_17counting_iteratorImNS_11use_defaultES3_S3_EEEENT_9referenceERKS5_(%"class.thrust::counting_iterator"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"class.thrust::counting_iterator"* %f, %"class.thrust::counting_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %f.addr, align 8
  %call = call i64 @_ZNK6thrust17counting_iteratorImNS_11use_defaultES1_S1_E11dereferenceEv(%"class.thrust::counting_iterator"* %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZNK6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxE7derivedEv(%"class.thrust::iterator_facade.84"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.84"*, align 8
  store %"class.thrust::iterator_facade.84"* %this, %"class.thrust::iterator_facade.84"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.84"*, %"class.thrust::iterator_facade.84"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.84"* %this1 to %"class.thrust::counting_iterator"*
  ret %"class.thrust::counting_iterator"* %0
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust17counting_iteratorImNS_11use_defaultES1_S1_E11dereferenceEv(%"class.thrust::counting_iterator"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"class.thrust::counting_iterator"* %this, %"class.thrust::counting_iterator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::counting_iterator"* %this1 to %"class.thrust::iterator_adaptor.83"*
  %call = call dereferenceable(8) i64* @_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE14base_referenceEv(%"class.thrust::iterator_adaptor.83"* %0)
  %1 = load i64, i64* %call, align 8, !tbaa !13
  ret i64 %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i64* @_ZNK6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE14base_referenceEv(%"class.thrust::iterator_adaptor.83"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.83"*, align 8
  store %"class.thrust::iterator_adaptor.83"* %this, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.83"*, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.83", %"class.thrust::iterator_adaptor.83"* %this1, i32 0, i32 0
  ret i64* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEdeEv(%"class.thrust::iterator_facade"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade"*, align 8
  store %"class.thrust::iterator_facade"* %this, %"class.thrust::iterator_facade"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv(%"class.thrust::iterator_facade"* %this1)
  %call2 = call dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPaEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %call)
  ret i8* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPaEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  store %"class.thrust::detail::normal_iterator"* %f, %"class.thrust::detail::normal_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %0 to %"class.thrust::iterator_adaptor"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor"* %1)
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv(%"class.thrust::iterator_facade"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade"*, align 8
  store %"class.thrust::iterator_facade"* %this, %"class.thrust::iterator_facade"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade"* %this1 to %"class.thrust::detail::normal_iterator"*
  ret %"class.thrust::detail::normal_iterator"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  store %"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !36
  ret i8* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consImNS1_IRaNS_9null_typeEEEEC2IKmaKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.95"* %this, i64* dereferenceable(8) %t1, i8* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.95"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca i8*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.95"* %this, %"struct.thrust::detail::cons.95"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store i8* %t2, i8** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.95"*, %"struct.thrust::detail::cons.95"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.95", %"struct.thrust::detail::cons.95"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !49
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.95", %"struct.thrust::detail::cons.95"* %this1, i32 0, i32 1
  %2 = load i8*, i8** %t2.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRaNS_9null_typeEEC2IaEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.96"* %tail, i8* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRaNS_9null_typeEEC2IaEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.96"* %this, i8* dereferenceable(1) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.96"*, align 8
  %t1.addr = alloca i8*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.96"* %this, %"struct.thrust::detail::cons.96"** %this.addr, align 8, !tbaa !1
  store i8* %t1, i8** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.96"*, %"struct.thrust::detail::cons.96"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.96", %"struct.thrust::detail::cons.96"* %this9, i32 0, i32 0
  %9 = load i8*, i8** %t1.addr, align 8
  store i8* %9, i8** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPaEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %f, %"class.thrust::zip_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImaSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRaSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.91"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.91"*, align 8
  store %"class.thrust::iterator_facade.91"* %this, %"class.thrust::iterator_facade.91"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.91"*, %"class.thrust::iterator_facade.91"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.91"* %this1 to %"class.thrust::zip_iterator"*
  ret %"class.thrust::zip_iterator"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator", %"class.thrust::zip_iterator"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple"* dereferenceable(16) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPaEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple"* %t, %"class.thrust::tuple"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple"* %0 to %"struct.thrust::detail::cons"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple"* %2 to %"struct.thrust::detail::cons"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.92"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPaEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.92"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %it, %"class.thrust::counting_iterator"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %it.addr, align 8
  %1 = bitcast %"class.thrust::counting_iterator"* %0 to %"class.thrust::iterator_facade.84"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxEppEv(%"class.thrust::iterator_facade.84"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons"*, align 8
  store %"struct.thrust::detail::cons"* %this, %"struct.thrust::detail::cons"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %this1, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPaEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.92"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.92"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.92"* %t, %"struct.thrust::detail::cons.92"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.92"*, %"struct.thrust::detail::cons.92"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.92"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPaEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.92"*, %"struct.thrust::detail::cons.92"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.92"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.92"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons"*, align 8
  store %"struct.thrust::detail::cons"* %this, %"struct.thrust::detail::cons"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.92"* %tail
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxEppEv(%"class.thrust::iterator_facade.84"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.84"*, align 8
  store %"class.thrust::iterator_facade.84"* %this, %"class.thrust::iterator_facade.84"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.84"*, %"class.thrust::iterator_facade.84"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxE7derivedEv(%"class.thrust::iterator_facade.84"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_17counting_iteratorImNS_11use_defaultES3_S3_EEEEvRT_(%"class.thrust::counting_iterator"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxE7derivedEv(%"class.thrust::iterator_facade.84"* %this1)
  ret %"class.thrust::counting_iterator"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_17counting_iteratorImNS_11use_defaultES3_S3_EEEEvRT_(%"class.thrust::counting_iterator"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::counting_iterator"*, align 8
  store %"class.thrust::counting_iterator"* %f, %"class.thrust::counting_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %f.addr, align 8
  %1 = bitcast %"class.thrust::counting_iterator"* %0 to %"class.thrust::iterator_adaptor.83"*
  call void @_ZN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE9incrementEv(%"class.thrust::iterator_adaptor.83"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust15iterator_facadeINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxE7derivedEv(%"class.thrust::iterator_facade.84"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.84"*, align 8
  store %"class.thrust::iterator_facade.84"* %this, %"class.thrust::iterator_facade.84"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.84"*, %"class.thrust::iterator_facade.84"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.84"* %this1 to %"class.thrust::counting_iterator"*
  ret %"class.thrust::counting_iterator"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxE9incrementEv(%"class.thrust::iterator_adaptor.83"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.83"*, align 8
  store %"class.thrust::iterator_adaptor.83"* %this, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.83"*, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.83", %"class.thrust::iterator_adaptor.83"* %this1, i32 0, i32 0
  %0 = load i64, i64* %m_iterator, align 8, !tbaa !52
  %inc = add i64 %0, 1
  store i64 %inc, i64* %m_iterator, align 8, !tbaa !52
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPaEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator"* %it, %"class.thrust::detail::normal_iterator"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %0 to %"class.thrust::iterator_facade"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEppEv(%"class.thrust::iterator_facade"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.92"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.92"*, align 8
  store %"struct.thrust::detail::cons.92"* %this, %"struct.thrust::detail::cons.92"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.92"*, %"struct.thrust::detail::cons.92"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.92", %"struct.thrust::detail::cons.92"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_() #9 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %0 = alloca %"struct.thrust::null_type", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.92"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.92"*, align 8
  store %"struct.thrust::detail::cons.92"* %this, %"struct.thrust::detail::cons.92"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.92"*, %"struct.thrust::detail::cons.92"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEppEv(%"class.thrust::iterator_facade"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade"*, align 8
  store %"class.thrust::iterator_facade"* %this, %"class.thrust::iterator_facade"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv(%"class.thrust::iterator_facade"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPaEEEEvRT_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv(%"class.thrust::iterator_facade"* %this1)
  ret %"class.thrust::detail::normal_iterator"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPaEEEEvRT_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  store %"class.thrust::detail::normal_iterator"* %f, %"class.thrust::detail::normal_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %0 to %"class.thrust::iterator_adaptor"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv(%"class.thrust::iterator_facade"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade"*, align 8
  store %"class.thrust::iterator_facade"* %this, %"class.thrust::iterator_facade"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade"* %this1 to %"class.thrust::detail::normal_iterator"*
  ret %"class.thrust::detail::normal_iterator"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  store %"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !36
  %incdec.ptr = getelementptr inbounds i8, i8* %0, i32 1
  store i8* %incdec.ptr, i8** %m_iterator, align 8, !tbaa !36
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple"* %this, %"class.thrust::tuple"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple"*, align 8
  %.addr = alloca %"class.thrust::tuple"*, align 8
  store %"class.thrust::tuple"* %this, %"class.thrust::tuple"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple"* %0, %"class.thrust::tuple"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple"* %this1 to %"struct.thrust::detail::cons"*
  %2 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple"* %2 to %"struct.thrust::detail::cons"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons"* %1, %"struct.thrust::detail::cons"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons"* %this, %"struct.thrust::detail::cons"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons"*, align 8
  %.addr = alloca %"struct.thrust::detail::cons"*, align 8
  store %"struct.thrust::detail::cons"* %this, %"struct.thrust::detail::cons"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::cons"* %0, %"struct.thrust::detail::cons"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %.addr, align 8
  %head2 = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %1, i32 0, i32 0
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %head2)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %.addr, align 8
  %tail3 = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %2, i32 0, i32 1
  %3 = bitcast %"struct.thrust::detail::cons.92"* %tail to i8*
  %4 = bitcast %"struct.thrust::detail::cons.92"* %tail3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple"* %this, %"class.thrust::tuple"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple"*, align 8
  %.addr = alloca %"class.thrust::tuple"*, align 8
  store %"class.thrust::tuple"* %this, %"class.thrust::tuple"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple"* %0, %"class.thrust::tuple"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple"* %this1 to %"struct.thrust::detail::cons"*
  %2 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple"* %2 to %"struct.thrust::detail::cons"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons"* %1, %"struct.thrust::detail::cons"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPaEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator"* %this, %"class.thrust::tuple"* %iterator_tuple) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator"*, align 8
  store %"class.thrust::zip_iterator"* %this, %"class.thrust::zip_iterator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator"*, %"class.thrust::zip_iterator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator"* %this1 to %"class.thrust::iterator_facade.91"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator", %"class.thrust::zip_iterator"* %this1, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple"* %m_iterator_tuple, %"class.thrust::tuple"* dereferenceable(16) %iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPaEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple"*, align 8
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple"* %this, %"class.thrust::tuple"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %t1, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple"*, %"class.thrust::tuple"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple"* %this1 to %"struct.thrust::detail::cons"*
  %1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons"* %0, %"class.thrust::counting_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPaEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons"*, align 8
  %t1.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons"* %this, %"struct.thrust::detail::cons"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t1, %"class.thrust::counting_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %t2, %"class.thrust::detail::normal_iterator"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t1.addr, align 8
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %0)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.92"* %tail, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.92"* %this, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.92"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.92"* %this, %"struct.thrust::detail::cons.92"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator"* %t1, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.92"*, %"struct.thrust::detail::cons.92"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.92", %"struct.thrust::detail::cons.92"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPaEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons"*, align 8
  store %"struct.thrust::detail::cons"* %t, %"struct.thrust::detail::cons"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons"*, %"struct.thrust::detail::cons"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons", %"struct.thrust::detail::cons"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.92"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.92"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.92"*, align 8
  store %"struct.thrust::detail::cons.92"* %t, %"struct.thrust::detail::cons.92"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.92"*, %"struct.thrust::detail::cons.92"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.92", %"struct.thrust::detail::cons.92"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS_14any_system_tagENS0_3cpp6detail3tagEEENS_6detail9enable_ifIXsr6thrust6detail7is_sameIT0_NS9_14minimum_systemIT_SB_NS9_19minimum_type_detail14any_conversionESF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_SF_E4typeEEE5valueERSB_E4typeERNS_16execution_policyISD_EERNSL_ISB_EE(%"struct.thrust::execution_policy.89"* dereferenceable(1), %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2) #1 comdat {
entry:
  %.addr = alloca %"struct.thrust::execution_policy.89"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  store %"struct.thrust::execution_policy.89"* %0, %"struct.thrust::execution_policy.89"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxEC2ERKm(%"class.thrust::iterator_adaptor.83"* %this, i64* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.83"*, align 8
  %iter.addr = alloca i64*, align 8
  store %"class.thrust::iterator_adaptor.83"* %this, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8, !tbaa !1
  store i64* %iter, i64** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.83"*, %"class.thrust::iterator_adaptor.83"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.83"* %this1 to %"class.thrust::iterator_facade.84"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.83", %"class.thrust::iterator_adaptor.83"* %this1, i32 0, i32 0
  %1 = load i64*, i64** %iter.addr, align 8
  %2 = load i64, i64* %1, align 8, !tbaa !13
  store i64 %2, i64* %m_iterator, align 8, !tbaa !52
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEC2Em(%"class.thrust::detail::vector_base.46"* %this, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.std::allocator.48", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  call void @_ZNSaIN6thrust4pairIaaEEEC2Ev(%"class.std::allocator.48"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EEC2ERKS4_(%"class.thrust::detail::contiguous_storage.47"* %m_storage, %"class.std::allocator.48"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.49"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEED2Ev to void (%"class.std::allocator.48"*)*)(%"class.std::allocator.48"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !54
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE12default_initEm(%"class.thrust::detail::vector_base.46"* %this1, i64 %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.49"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEED2Ev to void (%"class.std::allocator.48"*)*)(%"class.std::allocator.48"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.47"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIN6thrust4pairIaaEEEC2Ev(%"class.std::allocator.48"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.48"*, align 8
  store %"class.std::allocator.48"* %this, %"class.std::allocator.48"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.48"* %this1 to %"class.__gnu_cxx::new_allocator.49"*
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEEC2Ev(%"class.__gnu_cxx::new_allocator.49"* %0) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EEC2ERKS4_(%"class.thrust::detail::contiguous_storage.47"* %this, %"class.std::allocator.48"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  %alloc.addr = alloca %"class.std::allocator.48"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.48"* %alloc, %"class.std::allocator.48"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %alloc.addr, align 8
  call void @_ZNSaIN6thrust4pairIaaEEEC2ERKS2_(%"class.std::allocator.48"* %m_allocator, %"class.std::allocator.48"* dereferenceable(1) %0) #5
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIaaEEEC2ES4_(%"class.thrust::detail::normal_iterator.51"* %m_begin, %"struct.thrust::pair"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !59
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.49"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEED2Ev to void (%"class.std::allocator.48"*)*)(%"class.std::allocator.48"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEED2Ev(%"class.__gnu_cxx::new_allocator.49"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  store %"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.49"*, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE12default_initEm(%"class.thrust::detail::vector_base.46"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.51", align 8
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE8allocateEm(%"class.thrust::detail::contiguous_storage.47"* %m_storage, i64 %1)
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 1
  store i64 %2, i64* %m_size, align 8, !tbaa !54
  %m_storage2 = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive3, align 8
  %call4 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.46"* %this1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive5, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm(%"class.thrust::detail::contiguous_storage.47"* %m_storage2, %"struct.thrust::pair"* %3, i64 %call4)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.47"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE10deallocateEv(%"class.thrust::detail::contiguous_storage.47"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.49"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEED2Ev to void (%"class.std::allocator.48"*)*)(%"class.std::allocator.48"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.49"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEED2Ev to void (%"class.std::allocator.48"*)*)(%"class.std::allocator.48"* %m_allocator2) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEEC2Ev(%"class.__gnu_cxx::new_allocator.49"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  store %"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.49"*, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIN6thrust4pairIaaEEEC2ERKS2_(%"class.std::allocator.48"* %this, %"class.std::allocator.48"* dereferenceable(1) %__a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.48"*, align 8
  %__a.addr = alloca %"class.std::allocator.48"*, align 8
  store %"class.std::allocator.48"* %this, %"class.std::allocator.48"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.48"* %__a, %"class.std::allocator.48"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.48"* %this1 to %"class.__gnu_cxx::new_allocator.49"*
  %1 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator.48"* %1 to %"class.__gnu_cxx::new_allocator.49"*
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEEC2ERKS4_(%"class.__gnu_cxx::new_allocator.49"* %0, %"class.__gnu_cxx::new_allocator.49"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIaaEEEC2ES4_(%"class.thrust::detail::normal_iterator.51"* %this, %"struct.thrust::pair"* %p) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::detail::normal_iterator.51"* %this, %"class.thrust::detail::normal_iterator.51"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.51"* %this1 to %"class.thrust::iterator_adaptor.52"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_(%"class.thrust::iterator_adaptor.52"* %0, %"struct.thrust::pair"** dereferenceable(8) %p.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEEC2ERKS4_(%"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  store %"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator.49"* %0, %"class.__gnu_cxx::new_allocator.49"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator.49"*, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_(%"class.thrust::iterator_adaptor.52"* %this, %"struct.thrust::pair"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.52"*, align 8
  %iter.addr = alloca %"struct.thrust::pair"**, align 8
  store %"class.thrust::iterator_adaptor.52"* %this, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"** %iter, %"struct.thrust::pair"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.52"*, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.52"* %this1 to %"class.thrust::iterator_facade.53"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !60
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE8allocateEm(%"class.thrust::detail::contiguous_storage.47"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %ref.tmp3 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE8allocateERS4_m(%"class.std::allocator.48"* dereferenceable(1) %m_allocator, i64 %1)
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIaaEEEC2ES4_(%"class.thrust::detail::normal_iterator.51"* %ref.tmp, %"struct.thrust::pair"* %call)
  %2 = bitcast %"class.thrust::detail::normal_iterator.51"* %m_begin to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.51"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 2
  store i64 %4, i64* %m_size, align 8, !tbaa !59
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIaaEEEC2ES4_(%"class.thrust::detail::normal_iterator.51"* %ref.tmp3, %"struct.thrust::pair"* null)
  %5 = bitcast %"class.thrust::detail::normal_iterator.51"* %m_begin2 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.51"* %ref.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size4, align 8, !tbaa !59
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm(%"class.thrust::detail::contiguous_storage.47"* %this, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  %n.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this2, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.51"* %first to %"class.thrust::iterator_adaptor.52"*
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.52"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23default_construct_rangeISaINS_4pairIaaEEEPS3_mEEvRT_T0_T1_(%"class.std::allocator.48"* dereferenceable(1) %m_allocator, %"struct.thrust::pair"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.46"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !54
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE8allocateERS4_m(%"class.std::allocator.48"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m(%"class.std::allocator.48"* dereferenceable(1) %0, i64 %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m(%"class.std::allocator.48"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.48"* %0 to %"class.__gnu_cxx::new_allocator.49"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.49"* %1, i64 %2, i8* null)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.49"* %this, i64 %__n, i8*) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  %__n.addr = alloca i64, align 8
  %.addr = alloca i8*, align 8
  store %"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.49"*, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8
  %1 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.49"* %this1) #5
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZSt17__throw_bad_allocv() #15
  unreachable

if.end:                                           ; preds = %entry
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %mul = mul i64 %2, 2
  %call2 = call i8* @_Znwm(i64 %mul)
  %3 = bitcast i8* %call2 to %"struct.thrust::pair"*
  ret %"struct.thrust::pair"* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.49"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  store %"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.49"*, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8
  ret i64 9223372036854775807
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23default_construct_rangeISaINS_4pairIaaEEEPS3_mEEvRT_T0_T1_(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIaaEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_(%"class.std::allocator.48"* dereferenceable(1) %0, %"struct.thrust::pair"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.52"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.52"*, align 8
  store %"class.thrust::iterator_adaptor.52"* %this, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.52"*, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIaaEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaINS_4pairIaaEEEE3getERS4_(%"class.std::allocator.48"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEC2ERS5_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %agg.tmp, %"class.std::allocator.48"* dereferenceable(1) %4)
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %agg.tmp, i32 0, i32 0
  %5 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %coerce.dive, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIaaEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair"* %2, i64 %3, %"class.std::allocator.48"* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIaaEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first, i64 %n, %"class.std::allocator.48"* %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %f, i32 0, i32 0
  store %"class.std::allocator.48"* %f.coerce, %"class.std::allocator.48"** %coerce.dive, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %first, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !62
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %agg.tmp, i32 0, i32 0
  %6 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %coerce.dive2, align 8
  %call3 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIaaEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair"* %2, i64 %3, %"class.std::allocator.48"* %6)
  ret %"struct.thrust::pair"* %call3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemISaINS_4pairIaaEEEE3getERS4_(%"class.std::allocator.48"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIaaEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_(%"class.std::allocator.48"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEC2ERS5_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %this, %"class.std::allocator.48"* dereferenceable(1) %a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"*, align 8
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"** %this.addr, align 8
  %a2 = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  store %"class.std::allocator.48"* %0, %"class.std::allocator.48"** %a2, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIaaEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair"* %first, i64 %n, %"class.std::allocator.48"* %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.99", align 8
  %i = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %f, i32 0, i32 0
  store %"class.std::allocator.48"* %f.coerce, %"class.std::allocator.48"** %coerce.dive, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %first, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.99"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.99"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* dereferenceable(8) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEEvEclIS5_EEvRT_(%"struct.thrust::detail::wrapped_function.99"* %wrapped_f, %"struct.thrust::pair"* dereferenceable(2) %6)
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %7, i32 1
  store %"struct.thrust::pair"* %incdec.ptr, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.99"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 8, i8* %10) #5
  ret %"struct.thrust::pair"* %9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.99"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* dereferenceable(8) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.99"*, align 8
  %f.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"*, align 8
  store %"struct.thrust::detail::wrapped_function.99"* %this, %"struct.thrust::detail::wrapped_function.99"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %f, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.99"*, %"struct.thrust::detail::wrapped_function.99"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.99", %"struct.thrust::detail::wrapped_function.99"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false), !tbaa.struct !62
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEEvEclIS5_EEvRT_(%"struct.thrust::detail::wrapped_function.99"* %this, %"struct.thrust::pair"* dereferenceable(2) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.99"*, align 8
  %x.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::detail::wrapped_function.99"* %this, %"struct.thrust::detail::wrapped_function.99"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %x, %"struct.thrust::pair"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.99"*, %"struct.thrust::detail::wrapped_function.99"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.99", %"struct.thrust::detail::wrapped_function.99"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_4pairIaaEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair"* dereferenceable(2) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEclIS4_EEvRT_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %m_f, %"struct.thrust::pair"* dereferenceable(2) %call)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIaaEEEEclIS4_EEvRT_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %this, %"struct.thrust::pair"* dereferenceable(2) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"*, align 8
  %x.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %x, %"struct.thrust::pair"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"** %this.addr, align 8
  %a = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator"* %this1, i32 0, i32 0
  %ref = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  call void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE9constructIS3_EEvRS4_PT_(%"class.std::allocator.48"* dereferenceable(1) %ref, %"struct.thrust::pair"* %0)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_4pairIaaEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair"* dereferenceable(2) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::pair"* %ref, %"struct.thrust::pair"** %ref.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %ref.addr, align 8
  store %"struct.thrust::pair"* %0, %"struct.thrust::pair"** %ref.tmp, align 8, !tbaa !1
  %call = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castIPNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_(%"struct.thrust::pair"** dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE9constructIS3_EEvRS4_PT_(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  call void @_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIaaEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_(%"class.std::allocator.48"* dereferenceable(1) %0, %"struct.thrust::pair"* %1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIaaEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p) #8 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.48"* %0 to %"class.__gnu_cxx::new_allocator.49"*
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE9constructIS3_JEEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.49"* %1, %"struct.thrust::pair"* %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE9constructIS3_JEEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.49"* %this, %"struct.thrust::pair"* %__p) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  %__p.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %__p, %"struct.thrust::pair"** %__p.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.49"*, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %__p.addr, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::pair"* %0 to i8*
  %2 = bitcast i8* %1 to %"struct.thrust::pair"*
  call void @_ZN6thrust4pairIaaEC2Ev(%"struct.thrust::pair"* %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIaaEC2Ev(%"struct.thrust::pair"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::pair"* %this, %"struct.thrust::pair"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %this1, i32 0, i32 0
  store i8 0, i8* %first, align 1, !tbaa !26
  %second = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %this1, i32 0, i32 1
  store i8 0, i8* %second, align 1, !tbaa !29
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castIPNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_(%"struct.thrust::pair"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"struct.thrust::pair"**, align 8
  store %"struct.thrust::pair"** %ptr, %"struct.thrust::pair"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %ptr.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %0, align 8, !tbaa !1
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsIPNS_4pairIaaEEE3getES4_(%"struct.thrust::pair"* %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsIPNS_4pairIaaEEE3getES4_(%"struct.thrust::pair"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::pair"* %ptr, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIaaEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_(%"class.std::allocator.48"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE10deallocateEv(%"class.thrust::detail::contiguous_storage.47"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.51", align 8
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.47"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.51"* %m_begin to %"class.thrust::iterator_adaptor.52"*
  %call2 = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.52"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call2, align 8, !tbaa !1
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.47"* %this1)
  call void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE10deallocateERS4_PS3_m(%"class.std::allocator.48"* dereferenceable(1) %m_allocator, %"struct.thrust::pair"* %1, i64 %call3)
  %m_begin4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIaaEEEC2ES4_(%"class.thrust::detail::normal_iterator.51"* %ref.tmp, %"struct.thrust::pair"* null)
  %2 = bitcast %"class.thrust::detail::normal_iterator.51"* %m_begin4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.51"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !59
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.47"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !59
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE10deallocateERS4_PS3_m(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m(%"class.std::allocator.48"* dereferenceable(1) %0, %"struct.thrust::pair"* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIaaEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.48"* %0 to %"class.__gnu_cxx::new_allocator.49"*
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE10deallocateEPS3_m(%"class.__gnu_cxx::new_allocator.49"* %1, %"struct.thrust::pair"* %2, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIaaEEE10deallocateEPS3_m(%"class.__gnu_cxx::new_allocator.49"* %this, %"struct.thrust::pair"* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.49"*, align 8
  %__p.addr = alloca %"struct.thrust::pair"*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.49"* %this, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %__p, %"struct.thrust::pair"** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.49"*, %"class.__gnu_cxx::new_allocator.49"** %this.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %__p.addr, align 8, !tbaa !1
  %2 = bitcast %"struct.thrust::pair"* %1 to i8*
  call void @_ZdlPv(i8* %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPaEES8_NS6_IPNS_4pairIaaEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first1.coerce, i8* %last1.coerce, i8* %first2.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp12 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive2, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive4, i32 0, i32 0
  store i8* %first2.coerce, i8** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call8 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call8 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp9 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp10 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.51"* %agg.tmp11 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive13, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp9, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive15, i32 0, i32 0
  %11 = load i8*, i8** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp10, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive17, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp11, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive19, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive20, align 8
  %call21 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPaEESA_NS8_IPNS_4pairIaaEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i8* %10, i8* %11, i8* %12, %"struct.thrust::pair"* %13)
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair"* %call21, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive24, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive25, align 8
  ret %"struct.thrust::pair"* %14
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system3) #0 comdat {
entry:
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system3.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system3, %"struct.thrust::execution_policy.88"** %system3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::execution_policy.88"*
  %3 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system3.addr, align 8
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  ret %"struct.thrust::system::cpp::detail::tag"* %call1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPaEESA_NS8_IPNS_4pairIaaEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first1.coerce, i8* %last1.coerce, i8* %first2.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.100", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.100", align 8
  %agg.tmp8 = alloca %"class.thrust::tuple.102", align 8
  %agg.tmp9 = alloca %"class.thrust::zip_iterator.100", align 8
  %agg.tmp10 = alloca %"class.thrust::tuple.102", align 8
  %agg.tmp11 = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %agg.tmp12 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive2, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive4, i32 0, i32 0
  store i8* %first2.coerce, i8** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.100"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.102"* sret %agg.tmp8, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.100"* sret %agg.tmp, %"class.thrust::tuple.102"* byval align 8 %agg.tmp8)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.102"* sret %agg.tmp10, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.100"* sret %agg.tmp9, %"class.thrust::tuple.102"* byval align 8 %agg.tmp10)
  call void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEC2ES2_(%"struct.thrust::detail::binary_transform_functor"* %agg.tmp11)
  call void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEESA_NS8_IPNS_4pairIaaEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_(%"class.thrust::zip_iterator.100"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, %"class.thrust::zip_iterator.100"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.100"* byval align 8 %agg.tmp9)
  %call = call dereferenceable(24) %"class.thrust::tuple.102"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.100"* %zipped_result)
  %3 = bitcast %"class.thrust::tuple.102"* %call to %"struct.thrust::detail::cons.103"*
  %call13 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.51"* %retval to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.51"* %call13 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.100"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %6) #5
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive14, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  ret %"struct.thrust::pair"* %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEESA_NS8_IPNS_4pairIaaEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_(%"class.thrust::zip_iterator.100"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.100"* byval align 8 %first, %"class.thrust::zip_iterator.100"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.100", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.100", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::zip_iterator.100"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::zip_iterator.100"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %4 = bitcast %"class.thrust::zip_iterator.100"* %agg.tmp2 to i8*
  %5 = bitcast %"class.thrust::zip_iterator.100"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor"* %agg.tmp3 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEESC_NSA_IPNS_4pairIaaEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_(%"class.thrust::zip_iterator.100"* sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"class.thrust::zip_iterator.100"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.100"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.100"* noalias sret %agg.result, %"class.thrust::tuple.102"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.102", align 8
  %0 = bitcast %"class.thrust::tuple.102"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.102"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_(%"class.thrust::zip_iterator.100"* %agg.result, %"class.thrust::tuple.102"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.102"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  store %"class.thrust::detail::normal_iterator"* %t0, %"class.thrust::detail::normal_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %t1, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.51"* %t2, %"class.thrust::detail::normal_iterator.51"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_(%"class.thrust::tuple.102"* %agg.result, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEC2ES2_(%"struct.thrust::detail::binary_transform_functor"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %struct.make_pair_functor, align 1
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor"*, align 8
  store %"struct.thrust::detail::binary_transform_functor"* %this, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor"*, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor", %"struct.thrust::detail::binary_transform_functor"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %c, %"struct.thrust::detail::cons.103"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEENS4_IPaEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.103"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.51"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.102"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.100"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  store %"class.thrust::zip_iterator.100"* %this, %"class.thrust::zip_iterator.100"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.100", %"class.thrust::zip_iterator.100"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.102"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEESC_NSA_IPNS_4pairIaaEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_(%"class.thrust::zip_iterator.100"* noalias sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"class.thrust::zip_iterator.100"* byval align 8 %first, %"class.thrust::zip_iterator.100"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.106", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.107", align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %1 = bitcast %"struct.thrust::detail::wrapped_function.106"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEC2ERKS4_(%"struct.thrust::detail::wrapped_function.106"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor"* dereferenceable(1) %f)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = bitcast %"class.thrust::zip_iterator.100"* %first to %"class.thrust::iterator_facade.101"*
  %3 = bitcast %"class.thrust::zip_iterator.100"* %last to %"class.thrust::iterator_facade.101"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.101"* dereferenceable(1) %2, %"class.thrust::iterator_facade.101"* dereferenceable(1) %3)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"class.thrust::zip_iterator.100"* %first to %"class.thrust::iterator_facade.101"*
  call void @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv(%"class.thrust::detail::tuple_of_iterator_references.107"* sret %ref.tmp, %"class.thrust::iterator_facade.101"* %4)
  call void @_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRaS8_RNS_4pairIaaEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.106"* %wrapped_f, %"class.thrust::detail::tuple_of_iterator_references.107"* dereferenceable(24) %ref.tmp)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %5 = bitcast %"class.thrust::zip_iterator.100"* %first to %"class.thrust::iterator_facade.101"*
  %call1 = call dereferenceable(24) %"class.thrust::zip_iterator.100"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv(%"class.thrust::iterator_facade.101"* %5)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %6 = bitcast %"class.thrust::zip_iterator.100"* %agg.result to i8*
  %7 = bitcast %"class.thrust::zip_iterator.100"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 24, i32 8, i1 false)
  %8 = bitcast %"struct.thrust::detail::wrapped_function.106"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %8) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEC2ERKS4_(%"struct.thrust::detail::wrapped_function.106"* %this, %"struct.thrust::detail::binary_transform_functor"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.106"*, align 8
  %f.addr = alloca %"struct.thrust::detail::binary_transform_functor"*, align 8
  store %"struct.thrust::detail::wrapped_function.106"* %this, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::binary_transform_functor"* %f, %"struct.thrust::detail::binary_transform_functor"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.106"*, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.106", %"struct.thrust::detail::wrapped_function.106"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::binary_transform_functor"*, %"struct.thrust::detail::binary_transform_functor"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::binary_transform_functor"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.101"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.101"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.101"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.101"*, align 8
  store %"class.thrust::iterator_facade.101"* %lhs, %"class.thrust::iterator_facade.101"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.101"* %rhs, %"class.thrust::iterator_facade.101"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.101"*, %"class.thrust::iterator_facade.101"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.101"* %0 to %"class.thrust::zip_iterator.100"*
  %2 = load %"class.thrust::iterator_facade.101"*, %"class.thrust::iterator_facade.101"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.101"* %2 to %"class.thrust::zip_iterator.100"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_(%"class.thrust::zip_iterator.100"* dereferenceable(24) %1, %"class.thrust::zip_iterator.100"* dereferenceable(24) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRaS8_RNS_4pairIaaEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.106"* %this, %"class.thrust::detail::tuple_of_iterator_references.107"* dereferenceable(24) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.106"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.107"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.107", align 8
  store %"struct.thrust::detail::wrapped_function.106"* %this, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.107"* %x, %"class.thrust::detail::tuple_of_iterator_references.107"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.106"*, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.106", %"struct.thrust::detail::wrapped_function.106"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.107"*, %"class.thrust::detail::tuple_of_iterator_references.107"** %x.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::detail::tuple_of_iterator_references.107"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_(%"class.thrust::detail::tuple_of_iterator_references.107"* dereferenceable(24) %0)
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.107"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.107"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  call void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRaS6_RNS_4pairIaaEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_(%"struct.thrust::detail::binary_transform_functor"* %m_f, %"class.thrust::detail::tuple_of_iterator_references.107"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv(%"class.thrust::detail::tuple_of_iterator_references.107"* noalias sret %agg.result, %"class.thrust::iterator_facade.101"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.101"*, align 8
  store %"class.thrust::iterator_facade.101"* %this, %"class.thrust::iterator_facade.101"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.101"*, %"class.thrust::iterator_facade.101"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.100"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.101"* %this1)
  call void @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_(%"class.thrust::detail::tuple_of_iterator_references.107"* sret %agg.result, %"class.thrust::zip_iterator.100"* dereferenceable(24) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.100"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv(%"class.thrust::iterator_facade.101"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.101"*, align 8
  store %"class.thrust::iterator_facade.101"* %this, %"class.thrust::iterator_facade.101"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.101"*, %"class.thrust::iterator_facade.101"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.100"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.101"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_(%"class.thrust::zip_iterator.100"* dereferenceable(24) %call)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.100"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.101"* %this1)
  ret %"class.thrust::zip_iterator.100"* %call2
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_(%"class.thrust::zip_iterator.100"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.100"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  store %"class.thrust::zip_iterator.100"* %f1, %"class.thrust::zip_iterator.100"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.100"* %f2, %"class.thrust::zip_iterator.100"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.100"* %0, %"class.thrust::zip_iterator.100"* dereferenceable(24) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.100"* %this, %"class.thrust::zip_iterator.100"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  store %"class.thrust::zip_iterator.100"* %this, %"class.thrust::zip_iterator.100"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.100"* %other, %"class.thrust::zip_iterator.100"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.102"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.100"* %this1)
  %0 = bitcast %"class.thrust::tuple.102"* %call to %"struct.thrust::detail::cons.103"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %0)
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %call2 to %"class.thrust::iterator_facade"*
  %2 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %other.addr, align 8
  %call3 = call dereferenceable(24) %"class.thrust::tuple.102"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.100"* %2)
  %3 = bitcast %"class.thrust::tuple.102"* %call3 to %"struct.thrust::detail::cons.103"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator"* %call4 to %"class.thrust::iterator_facade"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade"* dereferenceable(1) %1, %"class.thrust::iterator_facade"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade"*, align 8
  store %"class.thrust::iterator_facade"* %lhs, %"class.thrust::iterator_facade"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade"* %rhs, %"class.thrust::iterator_facade"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade"* %0 to %"class.thrust::detail::normal_iterator"*
  %2 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade"* %2 to %"class.thrust::detail::normal_iterator"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPaEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %c, %"struct.thrust::detail::cons.103"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.103"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator"* %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPaEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  store %"class.thrust::detail::normal_iterator"* %f1, %"class.thrust::detail::normal_iterator"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %f2, %"class.thrust::detail::normal_iterator"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %0 to %"class.thrust::iterator_adaptor"*
  %2 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %2 to %"class.thrust::iterator_adaptor"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor"* %1, %"class.thrust::iterator_adaptor"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"* dereferenceable(8) %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  store %"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor"* %x, %"class.thrust::iterator_adaptor"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !36
  %1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %x.addr, align 8
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %1)
  %2 = load i8*, i8** %call, align 8, !tbaa !1
  %cmp = icmp eq i8* %0, %2
  ret i1 %cmp
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.103"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %t, %"struct.thrust::detail::cons.103"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.103", %"struct.thrust::detail::cons.103"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRaS6_RNS_4pairIaaEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_(%"struct.thrust::detail::binary_transform_functor"* %this, %"class.thrust::detail::tuple_of_iterator_references.107"* byval align 8 %t) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair", align 1
  store %"struct.thrust::detail::binary_transform_functor"* %this, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor"*, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.107"* %t to %"struct.thrust::detail::cons.109"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi2ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.109"* dereferenceable(24) %0)
  %f = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor", %"struct.thrust::detail::binary_transform_functor"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.107"* %t to %"struct.thrust::detail::cons.109"*
  %call2 = call dereferenceable(1) i8* @_ZN6thrust3getILi0ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.109"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.107"* %t to %"struct.thrust::detail::cons.109"*
  %call3 = call dereferenceable(1) i8* @_ZN6thrust3getILi1ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.109"* dereferenceable(24) %2)
  %call4 = call i16 @_ZN17make_pair_functorclIaaEEN6thrust4pairIT_T0_EERKS3_RKS4_(%struct.make_pair_functor* %f, i8* dereferenceable(1) %call2, i8* dereferenceable(1) %call3)
  %3 = bitcast %"struct.thrust::pair"* %ref.tmp to i16*
  store i16 %call4, i16* %3, align 1
  %4 = bitcast %"struct.thrust::pair"* %call to i8*
  %5 = bitcast %"struct.thrust::pair"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 2, i32 1, i1 false), !tbaa.struct !23
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::detail::tuple_of_iterator_references.107"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_(%"class.thrust::detail::tuple_of_iterator_references.107"* dereferenceable(24) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.107"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.107"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.107"* %ref, %"class.thrust::detail::tuple_of_iterator_references.107"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.107"*, %"class.thrust::detail::tuple_of_iterator_references.107"** %ref.addr, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.107"* %0, %"class.thrust::detail::tuple_of_iterator_references.107"** %ref.tmp, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.107"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::detail::tuple_of_iterator_references.107"** dereferenceable(8) %ref.tmp)
  ret %"class.thrust::detail::tuple_of_iterator_references.107"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi2ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.109"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.109"*, align 8
  store %"struct.thrust::detail::cons.109"* %c, %"struct.thrust::detail::cons.109"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.109"*, %"struct.thrust::detail::cons.109"** %c.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIaaEERaNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.109"* dereferenceable(24) %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr i16 @_ZN17make_pair_functorclIaaEEN6thrust4pairIT_T0_EERKS3_RKS4_(%struct.make_pair_functor* %this, i8* dereferenceable(1) %x, i8* dereferenceable(1) %y) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair", align 1
  %this.addr = alloca %struct.make_pair_functor*, align 8
  %x.addr = alloca i8*, align 8
  %y.addr = alloca i8*, align 8
  store %struct.make_pair_functor* %this, %struct.make_pair_functor** %this.addr, align 8, !tbaa !1
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  store i8* %y, i8** %y.addr, align 8, !tbaa !7
  %this1 = load %struct.make_pair_functor*, %struct.make_pair_functor** %this.addr, align 8
  %0 = load i8*, i8** %x.addr, align 8
  %1 = load i8, i8* %0, align 1, !tbaa !7
  %2 = load i8*, i8** %y.addr, align 8
  %3 = load i8, i8* %2, align 1, !tbaa !7
  %call = call i16 @_ZN6thrust9make_pairIaaEENS_4pairIT_T0_EES2_S3_(i8 signext %1, i8 signext %3)
  %4 = bitcast %"struct.thrust::pair"* %retval to i16*
  store i16 %call, i16* %4, align 1
  %5 = bitcast %"struct.thrust::pair"* %retval to i16*
  %6 = load i16, i16* %5, align 1
  ret i16 %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust3getILi0ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.109"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.109"*, align 8
  store %"struct.thrust::detail::cons.109"* %c, %"struct.thrust::detail::cons.109"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.109"*, %"struct.thrust::detail::cons.109"** %c.addr, align 8
  %call = call dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS0_4consIS4_NS5_IRNS_4pairIaaEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.109"* dereferenceable(24) %0)
  ret i8* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust3getILi1ERaNS_6detail4consIS1_NS3_IRNS_4pairIaaEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.109"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.109"*, align 8
  store %"struct.thrust::detail::cons.109"* %c, %"struct.thrust::detail::cons.109"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.109"*, %"struct.thrust::detail::cons.109"** %c.addr, align 8
  %call = call dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi1EE3getIRaS4_NS0_4consIS4_NS5_IRNS_4pairIaaEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.109"* dereferenceable(24) %0)
  ret i8* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIaaEERaNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.109"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.109"*, align 8
  store %"struct.thrust::detail::cons.109"* %t, %"struct.thrust::detail::cons.109"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.109"*, %"struct.thrust::detail::cons.109"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.109", %"struct.thrust::detail::cons.109"* %0, i32 0, i32 1
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIaaEERaNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.110"* dereferenceable(16) %tail)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIaaEERaNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.110"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.110"*, align 8
  store %"struct.thrust::detail::cons.110"* %t, %"struct.thrust::detail::cons.110"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.110"*, %"struct.thrust::detail::cons.110"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.110", %"struct.thrust::detail::cons.110"* %0, i32 0, i32 1
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIaaEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.111"* dereferenceable(8) %tail)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIaaEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.111"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.111"*, align 8
  store %"struct.thrust::detail::cons.111"* %t, %"struct.thrust::detail::cons.111"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.111"*, %"struct.thrust::detail::cons.111"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.111", %"struct.thrust::detail::cons.111"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16 @_ZN6thrust9make_pairIaaEENS_4pairIT_T0_EES2_S3_(i8 signext %x, i8 signext %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair", align 1
  %x.addr = alloca i8, align 1
  %y.addr = alloca i8, align 1
  store i8 %x, i8* %x.addr, align 1, !tbaa !7
  store i8 %y, i8* %y.addr, align 1, !tbaa !7
  call void @_ZN6thrust4pairIaaEC2ERKaS3_(%"struct.thrust::pair"* %retval, i8* dereferenceable(1) %x.addr, i8* dereferenceable(1) %y.addr)
  %0 = bitcast %"struct.thrust::pair"* %retval to i16*
  %1 = load i16, i16* %0, align 1
  ret i16 %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS0_4consIS4_NS5_IRNS_4pairIaaEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.109"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.109"*, align 8
  store %"struct.thrust::detail::cons.109"* %t, %"struct.thrust::detail::cons.109"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.109"*, %"struct.thrust::detail::cons.109"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.109", %"struct.thrust::detail::cons.109"* %0, i32 0, i32 0
  %ref = load i8*, i8** %head, align 8, !tbaa !7
  ret i8* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi1EE3getIRaS4_NS0_4consIS4_NS5_IRNS_4pairIaaEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.109"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.109"*, align 8
  store %"struct.thrust::detail::cons.109"* %t, %"struct.thrust::detail::cons.109"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.109"*, %"struct.thrust::detail::cons.109"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.109", %"struct.thrust::detail::cons.109"* %0, i32 0, i32 1
  %call = call dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS0_4consIRNS_4pairIaaEENS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.110"* dereferenceable(16) %tail)
  ret i8* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRaS4_NS0_4consIRNS_4pairIaaEENS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.110"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.110"*, align 8
  store %"struct.thrust::detail::cons.110"* %t, %"struct.thrust::detail::cons.110"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.110"*, %"struct.thrust::detail::cons.110"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.110", %"struct.thrust::detail::cons.110"* %0, i32 0, i32 0
  %ref = load i8*, i8** %head, align 8, !tbaa !7
  ret i8* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.107"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::detail::tuple_of_iterator_references.107"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.107"**, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.107"** %ptr, %"class.thrust::detail::tuple_of_iterator_references.107"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.107"**, %"class.thrust::detail::tuple_of_iterator_references.107"*** %ptr.addr, align 8
  %1 = load %"class.thrust::detail::tuple_of_iterator_references.107"*, %"class.thrust::detail::tuple_of_iterator_references.107"** %0, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.107"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_(%"class.thrust::detail::tuple_of_iterator_references.107"* %1)
  ret %"class.thrust::detail::tuple_of_iterator_references.107"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.107"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRaS3_RNS_4pairIaaEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_(%"class.thrust::detail::tuple_of_iterator_references.107"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.107"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.107"* %ptr, %"class.thrust::detail::tuple_of_iterator_references.107"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.107"*, %"class.thrust::detail::tuple_of_iterator_references.107"** %ptr.addr, align 8, !tbaa !1
  ret %"class.thrust::detail::tuple_of_iterator_references.107"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_(%"class.thrust::detail::tuple_of_iterator_references.107"* noalias sret %agg.result, %"class.thrust::zip_iterator.100"* dereferenceable(24) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  store %"class.thrust::zip_iterator.100"* %f, %"class.thrust::zip_iterator.100"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %f.addr, align 8
  call void @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv(%"class.thrust::detail::tuple_of_iterator_references.107"* sret %agg.result, %"class.thrust::zip_iterator.100"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.100"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.101"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.101"*, align 8
  store %"class.thrust::iterator_facade.101"* %this, %"class.thrust::iterator_facade.101"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.101"*, %"class.thrust::iterator_facade.101"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.101"* %this1 to %"class.thrust::zip_iterator.100"*
  ret %"class.thrust::zip_iterator.100"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv(%"class.thrust::detail::tuple_of_iterator_references.107"* noalias sret %agg.result, %"class.thrust::zip_iterator.100"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.108", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.100"* %this, %"class.thrust::zip_iterator.100"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.102"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.100"* %this1)
  call void @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_(%"class.thrust::tuple.108"* sret %ref.tmp, %"class.thrust::tuple.102"* dereferenceable(24) %call)
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRaS2_RNS_4pairIaaEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE(%"class.thrust::detail::tuple_of_iterator_references.107"* %agg.result, %"class.thrust::tuple.108"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_(%"class.thrust::tuple.108"* noalias sret %agg.result, %"class.thrust::tuple.102"* dereferenceable(24) %t) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.102"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.102"* %t, %"class.thrust::tuple.102"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.102"*, %"class.thrust::tuple.102"** %t.addr, align 8
  call void @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_(%"class.thrust::tuple.108"* sret %agg.result, %"class.thrust::tuple.102"* dereferenceable(24) %0)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRaS2_RNS_4pairIaaEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE(%"class.thrust::detail::tuple_of_iterator_references.107"* %this, %"class.thrust::tuple.108"* dereferenceable(24) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.107"*, align 8
  %other.addr = alloca %"class.thrust::tuple.108"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.107"* %this, %"class.thrust::detail::tuple_of_iterator_references.107"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.108"* %other, %"class.thrust::tuple.108"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.107"*, %"class.thrust::detail::tuple_of_iterator_references.107"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.107"* %this1 to %"class.thrust::tuple.108"*
  %1 = load %"class.thrust::tuple.108"*, %"class.thrust::tuple.108"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.108"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.108"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_(%"class.thrust::tuple.108"* noalias sret %agg.result, %"class.thrust::tuple.102"* dereferenceable(24) %t) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.102"*, align 8
  store %"class.thrust::tuple.102"* %t, %"class.thrust::tuple.102"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.102"*, %"class.thrust::tuple.102"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.102"* %0 to %"struct.thrust::detail::cons.103"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %1)
  %call1 = call dereferenceable(1) i8* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPaEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.102"*, %"class.thrust::tuple.102"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.102"* %2 to %"struct.thrust::detail::cons.103"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %3)
  %call3 = call dereferenceable(1) i8* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPaEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %call2)
  %4 = load %"class.thrust::tuple.102"*, %"class.thrust::tuple.102"** %t.addr, align 8
  %5 = bitcast %"class.thrust::tuple.102"* %4 to %"struct.thrust::detail::cons.103"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %5)
  %call5 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIaaEEEEEENS1_5applyIT_E4typeERKS9_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %call4)
  call void @_ZN6thrust5tupleIRaS1_RNS_4pairIaaEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_(%"class.thrust::tuple.108"* %agg.result, i8* dereferenceable(1) %call1, i8* dereferenceable(1) %call3, %"struct.thrust::pair"* dereferenceable(2) %call5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPaEENS1_4consIS4_NS5_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.103"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %c, %"struct.thrust::detail::cons.103"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.103"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIaaEEEEEENS1_5applyIT_E4typeERKS9_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.51"* %it, %"class.thrust::detail::normal_iterator.51"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.51"* %0 to %"class.thrust::iterator_facade.53"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.53"* %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRaS1_RNS_4pairIaaEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_(%"class.thrust::tuple.108"* %this, i8* dereferenceable(1) %t0, i8* dereferenceable(1) %t1, %"struct.thrust::pair"* dereferenceable(2) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.108"*, align 8
  %t0.addr = alloca i8*, align 8
  %t1.addr = alloca i8*, align 8
  %t2.addr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.108"* %this, %"class.thrust::tuple.108"** %this.addr, align 8, !tbaa !1
  store i8* %t0, i8** %t0.addr, align 8, !tbaa !7
  store i8* %t1, i8** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %t2, %"struct.thrust::pair"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.108"*, %"class.thrust::tuple.108"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.108"* %this1 to %"struct.thrust::detail::cons.109"*
  %1 = load i8*, i8** %t0.addr, align 8
  %2 = load i8*, i8** %t1.addr, align 8
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consIRaNS1_IS2_NS1_IRNS_4pairIaaEENS_9null_typeEEEEEEC2IaaS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.109"* %0, i8* dereferenceable(1) %1, i8* dereferenceable(1) %2, %"struct.thrust::pair"* dereferenceable(2) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.103"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %t, %"struct.thrust::detail::cons.103"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.103", %"struct.thrust::detail::cons.103"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consINS4_IPNS_4pairIaaEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.104"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPaEES6_NS0_4consINS4_IPNS_4pairIaaEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.104"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.104"*, align 8
  store %"struct.thrust::detail::cons.104"* %t, %"struct.thrust::detail::cons.104"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.104"*, %"struct.thrust::detail::cons.104"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.104", %"struct.thrust::detail::cons.104"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator"* %head
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.53"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.53"*, align 8
  store %"class.thrust::iterator_facade.53"* %this, %"class.thrust::iterator_facade.53"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.53"*, %"class.thrust::iterator_facade.53"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.53"* %this1)
  %call2 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEENT_9referenceERKS8_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %call)
  ret %"struct.thrust::pair"* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEENT_9referenceERKS8_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  store %"class.thrust::detail::normal_iterator.51"* %f, %"class.thrust::detail::normal_iterator.51"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.51"* %0 to %"class.thrust::iterator_adaptor.52"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv(%"class.thrust::iterator_adaptor.52"* %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.53"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.53"*, align 8
  store %"class.thrust::iterator_facade.53"* %this, %"class.thrust::iterator_facade.53"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.53"*, %"class.thrust::iterator_facade.53"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.53"* %this1 to %"class.thrust::detail::normal_iterator.51"*
  ret %"class.thrust::detail::normal_iterator.51"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv(%"class.thrust::iterator_adaptor.52"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.52"*, align 8
  store %"class.thrust::iterator_adaptor.52"* %this, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.52"*, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !60
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRaNS1_IS2_NS1_IRNS_4pairIaaEENS_9null_typeEEEEEEC2IaaS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.109"* %this, i8* dereferenceable(1) %t1, i8* dereferenceable(1) %t2, %"struct.thrust::pair"* dereferenceable(2) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.109"*, align 8
  %t1.addr = alloca i8*, align 8
  %t2.addr = alloca i8*, align 8
  %t3.addr = alloca %"struct.thrust::pair"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.109"* %this, %"struct.thrust::detail::cons.109"** %this.addr, align 8, !tbaa !1
  store i8* %t1, i8** %t1.addr, align 8, !tbaa !7
  store i8* %t2, i8** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %t3, %"struct.thrust::pair"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.109"*, %"struct.thrust::detail::cons.109"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.109", %"struct.thrust::detail::cons.109"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %t1.addr, align 8
  store i8* %0, i8** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.109", %"struct.thrust::detail::cons.109"* %this1, i32 0, i32 1
  %1 = load i8*, i8** %t2.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRaNS1_IRNS_4pairIaaEENS_9null_typeEEEEC2IaS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.110"* %tail, i8* dereferenceable(1) %1, %"struct.thrust::pair"* dereferenceable(2) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRaNS1_IRNS_4pairIaaEENS_9null_typeEEEEC2IaS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.110"* %this, i8* dereferenceable(1) %t1, %"struct.thrust::pair"* dereferenceable(2) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.110"*, align 8
  %t1.addr = alloca i8*, align 8
  %t2.addr = alloca %"struct.thrust::pair"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.110"* %this, %"struct.thrust::detail::cons.110"** %this.addr, align 8, !tbaa !1
  store i8* %t1, i8** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %t2, %"struct.thrust::pair"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.110"*, %"struct.thrust::detail::cons.110"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.110", %"struct.thrust::detail::cons.110"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %t1.addr, align 8
  store i8* %0, i8** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.110", %"struct.thrust::detail::cons.110"* %this1, i32 0, i32 1
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRNS_4pairIaaEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.111"* %tail, %"struct.thrust::pair"* dereferenceable(2) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRNS_4pairIaaEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.111"* %this, %"struct.thrust::pair"* dereferenceable(2) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.111"*, align 8
  %t1.addr = alloca %"struct.thrust::pair"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.111"* %this, %"struct.thrust::detail::cons.111"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %t1, %"struct.thrust::pair"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.111"*, %"struct.thrust::detail::cons.111"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.111", %"struct.thrust::detail::cons.111"* %this9, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t1.addr, align 8
  store %"struct.thrust::pair"* %9, %"struct.thrust::pair"** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES7_NS5_IPNS_4pairIaaEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_(%"class.thrust::zip_iterator.100"* dereferenceable(24) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  store %"class.thrust::zip_iterator.100"* %f, %"class.thrust::zip_iterator.100"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv(%"class.thrust::zip_iterator.100"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.100"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IaaS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRaSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.101"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.101"*, align 8
  store %"class.thrust::iterator_facade.101"* %this, %"class.thrust::iterator_facade.101"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.101"*, %"class.thrust::iterator_facade.101"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.101"* %this1 to %"class.thrust::zip_iterator.100"*
  ret %"class.thrust::zip_iterator.100"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv(%"class.thrust::zip_iterator.100"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.100"* %this, %"class.thrust::zip_iterator.100"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.100", %"class.thrust::zip_iterator.100"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_(%"class.thrust::tuple.102"* dereferenceable(24) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPaEES6_NS4_IPNS_4pairIaaEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_(%"class.thrust::tuple.102"* dereferenceable(24) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.102"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.102"* %t, %"class.thrust::tuple.102"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.102"*, %"class.thrust::tuple.102"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.102"* %0 to %"struct.thrust::detail::cons.103"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.103"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPaEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.102"*, %"class.thrust::tuple.102"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.102"* %2 to %"struct.thrust::detail::cons.103"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.104"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.103"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPaEENS3_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_(%"struct.thrust::detail::cons.104"* dereferenceable(16) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.103"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %this, %"struct.thrust::detail::cons.103"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.103", %"struct.thrust::detail::cons.103"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPaEENS3_INS4_IPNS_4pairIaaEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_(%"struct.thrust::detail::cons.104"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.104"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.104"* %t, %"struct.thrust::detail::cons.104"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.104"*, %"struct.thrust::detail::cons.104"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.104"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPaEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.104"*, %"struct.thrust::detail::cons.104"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.105"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.104"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_(%"struct.thrust::detail::cons.105"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.104"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.103"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %this, %"struct.thrust::detail::cons.103"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.103", %"struct.thrust::detail::cons.103"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.104"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.104"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.104"*, align 8
  store %"struct.thrust::detail::cons.104"* %this, %"struct.thrust::detail::cons.104"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.104"*, %"struct.thrust::detail::cons.104"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.104", %"struct.thrust::detail::cons.104"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_(%"struct.thrust::detail::cons.105"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.105"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.105"* %t, %"struct.thrust::detail::cons.105"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.105"*, %"struct.thrust::detail::cons.105"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.105"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIaaEEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.105"*, %"struct.thrust::detail::cons.105"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.105"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.105"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.104"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.104"*, align 8
  store %"struct.thrust::detail::cons.104"* %this, %"struct.thrust::detail::cons.104"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.104"*, %"struct.thrust::detail::cons.104"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.104", %"struct.thrust::detail::cons.104"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.105"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIaaEEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.51"* %it, %"class.thrust::detail::normal_iterator.51"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.51"* %0 to %"class.thrust::iterator_facade.53"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.53"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.105"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.105"*, align 8
  store %"struct.thrust::detail::cons.105"* %this, %"struct.thrust::detail::cons.105"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.105"*, %"struct.thrust::detail::cons.105"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.105", %"struct.thrust::detail::cons.105"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.51"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.105"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.105"*, align 8
  store %"struct.thrust::detail::cons.105"* %this, %"struct.thrust::detail::cons.105"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.105"*, %"struct.thrust::detail::cons.105"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.53"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.53"*, align 8
  store %"class.thrust::iterator_facade.53"* %this, %"class.thrust::iterator_facade.53"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.53"*, %"class.thrust::iterator_facade.53"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.53"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEEvRT_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.53"* %this1)
  ret %"class.thrust::detail::normal_iterator.51"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEEvRT_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  store %"class.thrust::detail::normal_iterator.51"* %f, %"class.thrust::detail::normal_iterator.51"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.51"* %0 to %"class.thrust::iterator_adaptor.52"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv(%"class.thrust::iterator_adaptor.52"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.53"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.53"*, align 8
  store %"class.thrust::iterator_facade.53"* %this, %"class.thrust::iterator_facade.53"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.53"*, %"class.thrust::iterator_facade.53"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.53"* %this1 to %"class.thrust::detail::normal_iterator.51"*
  ret %"class.thrust::detail::normal_iterator.51"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv(%"class.thrust::iterator_adaptor.52"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.52"*, align 8
  store %"class.thrust::iterator_adaptor.52"* %this, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.52"*, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !60
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %0, i32 1
  store %"struct.thrust::pair"* %incdec.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !60
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPaEES5_NS3_IPNS_4pairIaaEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_(%"class.thrust::zip_iterator.100"* %this, %"class.thrust::tuple.102"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.100"*, align 8
  store %"class.thrust::zip_iterator.100"* %this, %"class.thrust::zip_iterator.100"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.100"*, %"class.thrust::zip_iterator.100"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.100"* %this1 to %"class.thrust::iterator_facade.101"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.100", %"class.thrust::zip_iterator.100"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.102"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.102"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorIPaEES4_NS2_IPNS_4pairIaaEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_(%"class.thrust::tuple.102"* %this, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.102"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.102"* %this, %"class.thrust::tuple.102"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator"* %t0, %"class.thrust::detail::normal_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %t1, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.51"* %t2, %"class.thrust::detail::normal_iterator.51"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.102"*, %"class.thrust::tuple.102"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.102"* %this1 to %"struct.thrust::detail::cons.103"*
  %1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.103"* %0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_IS4_NS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.103"* %this, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.103"* %this, %"struct.thrust::detail::cons.103"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator"* %t1, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %t2, %"class.thrust::detail::normal_iterator"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.51"* %t3, %"class.thrust::detail::normal_iterator.51"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.103", %"struct.thrust::detail::cons.103"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.103", %"struct.thrust::detail::cons.103"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.104"* %tail, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPaEENS1_INS2_IPNS_4pairIaaEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.104"* %this, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.104"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.104"* %this, %"struct.thrust::detail::cons.104"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator"* %t1, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.51"* %t2, %"class.thrust::detail::normal_iterator.51"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.104"*, %"struct.thrust::detail::cons.104"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.104", %"struct.thrust::detail::cons.104"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.104", %"struct.thrust::detail::cons.104"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_(%"struct.thrust::detail::cons.105"* %tail, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIaaEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_(%"struct.thrust::detail::cons.105"* %this, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.105"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.105"* %this, %"struct.thrust::detail::cons.105"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.51"* %t1, %"class.thrust::detail::normal_iterator.51"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.105"*, %"struct.thrust::detail::cons.105"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.105", %"struct.thrust::detail::cons.105"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.51"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.51"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEENS4_IPaEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.103"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.103"*, align 8
  store %"struct.thrust::detail::cons.103"* %t, %"struct.thrust::detail::cons.103"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.103"*, %"struct.thrust::detail::cons.103"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.103", %"struct.thrust::detail::cons.103"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEENS4_IPaEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.104"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.51"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEENS4_IPaEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.104"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.104"*, align 8
  store %"struct.thrust::detail::cons.104"* %t, %"struct.thrust::detail::cons.104"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.104"*, %"struct.thrust::detail::cons.104"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.104", %"struct.thrust::detail::cons.104"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.105"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.51"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIaaEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.105"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.105"*, align 8
  store %"struct.thrust::detail::cons.105"* %t, %"struct.thrust::detail::cons.105"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.105"*, %"struct.thrust::detail::cons.105"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.105", %"struct.thrust::detail::cons.105"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.51"* %head
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2) #0 comdat {
entry:
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS0_3cpp6detail3tagEEERT_RNS_16execution_policyIS8_EESC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS0_3cpp6detail3tagEEERT_RNS_16execution_policyIS8_EESC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1)) #1 comdat {
entry:
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %0, %"struct.thrust::execution_policy.88"** %.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail18contiguous_storageIaSaIaEE5beginEv(%"class.thrust::detail::contiguous_storage"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive2, align 8
  ret i8* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator"* %i, %"class.thrust::detail::normal_iterator"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator"* %i, %"class.thrust::detail::normal_iterator"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator"* %i, %"class.thrust::detail::normal_iterator"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %1 to %"class.thrust::iterator_facade"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEpLEl(%"class.thrust::iterator_facade"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEpLEl(%"class.thrust::iterator_facade"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade"* %this, %"class.thrust::iterator_facade"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv(%"class.thrust::iterator_facade"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPaEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalE7derivedEv(%"class.thrust::iterator_facade"* %this1)
  ret %"class.thrust::detail::normal_iterator"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPaEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator"* %f, %"class.thrust::detail::normal_iterator"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator"* %0 to %"class.thrust::iterator_adaptor"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %this1, i32 0, i32 0
  %1 = load i8*, i8** %m_iterator, align 8, !tbaa !36
  %add.ptr = getelementptr inbounds i8, i8* %1, i64 %0
  store i8* %add.ptr, i8** %m_iterator, align 8, !tbaa !36
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.47"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.51"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.51"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEEC2IaSaIaEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %ref.tmp = alloca %"class.thrust::device_malloc_allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base"* %v, %"class.thrust::detail::vector_base"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIaEC2Ev(%"class.thrust::device_malloc_allocator"* %ref.tmp)
  invoke void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEEC2ERKS3_(%"class.thrust::detail::contiguous_storage.55"* %m_storage, %"class.thrust::device_malloc_allocator"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZN6thrust23device_malloc_allocatorIaED2Ev(%"class.thrust::device_malloc_allocator"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !63
  %0 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %v.addr, align 8
  %call = invoke i8* @_ZNK6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %v.addr, align 8
  %call7 = invoke i8* @_ZNK6thrust6detail11vector_baseIaSaIaEE3endEv(%"class.thrust::detail::vector_base"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive8, i32 0, i32 0
  store i8* %call7, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive10, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive12, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE10range_initINS0_15normal_iteratorIPKaEEEEvT_SA_(%"class.thrust::detail::vector_base.54"* %this1, i8* %2, i8* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorIaED2Ev(%"class.thrust::device_malloc_allocator"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEED2Ev(%"class.thrust::detail::contiguous_storage.55"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIaEC2Ev(%"class.thrust::device_malloc_allocator"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  store %"class.thrust::device_malloc_allocator"* %this, %"class.thrust::device_malloc_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEEC2ERKS3_(%"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::device_malloc_allocator"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  %alloc.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator"* %alloc, %"class.thrust::device_malloc_allocator"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %alloc.addr, align 8
  call void @_ZN6thrust23device_malloc_allocatorIaEC2ERKS1_(%"class.thrust::device_malloc_allocator"* %m_allocator, %"class.thrust::device_malloc_allocator"* dereferenceable(1) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust10device_ptrIaEC2IaEEPT_(%"class.thrust::device_ptr"* %agg.tmp, i8* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive2, i32 0, i32 0
  %1 = load i8*, i8** %coerce.dive3, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEC2ES3_(%"class.thrust::detail::normal_iterator.56"* %m_begin, i8* %1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !68
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorIaED2Ev(%"class.thrust::device_malloc_allocator"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIaED2Ev(%"class.thrust::device_malloc_allocator"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  store %"class.thrust::device_malloc_allocator"* %this, %"class.thrust::device_malloc_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE10range_initINS0_15normal_iteratorIPKaEEEEvT_SA_(%"class.thrust::detail::vector_base.54"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive7, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive9, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE10range_initINS0_15normal_iteratorIPKaEEEEvT_SA_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.54"* %this4, i8* %4, i8* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  %call = call i8* @_ZNK6thrust6detail18contiguous_storageIaSaIaEE5beginEv(%"class.thrust::detail::contiguous_storage"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive3, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust6detail11vector_baseIaSaIaEE3endEv(%"class.thrust::detail::vector_base"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %call = call i8* @_ZNK6thrust6detail11vector_baseIaSaIaEE5beginEv(%"class.thrust::detail::vector_base"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE4sizeEv(%"class.thrust::detail::vector_base"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive4, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEED2Ev(%"class.thrust::detail::contiguous_storage.55"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.55"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIaED2Ev(%"class.thrust::device_malloc_allocator"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIaED2Ev(%"class.thrust::device_malloc_allocator"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIaEC2ERKS1_(%"class.thrust::device_malloc_allocator"* %this, %"class.thrust::device_malloc_allocator"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  store %"class.thrust::device_malloc_allocator"* %this, %"class.thrust::device_malloc_allocator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator"* %0, %"class.thrust::device_malloc_allocator"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIaEC2IaEEPT_(%"class.thrust::device_ptr"* %this, i8* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr"*, align 8
  %ptr.addr = alloca i8*, align 8
  store %"class.thrust::device_ptr"* %this, %"class.thrust::device_ptr"** %this.addr, align 8, !tbaa !1
  store i8* %ptr, i8** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr"* %this1 to %"class.thrust::pointer"*
  %1 = load i8*, i8** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEEC2IaEEPT_(%"class.thrust::pointer"* %0, i8* %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEC2ES3_(%"class.thrust::detail::normal_iterator.56"* %this, i8* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %p.coerce, i8** %coerce.dive2, align 8
  store %"class.thrust::detail::normal_iterator.56"* %this, %"class.thrust::detail::normal_iterator.56"** %this.addr, align 8, !tbaa !1
  %this3 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.56"* %this3 to %"class.thrust::iterator_adaptor.57"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.57"* %0, %"class.thrust::device_ptr"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEEC2IaEEPT_(%"class.thrust::pointer"* %this, i8* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer"*, align 8
  %other.addr = alloca i8*, align 8
  store %"class.thrust::pointer"* %this, %"class.thrust::pointer"** %this.addr, align 8, !tbaa !1
  store i8* %other, i8** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer"*, %"class.thrust::pointer"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer"* %this1 to %"class.thrust::iterator_adaptor.59"*
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEC2ERKS3_(%"class.thrust::iterator_adaptor.59"* %0, i8** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEC2ERKS3_(%"class.thrust::iterator_adaptor.59"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.59"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.59"* %this, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.59"*, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.59"* %this1 to %"class.thrust::iterator_facade.60"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !69
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.57"* %this, %"class.thrust::device_ptr"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.57"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr"*, align 8
  store %"class.thrust::iterator_adaptor.57"* %this, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr"* %iter, %"class.thrust::device_ptr"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.57"*, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.57"* %this1 to %"class.thrust::iterator_facade.58"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE10range_initINS0_15normal_iteratorIPKaEEEEvT_SA_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.54"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive6, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i8* %6, i8* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive12, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive14, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE17allocate_and_copyINS0_15normal_iteratorIPKaEEEEvmT_SA_RNS0_18contiguous_storageIaS3_EE(%"class.thrust::detail::vector_base.54"* %this4, i64 %8, i8* %13, i8* %14, %"class.thrust::detail::contiguous_storage.55"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !63
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i8* %first.coerce, i8* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive5, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive7, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive8, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i8* %4, i8* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE17allocate_and_copyINS0_15normal_iteratorIPKaEEEEvmT_SA_RNS0_18contiguous_storageIaS3_EE(%"class.thrust::detail::vector_base.54"* %this, i64 %requested_size, i8* %first.coerce, i8* %last.coerce, %"class.thrust::detail::contiguous_storage.55"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp54 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.55"* %new_storage, %"class.thrust::detail::contiguous_storage.55"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.55"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE8capacityEv(%"class.thrust::detail::vector_base.54"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE8max_sizeEv(%"class.thrust::detail::vector_base.54"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup78

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE8allocateEm(%"class.thrust::detail::contiguous_storage.55"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %new_storage.addr, align 8
  %call21 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::contiguous_storage.55"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive25, i32 0, i32 0
  store i8* %call21, i8** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive27, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive29, i32 0, i32 0
  %20 = load i8*, i8** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp18, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive34, i32 0, i32 0
  %21 = load i8*, i8** %coerce.dive35, align 8
  %call37 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE18uninitialized_copyINS0_15normal_iteratorIPKaEEEENS6_INS_10device_ptrIaEEEET_SD_SC_(%"class.thrust::detail::contiguous_storage.55"* %m_storage, i8* %19, i8* %20, i8* %21)
          to label %invoke.cont36 unwind label %lpad19

invoke.cont36:                                    ; preds = %invoke.cont20
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %coerce, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive41, i32 0, i32 0
  store i8* %call37, i8** %coerce.dive42, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.56"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %new_storage.addr, align 8
  %call45 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::contiguous_storage.55"* %27)
          to label %invoke.cont44 unwind label %lpad43

invoke.cont44:                                    ; preds = %catch
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %new_storage_end, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive49, i32 0, i32 0
  store i8* %call45, i8** %coerce.dive50, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont52 unwind label %lpad51

invoke.cont52:                                    ; preds = %invoke.cont44
  %m_storage53 = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %new_storage.addr, align 8
  %call56 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::contiguous_storage.55"* %29)
          to label %invoke.cont55 unwind label %lpad51

invoke.cont55:                                    ; preds = %invoke.cont52
  %coerce.dive57 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp54, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive60, i32 0, i32 0
  store i8* %call56, i8** %coerce.dive61, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp62 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.56"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive63 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp54, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive64, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive66, i32 0, i32 0
  %32 = load i8*, i8** %coerce.dive67, align 8
  %coerce.dive68 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp62, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive68, i32 0, i32 0
  %coerce.dive70 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive69, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive71, i32 0, i32 0
  %33 = load i8*, i8** %coerce.dive72, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE7destroyENS0_15normal_iteratorINS_10device_ptrIaEEEES8_(%"class.thrust::detail::contiguous_storage.55"* %m_storage53, i8* %32, i8* %33)
          to label %invoke.cont73 unwind label %lpad51

invoke.cont73:                                    ; preds = %invoke.cont55
  %34 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.55"* %34)
          to label %invoke.cont74 unwind label %lpad51

invoke.cont74:                                    ; preds = %invoke.cont73
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad51

lpad43:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup76

lpad51:                                           ; preds = %invoke.cont74, %invoke.cont73, %invoke.cont55, %invoke.cont52, %invoke.cont44
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.56"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup76

ehcleanup76:                                      ; preds = %lpad51, %lpad43
  invoke void @__cxa_end_catch()
          to label %invoke.cont77 unwind label %terminate.lpad

invoke.cont77:                                    ; preds = %ehcleanup76
  br label %ehcleanup78

try.cont:                                         ; preds = %invoke.cont36
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup78:                                      ; preds = %invoke.cont77, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup78
  %exn79 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn79, 0
  %lpad.val80 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val80

terminate.lpad:                                   ; preds = %ehcleanup76
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont74, %invoke.cont14
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i8* %first.coerce, i8* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive6, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive8, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i8* %4, i8* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKaEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i8* %first.coerce, i8* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to %"class.thrust::iterator_facade.114"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to %"class.thrust::iterator_facade.114"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_aS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.114"* dereferenceable(1) %1, %"class.thrust::iterator_facade.114"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_aS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.114"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.114"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.114"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.114"*, align 8
  store %"class.thrust::iterator_facade.114"* %lhs, %"class.thrust::iterator_facade.114"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.114"* %rhs, %"class.thrust::iterator_facade.114"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.114"*, %"class.thrust::iterator_facade.114"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.114"* %0 to %"class.thrust::detail::normal_iterator.112"*
  %2 = load %"class.thrust::iterator_facade.114"*, %"class.thrust::iterator_facade.114"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.114"* %2 to %"class.thrust::detail::normal_iterator.112"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKaEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKaEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.112"* %f1, %"class.thrust::detail::normal_iterator.112"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.112"* %f2, %"class.thrust::detail::normal_iterator.112"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKaEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKaEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  store %"class.thrust::detail::normal_iterator.112"* %f1, %"class.thrust::detail::normal_iterator.112"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.112"* %f2, %"class.thrust::detail::normal_iterator.112"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %1 to %"class.thrust::iterator_adaptor.113"*
  %3 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.112"* %3 to %"class.thrust::iterator_adaptor.113"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.113"* %2, %"class.thrust::iterator_adaptor.113"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.113"* %this, %"class.thrust::iterator_adaptor.113"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.113"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.113"*, align 8
  store %"class.thrust::iterator_adaptor.113"* %this, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.113"* %y, %"class.thrust::iterator_adaptor.113"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.113"*, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.113"*, %"class.thrust::iterator_adaptor.113"** %y.addr, align 8
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.113"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %this1, i32 0, i32 0
  %2 = load i8*, i8** %m_iterator, align 8, !tbaa !71
  %sub.ptr.lhs.cast = ptrtoint i8* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i8* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  ret i64 %sub.ptr.sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.113"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.113"*, align 8
  store %"class.thrust::iterator_adaptor.113"* %this, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.113"*, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.55"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp7 = alloca %"class.thrust::device_ptr", align 8
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE4sizeEv(%"class.thrust::detail::contiguous_storage.55"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.56"* %m_begin to %"class.thrust::iterator_adaptor.57"*
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.57"* %0)
  %1 = bitcast %"class.thrust::device_ptr"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE4sizeEv(%"class.thrust::detail::contiguous_storage.55"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE10deallocateERS3_NS_10device_ptrIaEEm(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %m_allocator, i8* %3, i64 %call3)
  %m_begin6 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrIaEC2IaEEPT_(%"class.thrust::device_ptr"* %agg.tmp7, i8* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive9, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEC2ES3_(%"class.thrust::detail::normal_iterator.56"* %ref.tmp, i8* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.56"* %m_begin6 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.56"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !68
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %lhs, i64* dereferenceable(8) %rhs) #1 comdat {
entry:
  %lhs.addr = alloca i64*, align 8
  %rhs.addr = alloca i64*, align 8
  store i64* %lhs, i64** %lhs.addr, align 8, !tbaa !7
  store i64* %rhs, i64** %rhs.addr, align 8, !tbaa !7
  %0 = load i64*, i64** %lhs.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  %2 = load i64*, i64** %rhs.addr, align 8
  %3 = load i64, i64* %2, align 8, !tbaa !13
  %cmp = icmp ult i64 %1, %3
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %4 = load i64*, i64** %rhs.addr, align 8
  %5 = load i64, i64* %4, align 8, !tbaa !13
  br label %cond.end

cond.false:                                       ; preds = %entry
  %6 = load i64*, i64** %lhs.addr, align 8
  %7 = load i64, i64* %6, align 8, !tbaa !13
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i64 [ %5, %cond.true ], [ %7, %cond.false ]
  ret i64 %cond
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE8capacityEv(%"class.thrust::detail::vector_base.54"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE4sizeEv(%"class.thrust::detail::contiguous_storage.55"* %m_storage)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %lhs, i64* dereferenceable(8) %rhs) #1 comdat {
entry:
  %lhs.addr = alloca i64*, align 8
  %rhs.addr = alloca i64*, align 8
  store i64* %lhs, i64** %lhs.addr, align 8, !tbaa !7
  store i64* %rhs, i64** %rhs.addr, align 8, !tbaa !7
  %0 = load i64*, i64** %rhs.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  %2 = load i64*, i64** %lhs.addr, align 8
  %3 = load i64, i64* %2, align 8, !tbaa !13
  %cmp = icmp ult i64 %1, %3
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %4 = load i64*, i64** %rhs.addr, align 8
  %5 = load i64, i64* %4, align 8, !tbaa !13
  br label %cond.end

cond.false:                                       ; preds = %entry
  %6 = load i64*, i64** %lhs.addr, align 8
  %7 = load i64, i64* %6, align 8, !tbaa !13
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i64 [ %5, %cond.true ], [ %7, %cond.false ]
  ret i64 %cond
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE8max_sizeEv(%"class.thrust::detail::vector_base.54"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.55"* %m_storage)
  ret i64 %call
}

declare i8* @__cxa_allocate_exception(i64)

declare void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"*, %"class.std::basic_string"* dereferenceable(8)) unnamed_addr #3

; Function Attrs: nounwind
declare void @_ZNSt12length_errorD1Ev(%"class.std::length_error"*) unnamed_addr #4

declare void @__cxa_throw(i8*, i8*, i8*)

declare void @__cxa_free_exception(i8*)

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE8allocateEm(%"class.thrust::detail::contiguous_storage.55"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %ref.tmp8 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr", align 8
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8allocateERS3_m(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive2, i32 0, i32 0
  store i8* %call, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEC2ES3_(%"class.thrust::detail::normal_iterator.56"* %ref.tmp, i8* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.56"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.56"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !68
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin7 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrIaEC2IaEEPT_(%"class.thrust::device_ptr"* %agg.tmp9, i8* null)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive11, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive12, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEC2ES3_(%"class.thrust::detail::normal_iterator.56"* %ref.tmp8, i8* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.56"* %m_begin7 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.56"* %ref.tmp8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size13 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size13, align 8, !tbaa !68
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE18uninitialized_copyINS0_15normal_iteratorIPKaEEEENS6_INS_10device_ptrIaEEEET_SD_SC_(%"class.thrust::detail::contiguous_storage.55"* %this, i8* %first.coerce, i8* %last.coerce, i8* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive7, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive8, align 8
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  %this9 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this9, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp11 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.56"* %result to %"class.thrust::iterator_adaptor.57"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.57"* %6)
  %7 = bitcast %"class.thrust::device_ptr"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::device_ptr"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp10, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive13, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive15, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive18, i32 0, i32 0
  %11 = load i8*, i8** %coerce.dive19, align 8
  %call20 = call i8* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIaEENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::device_malloc_allocator"* dereferenceable(1) %m_allocator, i8* %9, i8* %10, i8* %11)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive22, i32 0, i32 0
  store i8* %call20, i8** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive25, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive26, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEC2ES3_(%"class.thrust::detail::normal_iterator.56"* %retval, i8* %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %13) #5
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive30, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive31, align 8
  ret i8* %14
}

; Function Attrs: nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE5beginEv(%"class.thrust::detail::contiguous_storage.55"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.56"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.56"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.56"* %i, %"class.thrust::detail::normal_iterator.56"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE7destroyENS0_15normal_iteratorINS_10device_ptrIaEEEES8_(%"class.thrust::detail::contiguous_storage.55"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive9, align 8
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  %this10 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this10, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.56"* %first to %"class.thrust::iterator_adaptor.57"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.57"* %0)
  %1 = bitcast %"class.thrust::device_ptr"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.56"* %last to %"class.thrust::iterator_facade.58"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.56"* %first to %"class.thrust::iterator_facade.58"*
  %call11 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS5_aS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.58"* dereferenceable(1) %3, %"class.thrust::iterator_facade.58"* dereferenceable(1) %4)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive13, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive14, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIaEENS_10device_ptrIaEElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %m_allocator, i8* %5, i64 %call11)
  ret void
}

declare void @__cxa_rethrow()

declare void @__cxa_end_catch()

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE4sizeEv(%"class.thrust::detail::contiguous_storage.55"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !68
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE10deallocateERS3_NS_10device_ptrIaEEm(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a, i8* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %p.coerce, i8** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE10deallocateERS3_NS_10device_ptrIaEEmEN19workaround_warnings10deallocateES5_S7_m(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %0, i8* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.57"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.57"*, align 8
  store %"class.thrust::iterator_adaptor.57"* %this, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.57"*, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE10deallocateERS3_NS_10device_ptrIaEEmEN19workaround_warnings10deallocateES5_S7_m(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a, i8* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %p.coerce, i8** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZN6thrust23device_malloc_allocatorIaE10deallocateENS_10device_ptrIaEEm(%"class.thrust::device_malloc_allocator"* %0, i8* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIaE10deallocateENS_10device_ptrIaEEm(%"class.thrust::device_malloc_allocator"* %this, i8* %p.coerce, i64 %cnt) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %cnt.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %p.coerce, i8** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator"* %this, %"class.thrust::device_malloc_allocator"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %this.addr, align 8
  call void @_ZN6thrust10device_ptrIvEC2IaEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %agg.tmp, %"class.thrust::device_ptr"* dereferenceable(8) %p)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive5, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust11device_freeENS_10device_ptrIvEE(i8* %0)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust11device_freeENS_10device_ptrIvEE(i8* %ptr.coerce) #8 comdat {
entry:
  %ptr = alloca %"class.thrust::device_ptr.115", align 8
  %s = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive1, i32 0, i32 0
  store i8* %ptr.coerce, i8** %coerce.dive2, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::device_ptr.115"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.115"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive4, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_10device_ptrIvEEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i8* %4)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.end(i64 1, i8* %5) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIvEC2IaEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.115"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr"*, align 8
  store %"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.115"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr"* %other, %"class.thrust::device_ptr"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.115"*, %"class.thrust::device_ptr.115"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.115"* %this1 to %"class.thrust::pointer.116"*
  %1 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %other.addr, align 8
  call void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IaEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE(%"class.thrust::pointer.116"* %0, %"class.thrust::device_ptr"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_10device_ptrIvEEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i8* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::device_ptr.115", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive1, i32 0, i32 0
  store i8* %ptr.coerce, i8** %coerce.dive2, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call3 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call3 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::device_ptr.115"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.115"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive5, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_10device_ptrIvEEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, i8* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_10device_ptrIvEEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), i8* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::device_ptr.115", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive1, i32 0, i32 0
  store i8* %ptr.coerce, i8** %coerce.dive2, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call i8* @_ZN6thrust16raw_pointer_castINS_10device_ptrIvEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr.115"* dereferenceable(8) %ptr)
  %call3 = call i32 @cudaFree(i8* %call)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call3, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %x, %"struct.thrust::detail::execution_policy_base.121"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %x.addr, align 8
  %1 = bitcast %"struct.thrust::detail::execution_policy_base.121"* %0 to %"struct.thrust::system::cuda::detail::tag"*
  ret %"struct.thrust::system::cuda::detail::tag"* %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %x, %"struct.thrust::detail::execution_policy_base.121"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %x.addr, align 8
  ret %"struct.thrust::detail::execution_policy_base.121"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %error, i8* %message) #8 comdat {
entry:
  %error.addr = alloca i32, align 4
  %message.addr = alloca i8*, align 8
  store i32 %error, i32* %error.addr, align 4, !tbaa !73
  store i8* %message, i8** %message.addr, align 8, !tbaa !1
  %0 = load i32, i32* %error.addr, align 4, !tbaa !73
  %1 = load i8*, i8** %message.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %0, i8* %1)
  ret void
}

declare i32 @cudaFree(i8*) #3

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust16raw_pointer_castINS_10device_ptrIvEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr.115"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.115"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  store %"class.thrust::device_ptr.115"* %ptr, %"class.thrust::device_ptr.115"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.115"*, %"class.thrust::device_ptr.115"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.115"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.115"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive1, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive2, align 8
  %call = call i8* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIvEEE3getES3_(i8* %3)
  ret i8* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %e, i8* %message) #8 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %e.addr = alloca i32, align 4
  %message.addr = alloca i8*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store i32 %e, i32* %e.addr, align 4, !tbaa !73
  store i8* %message, i8** %message.addr, align 8, !tbaa !1
  %0 = load i32, i32* %e.addr, align 4, !tbaa !73
  %tobool = icmp ne i32 %0, 0
  br i1 %tobool, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 40) #5
  %1 = bitcast i8* %exception to %"class.thrust::system::system_error"*
  %2 = load i32, i32* %e.addr, align 4, !tbaa !73
  %call = invoke dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system13cuda_categoryEv()
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %3 = load i8*, i8** %message.addr, align 8, !tbaa !1
  invoke void @_ZN6thrust6system12system_errorC2EiRKNS0_14error_categoryEPKc(%"class.thrust::system::system_error"* %1, i32 %2, %"class.thrust::system::error_category"* dereferenceable(8) %call, i8* %3)
          to label %invoke.cont1 unwind label %lpad

invoke.cont1:                                     ; preds = %invoke.cont
  call void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system12system_errorE to i8*), i8* bitcast (void (%"class.thrust::system::system_error"*)* @_ZN6thrust6system12system_errorD2Ev to i8*)) #15
  unreachable

lpad:                                             ; preds = %invoke.cont, %if.then
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @__cxa_free_exception(i8* %exception) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system13cuda_categoryEv() #8 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %0 = load atomic i8, i8* bitcast (i64* @_ZGVZN6thrust6system13cuda_categoryEvE6result to i8*) acquire, align 8
  %guard.uninitialized = icmp eq i8 %0, 0
  br i1 %guard.uninitialized, label %init.check, label %init.end

init.check:                                       ; preds = %entry
  %1 = call i32 @__cxa_guard_acquire(i64* @_ZGVZN6thrust6system13cuda_categoryEvE6result) #5
  %tobool = icmp ne i32 %1, 0
  br i1 %tobool, label %init, label %init.end

init:                                             ; preds = %init.check
  invoke void @_ZN6thrust6system4cuda6detail19cuda_error_categoryC2Ev(%"class.thrust::system::cuda::detail::cuda_error_category"* @_ZZN6thrust6system13cuda_categoryEvE6result)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %init
  %2 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to void (i8*)*), i8* bitcast (%"class.thrust::system::cuda::detail::cuda_error_category"* @_ZZN6thrust6system13cuda_categoryEvE6result to i8*), i8* @__dso_handle) #5
  call void @__cxa_guard_release(i64* @_ZGVZN6thrust6system13cuda_categoryEvE6result) #5
  br label %init.end

init.end:                                         ; preds = %invoke.cont, %init.check, %entry
  ret %"class.thrust::system::error_category"* getelementptr inbounds (%"class.thrust::system::cuda::detail::cuda_error_category", %"class.thrust::system::cuda::detail::cuda_error_category"* @_ZZN6thrust6system13cuda_categoryEvE6result, i32 0, i32 0)

lpad:                                             ; preds = %init
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void @__cxa_guard_abort(i64* @_ZGVZN6thrust6system13cuda_categoryEvE6result) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val1 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system12system_errorC2EiRKNS0_14error_categoryEPKc(%"class.thrust::system::system_error"* %this, i32 %ev, %"class.thrust::system::error_category"* dereferenceable(8) %ecat, i8* %what_arg) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::system::system_error"*, align 8
  %ev.addr = alloca i32, align 4
  %ecat.addr = alloca %"class.thrust::system::error_category"*, align 8
  %what_arg.addr = alloca i8*, align 8
  %ref.tmp = alloca %"class.std::basic_string", align 8
  %ref.tmp2 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::system::system_error"* %this, %"class.thrust::system::system_error"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  store %"class.thrust::system::error_category"* %ecat, %"class.thrust::system::error_category"** %ecat.addr, align 8, !tbaa !7
  store i8* %what_arg, i8** %what_arg.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::system_error"*, %"class.thrust::system::system_error"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::system_error"* %this1 to %"class.std::runtime_error"*
  %1 = load i8*, i8** %what_arg.addr, align 8, !tbaa !1
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp2) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp, i8* %1, %"class.std::allocator"* dereferenceable(1) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZNSt13runtime_errorC2ERKSs(%"class.std::runtime_error"* %0, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp2) #5
  %2 = bitcast %"class.thrust::system::system_error"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTVN6thrust6system12system_errorE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %2, align 8, !tbaa !5
  %m_error_code = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 1
  %3 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %4 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %ecat.addr, align 8
  invoke void @_ZN6thrust6system10error_codeC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_code"* %m_error_code, i32 %3, %"class.thrust::system::error_category"* dereferenceable(8) %4)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  %m_what = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  invoke void @_ZNSsC2Ev(%"class.std::basic_string"* %m_what)
          to label %invoke.cont7 unwind label %lpad5

invoke.cont7:                                     ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          cleanup
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %8 = landingpad { i8*, i32 }
          cleanup
  %9 = extractvalue { i8*, i32 } %8, 0
  store i8* %9, i8** %exn.slot, align 8
  %10 = extractvalue { i8*, i32 } %8, 1
  store i32 %10, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont6, %invoke.cont4
  %11 = landingpad { i8*, i32 }
          cleanup
  %12 = extractvalue { i8*, i32 } %11, 0
  store i8* %12, i8** %exn.slot, align 8
  %13 = extractvalue { i8*, i32 } %11, 1
  store i32 %13, i32* %ehselector.slot, align 4
  %14 = bitcast %"class.thrust::system::system_error"* %this1 to %"class.std::runtime_error"*
  call void @_ZNSt13runtime_errorD2Ev(%"class.std::runtime_error"* %14) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val9 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system12system_errorD2Ev(%"class.thrust::system::system_error"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::system_error"*, align 8
  store %"class.thrust::system::system_error"* %this, %"class.thrust::system::system_error"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::system_error"*, %"class.thrust::system::system_error"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::system_error"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTVN6thrust6system12system_errorE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  %m_what = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %m_what) #5
  %1 = bitcast %"class.thrust::system::system_error"* %this1 to %"class.std::runtime_error"*
  call void @_ZNSt13runtime_errorD2Ev(%"class.std::runtime_error"* %1) #5
  ret void
}

; Function Attrs: nounwind
declare i32 @__cxa_guard_acquire(i64*) #5

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail19cuda_error_categoryC2Ev(%"class.thrust::system::cuda::detail::cuda_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::cuda_error_category"*, align 8
  store %"class.thrust::system::cuda::detail::cuda_error_category"* %this, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::cuda_error_category"*, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::cuda_error_category"* %this1 to %"class.thrust::system::error_category"*
  call void @_ZN6thrust6system14error_categoryC2Ev(%"class.thrust::system::error_category"* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::cuda_error_category"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([9 x i8*], [9 x i8*]* @_ZTVN6thrust6system4cuda6detail19cuda_error_categoryE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  ret void
}

; Function Attrs: nounwind
declare void @__cxa_guard_abort(i64*) #5

; Function Attrs: nounwind
declare void @__cxa_guard_release(i64*) #5

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system14error_categoryC2Ev(%"class.thrust::system::error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_category"*, align 8
  store %"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::error_category"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([9 x i8*], [9 x i8*]* @_ZTVN6thrust6system14error_categoryE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail19cuda_error_categoryD0Ev(%"class.thrust::system::cuda::detail::cuda_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::cuda_error_category"*, align 8
  store %"class.thrust::system::cuda::detail::cuda_error_category"* %this, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::cuda_error_category"*, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8
  call void bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to void (%"class.thrust::system::cuda::detail::cuda_error_category"*)*)(%"class.thrust::system::cuda::detail::cuda_error_category"* %this1) #5
  %0 = bitcast %"class.thrust::system::cuda::detail::cuda_error_category"* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZNK6thrust6system4cuda6detail19cuda_error_category4nameEv(%"class.thrust::system::cuda::detail::cuda_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::cuda_error_category"*, align 8
  store %"class.thrust::system::cuda::detail::cuda_error_category"* %this, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::cuda_error_category"*, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8
  ret i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.25, i32 0, i32 0)
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32, %"class.thrust::system::error_category"* } @_ZNK6thrust6system4cuda6detail19cuda_error_category23default_error_conditionEi(%"class.thrust::system::cuda::detail::cuda_error_category"* %this, i32 %ev) unnamed_addr #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::error_condition", align 8
  %this.addr = alloca %"class.thrust::system::cuda::detail::cuda_error_category"*, align 8
  %ev.addr = alloca i32, align 4
  store %"class.thrust::system::cuda::detail::cuda_error_category"* %this, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::cuda_error_category"*, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8
  %0 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %cmp = icmp slt i32 %0, 10000
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %call = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4cuda4errc6errc_tE(i32 %1)
  %2 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %3 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %2, i32 0, i32 0
  %4 = extractvalue { i32, %"class.thrust::system::error_category"* } %call, 0
  store i32 %4, i32* %3, align 8
  %5 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %2, i32 0, i32 1
  %6 = extractvalue { i32, %"class.thrust::system::error_category"* } %call, 1
  store %"class.thrust::system::error_category"* %6, %"class.thrust::system::error_category"** %5, align 8
  br label %return

if.end:                                           ; preds = %entry
  %call2 = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system15system_categoryEv()
  %7 = bitcast %"class.thrust::system::error_category"* %call2 to { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)***
  %vtable = load { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)**, { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)*** %7, align 8, !tbaa !5
  %vfn = getelementptr inbounds { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)*, { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)** %vtable, i64 3
  %8 = load { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)*, { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)** %vfn, align 8
  %9 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %call3 = call { i32, %"class.thrust::system::error_category"* } %8(%"class.thrust::system::error_category"* %call2, i32 %9)
  %10 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %11 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %10, i32 0, i32 0
  %12 = extractvalue { i32, %"class.thrust::system::error_category"* } %call3, 0
  store i32 %12, i32* %11, align 8
  %13 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %10, i32 0, i32 1
  %14 = extractvalue { i32, %"class.thrust::system::error_category"* } %call3, 1
  store %"class.thrust::system::error_category"* %14, %"class.thrust::system::error_category"** %13, align 8
  br label %return

return:                                           ; preds = %if.end, %if.then
  %15 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %16 = load { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %15, align 8
  ret { i32, %"class.thrust::system::error_category"* } %16
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system14error_category10equivalentEiRKNS0_15error_conditionE(%"class.thrust::system::error_category"* %this, i32 %code, %"class.thrust::system::error_condition"* dereferenceable(16) %condition) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_category"*, align 8
  %code.addr = alloca i32, align 4
  %condition.addr = alloca %"class.thrust::system::error_condition"*, align 8
  %ref.tmp = alloca %"class.thrust::system::error_condition", align 8
  store %"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"** %this.addr, align 8, !tbaa !1
  store i32 %code, i32* %code.addr, align 4, !tbaa !11
  store %"class.thrust::system::error_condition"* %condition, %"class.thrust::system::error_condition"** %condition.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::error_category"* %this1 to { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)***
  %vtable = load { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)**, { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)*** %0, align 8, !tbaa !5
  %vfn = getelementptr inbounds { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)*, { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)** %vtable, i64 3
  %1 = load { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)*, { i32, %"class.thrust::system::error_category"* } (%"class.thrust::system::error_category"*, i32)** %vfn, align 8
  %2 = load i32, i32* %code.addr, align 4, !tbaa !11
  %call = call { i32, %"class.thrust::system::error_category"* } %1(%"class.thrust::system::error_category"* %this1, i32 %2)
  %3 = bitcast %"class.thrust::system::error_condition"* %ref.tmp to { i32, %"class.thrust::system::error_category"* }*
  %4 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %3, i32 0, i32 0
  %5 = extractvalue { i32, %"class.thrust::system::error_category"* } %call, 0
  store i32 %5, i32* %4, align 8
  %6 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %3, i32 0, i32 1
  %7 = extractvalue { i32, %"class.thrust::system::error_category"* } %call, 1
  store %"class.thrust::system::error_category"* %7, %"class.thrust::system::error_category"** %6, align 8
  %8 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %condition.addr, align 8
  %call2 = call zeroext i1 @_ZN6thrust6systemeqERKNS0_15error_conditionES3_(%"class.thrust::system::error_condition"* dereferenceable(16) %ref.tmp, %"class.thrust::system::error_condition"* dereferenceable(16) %8)
  ret i1 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system14error_category10equivalentERKNS0_10error_codeEi(%"class.thrust::system::error_category"* %this, %"class.thrust::system::error_code"* dereferenceable(16) %code, i32 %condition) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_category"*, align 8
  %code.addr = alloca %"class.thrust::system::error_code"*, align 8
  %condition.addr = alloca i32, align 4
  %result = alloca i8, align 1
  store %"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::error_code"* %code, %"class.thrust::system::error_code"** %code.addr, align 8, !tbaa !7
  store i32 %condition, i32* %condition.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %this.addr, align 8
  call void @llvm.lifetime.start(i64 1, i8* %result) #5
  %0 = load %"class.thrust::system::error_code"*, %"class.thrust::system::error_code"** %code.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZNK6thrust6system10error_code8categoryEv(%"class.thrust::system::error_code"* %0)
  %call2 = call zeroext i1 @_ZNK6thrust6system14error_categoryeqERKS1_(%"class.thrust::system::error_category"* %this1, %"class.thrust::system::error_category"* dereferenceable(8) %call)
  br i1 %call2, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %1 = load %"class.thrust::system::error_code"*, %"class.thrust::system::error_code"** %code.addr, align 8
  %call3 = call i32 @_ZNK6thrust6system10error_code5valueEv(%"class.thrust::system::error_code"* %1)
  %2 = load i32, i32* %condition.addr, align 4, !tbaa !11
  %cmp = icmp eq i32 %call3, %2
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %3 = phi i1 [ false, %entry ], [ %cmp, %land.rhs ]
  %frombool = zext i1 %3 to i8
  store i8 %frombool, i8* %result, align 1, !tbaa !75
  %4 = load i8, i8* %result, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %4 to i1
  call void @llvm.lifetime.end(i64 1, i8* %result) #5
  ret i1 %tobool
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6system4cuda6detail19cuda_error_category7messageEi(%"class.std::basic_string"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::cuda_error_category"* %this, i32 %ev) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::cuda_error_category"*, align 8
  %ev.addr = alloca i32, align 4
  %ref.tmp = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %c_str = alloca i8*, align 8
  %ref.tmp3 = alloca %"class.std::allocator", align 1
  %cleanup.cond = alloca i1, align 1
  store %"class.thrust::system::cuda::detail::cuda_error_category"* %this, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::cuda_error_category"*, %"class.thrust::system::cuda::detail::cuda_error_category"** %this.addr, align 8
  %0 = load atomic i8, i8* bitcast (i64* @_ZGVZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err to i8*) acquire, align 8
  %guard.uninitialized = icmp eq i8 %0, 0
  br i1 %guard.uninitialized, label %init.check, label %init.end

init.check:                                       ; preds = %entry
  %1 = call i32 @__cxa_guard_acquire(i64* @_ZGVZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err) #5
  %tobool = icmp ne i32 %1, 0
  br i1 %tobool, label %init, label %init.end

init:                                             ; preds = %init.check
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* @_ZZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.28, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %init
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  %2 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.std::basic_string"*)* @_ZNSsD2Ev to void (i8*)*), i8* bitcast (%"class.std::basic_string"* @_ZZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err to i8*), i8* @__dso_handle) #5
  call void @__cxa_guard_release(i64* @_ZGVZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err) #5
  br label %init.end

init.end:                                         ; preds = %invoke.cont, %init.check, %entry
  %3 = bitcast i8** %c_str to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %call = call i8* @cudaGetErrorString(i32 %4)
  store i8* %call, i8** %c_str, align 8, !tbaa !1
  %5 = load i8*, i8** %c_str, align 8, !tbaa !1
  %tobool2 = icmp ne i8* %5, null
  store i1 false, i1* %cleanup.cond, align 1
  br i1 %tobool2, label %cond.true, label %cond.false

cond.true:                                        ; preds = %init.end
  %6 = load i8*, i8** %c_str, align 8, !tbaa !1
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp3) #5
  store i1 true, i1* %cleanup.cond, align 1
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %agg.result, i8* %6, %"class.std::allocator"* dereferenceable(1) %ref.tmp3)
          to label %invoke.cont5 unwind label %lpad4

invoke.cont5:                                     ; preds = %cond.true
  br label %cond.end

cond.false:                                       ; preds = %init.end
  invoke void @_ZNSsC1ERKSs(%"class.std::basic_string"* %agg.result, %"class.std::basic_string"* dereferenceable(8) @_ZZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err)
          to label %invoke.cont6 unwind label %lpad4

invoke.cont6:                                     ; preds = %cond.false
  br label %cond.end

cond.end:                                         ; preds = %invoke.cont6, %invoke.cont5
  %cleanup.is_active = load i1, i1* %cleanup.cond, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %cond.end
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp3) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %cond.end
  %7 = bitcast i8** %c_str to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  ret void

lpad:                                             ; preds = %init
  %8 = landingpad { i8*, i32 }
          cleanup
  %9 = extractvalue { i8*, i32 } %8, 0
  store i8* %9, i8** %exn.slot, align 8
  %10 = extractvalue { i8*, i32 } %8, 1
  store i32 %10, i32* %ehselector.slot, align 4
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  call void @__cxa_guard_abort(i64* @_ZGVZNK6thrust6system4cuda6detail19cuda_error_category7messageEiE11unknown_err) #5
  br label %eh.resume

lpad4:                                            ; preds = %cond.false, %cond.true
  %11 = landingpad { i8*, i32 }
          cleanup
  %12 = extractvalue { i8*, i32 } %11, 0
  store i8* %12, i8** %exn.slot, align 8
  %13 = extractvalue { i8*, i32 } %11, 1
  store i32 %13, i32* %ehselector.slot, align 4
  %cleanup.is_active7 = load i1, i1* %cleanup.cond, align 1
  br i1 %cleanup.is_active7, label %cleanup.action8, label %cleanup.done9

cleanup.action8:                                  ; preds = %lpad4
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp3) #5
  br label %cleanup.done9

cleanup.done9:                                    ; preds = %cleanup.action8, %lpad4
  %14 = bitcast i8** %c_str to i8*
  call void @llvm.lifetime.end(i64 8, i8* %14) #5
  br label %eh.resume

eh.resume:                                        ; preds = %cleanup.done9, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val10 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val10
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system14error_categoryD2Ev(%"class.thrust::system::error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_category"*, align 8
  store %"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::error_category"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([9 x i8*], [9 x i8*]* @_ZTVN6thrust6system14error_categoryE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system14error_categoryD0Ev(%"class.thrust::system::error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_category"*, align 8
  store %"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %this.addr, align 8
  call void @_ZN6thrust6system14error_categoryD2Ev(%"class.thrust::system::error_category"* %this1) #5
  %0 = bitcast %"class.thrust::system::error_category"* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

declare void @__cxa_pure_virtual() unnamed_addr

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32, %"class.thrust::system::error_category"* } @_ZNK6thrust6system14error_category23default_error_conditionEi(%"class.thrust::system::error_category"* %this, i32 %ev) unnamed_addr #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::error_condition", align 8
  %this.addr = alloca %"class.thrust::system::error_category"*, align 8
  %ev.addr = alloca i32, align 4
  store %"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %this.addr, align 8
  %0 = load i32, i32* %ev.addr, align 4, !tbaa !11
  call void @_ZN6thrust6system15error_conditionC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_condition"* %retval, i32 %0, %"class.thrust::system::error_category"* dereferenceable(8) %this1)
  %1 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %2 = load { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %1, align 8
  ret { i32, %"class.thrust::system::error_category"* } %2
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system15error_conditionC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_condition"* %this, i32 %val, %"class.thrust::system::error_category"* dereferenceable(8) %cat) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_condition"*, align 8
  %val.addr = alloca i32, align 4
  %cat.addr = alloca %"class.thrust::system::error_category"*, align 8
  store %"class.thrust::system::error_condition"* %this, %"class.thrust::system::error_condition"** %this.addr, align 8, !tbaa !1
  store i32 %val, i32* %val.addr, align 4, !tbaa !11
  store %"class.thrust::system::error_category"* %cat, %"class.thrust::system::error_category"** %cat.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %this.addr, align 8
  %m_val = getelementptr inbounds %"class.thrust::system::error_condition", %"class.thrust::system::error_condition"* %this1, i32 0, i32 0
  %0 = load i32, i32* %val.addr, align 4, !tbaa !11
  store i32 %0, i32* %m_val, align 8, !tbaa !78
  %m_cat = getelementptr inbounds %"class.thrust::system::error_condition", %"class.thrust::system::error_condition"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %cat.addr, align 8
  store %"class.thrust::system::error_category"* %1, %"class.thrust::system::error_category"** %m_cat, align 8, !tbaa !80
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4cuda4errc6errc_tE(i32 %e) #8 comdat {
entry:
  %retval = alloca %"class.thrust::system::error_condition", align 8
  %e.addr = alloca i32, align 4
  store i32 %e, i32* %e.addr, align 4, !tbaa !81
  %0 = load i32, i32* %e.addr, align 4, !tbaa !81
  %call = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system13cuda_categoryEv()
  call void @_ZN6thrust6system15error_conditionC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_condition"* %retval, i32 %0, %"class.thrust::system::error_category"* dereferenceable(8) %call)
  %1 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %2 = load { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %1, align 8
  ret { i32, %"class.thrust::system::error_category"* } %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system15system_categoryEv() #8 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %0 = load atomic i8, i8* bitcast (i64* @_ZGVZN6thrust6system15system_categoryEvE6result to i8*) acquire, align 8
  %guard.uninitialized = icmp eq i8 %0, 0
  br i1 %guard.uninitialized, label %init.check, label %init.end

init.check:                                       ; preds = %entry
  %1 = call i32 @__cxa_guard_acquire(i64* @_ZGVZN6thrust6system15system_categoryEvE6result) #5
  %tobool = icmp ne i32 %1, 0
  br i1 %tobool, label %init, label %init.end

init:                                             ; preds = %init.check
  invoke void @_ZN6thrust6system6detail21system_error_categoryC2Ev(%"class.thrust::system::detail::system_error_category"* @_ZZN6thrust6system15system_categoryEvE6result)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %init
  %2 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to void (i8*)*), i8* bitcast (%"class.thrust::system::detail::system_error_category"* @_ZZN6thrust6system15system_categoryEvE6result to i8*), i8* @__dso_handle) #5
  call void @__cxa_guard_release(i64* @_ZGVZN6thrust6system15system_categoryEvE6result) #5
  br label %init.end

init.end:                                         ; preds = %invoke.cont, %init.check, %entry
  ret %"class.thrust::system::error_category"* getelementptr inbounds (%"class.thrust::system::detail::system_error_category", %"class.thrust::system::detail::system_error_category"* @_ZZN6thrust6system15system_categoryEvE6result, i32 0, i32 0)

lpad:                                             ; preds = %init
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void @__cxa_guard_abort(i64* @_ZGVZN6thrust6system15system_categoryEvE6result) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val1 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail21system_error_categoryC2Ev(%"class.thrust::system::detail::system_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::system_error_category"*, align 8
  store %"class.thrust::system::detail::system_error_category"* %this, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::system_error_category"*, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::detail::system_error_category"* %this1 to %"class.thrust::system::error_category"*
  call void @_ZN6thrust6system14error_categoryC2Ev(%"class.thrust::system::error_category"* %0) #5
  %1 = bitcast %"class.thrust::system::detail::system_error_category"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([9 x i8*], [9 x i8*]* @_ZTVN6thrust6system6detail21system_error_categoryE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail21system_error_categoryD0Ev(%"class.thrust::system::detail::system_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::system_error_category"*, align 8
  store %"class.thrust::system::detail::system_error_category"* %this, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::system_error_category"*, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8
  call void bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to void (%"class.thrust::system::detail::system_error_category"*)*)(%"class.thrust::system::detail::system_error_category"* %this1) #5
  %0 = bitcast %"class.thrust::system::detail::system_error_category"* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZNK6thrust6system6detail21system_error_category4nameEv(%"class.thrust::system::detail::system_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::system_error_category"*, align 8
  store %"class.thrust::system::detail::system_error_category"* %this, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::system_error_category"*, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8
  ret i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.26, i32 0, i32 0)
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32, %"class.thrust::system::error_category"* } @_ZNK6thrust6system6detail21system_error_category23default_error_conditionEi(%"class.thrust::system::detail::system_error_category"* %this, i32 %ev) unnamed_addr #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::error_condition", align 8
  %this.addr = alloca %"class.thrust::system::detail::system_error_category"*, align 8
  %ev.addr = alloca i32, align 4
  store %"class.thrust::system::detail::system_error_category"* %this, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::detail::system_error_category"*, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8
  %0 = load i32, i32* %ev.addr, align 4, !tbaa !11
  switch i32 %0, label %sw.default [
    i32 9901, label %sw.bb
    i32 9902, label %sw.bb2
    i32 9903, label %sw.bb4
    i32 9904, label %sw.bb6
    i32 9946, label %sw.bb8
    i32 9947, label %sw.bb10
    i32 9948, label %sw.bb12
    i32 9949, label %sw.bb14
    i32 9905, label %sw.bb16
    i32 9950, label %sw.bb18
    i32 9906, label %sw.bb20
    i32 9907, label %sw.bb22
    i32 9908, label %sw.bb24
    i32 9909, label %sw.bb26
    i32 9951, label %sw.bb28
    i32 9910, label %sw.bb30
    i32 9952, label %sw.bb32
    i32 9953, label %sw.bb34
    i32 9954, label %sw.bb36
    i32 9955, label %sw.bb38
    i32 9956, label %sw.bb40
    i32 9957, label %sw.bb42
    i32 9942, label %sw.bb44
    i32 9911, label %sw.bb46
    i32 9912, label %sw.bb48
    i32 9945, label %sw.bb50
    i32 9958, label %sw.bb52
    i32 9959, label %sw.bb54
    i32 9943, label %sw.bb56
    i32 9960, label %sw.bb58
    i32 9961, label %sw.bb60
    i32 9962, label %sw.bb62
    i32 9913, label %sw.bb64
    i32 9914, label %sw.bb66
    i32 9915, label %sw.bb68
    i32 9916, label %sw.bb70
    i32 9917, label %sw.bb72
    i32 9963, label %sw.bb74
    i32 9918, label %sw.bb76
    i32 9964, label %sw.bb78
    i32 9919, label %sw.bb80
    i32 9920, label %sw.bb82
    i32 9921, label %sw.bb84
    i32 9965, label %sw.bb86
    i32 9922, label %sw.bb88
    i32 9966, label %sw.bb90
    i32 9967, label %sw.bb92
    i32 9968, label %sw.bb94
    i32 9969, label %sw.bb96
    i32 9970, label %sw.bb98
    i32 9923, label %sw.bb100
    i32 9924, label %sw.bb102
    i32 9925, label %sw.bb104
    i32 9971, label %sw.bb106
    i32 9926, label %sw.bb108
    i32 9927, label %sw.bb110
    i32 9928, label %sw.bb112
    i32 9972, label %sw.bb114
    i32 9929, label %sw.bb116
    i32 9930, label %sw.bb118
    i32 9931, label %sw.bb120
    i32 9973, label %sw.bb122
    i32 9932, label %sw.bb124
    i32 9933, label %sw.bb126
    i32 9974, label %sw.bb128
    i32 9975, label %sw.bb130
    i32 9976, label %sw.bb132
    i32 9944, label %sw.bb134
    i32 9934, label %sw.bb136
    i32 9935, label %sw.bb138
    i32 9936, label %sw.bb140
    i32 9938, label %sw.bb142
    i32 9977, label %sw.bb144
    i32 9978, label %sw.bb146
    i32 9979, label %sw.bb148
    i32 9939, label %sw.bb150
    i32 9940, label %sw.bb152
    i32 9941, label %sw.bb154
  ]

sw.bb:                                            ; preds = %entry
  %call = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9901)
  %1 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %2 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %1, i32 0, i32 0
  %3 = extractvalue { i32, %"class.thrust::system::error_category"* } %call, 0
  store i32 %3, i32* %2, align 8
  %4 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %1, i32 0, i32 1
  %5 = extractvalue { i32, %"class.thrust::system::error_category"* } %call, 1
  store %"class.thrust::system::error_category"* %5, %"class.thrust::system::error_category"** %4, align 8
  br label %return

sw.bb2:                                           ; preds = %entry
  %call3 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9902)
  %6 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %7 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %6, i32 0, i32 0
  %8 = extractvalue { i32, %"class.thrust::system::error_category"* } %call3, 0
  store i32 %8, i32* %7, align 8
  %9 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %6, i32 0, i32 1
  %10 = extractvalue { i32, %"class.thrust::system::error_category"* } %call3, 1
  store %"class.thrust::system::error_category"* %10, %"class.thrust::system::error_category"** %9, align 8
  br label %return

sw.bb4:                                           ; preds = %entry
  %call5 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9903)
  %11 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %12 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %11, i32 0, i32 0
  %13 = extractvalue { i32, %"class.thrust::system::error_category"* } %call5, 0
  store i32 %13, i32* %12, align 8
  %14 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %11, i32 0, i32 1
  %15 = extractvalue { i32, %"class.thrust::system::error_category"* } %call5, 1
  store %"class.thrust::system::error_category"* %15, %"class.thrust::system::error_category"** %14, align 8
  br label %return

sw.bb6:                                           ; preds = %entry
  %call7 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9904)
  %16 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %17 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %16, i32 0, i32 0
  %18 = extractvalue { i32, %"class.thrust::system::error_category"* } %call7, 0
  store i32 %18, i32* %17, align 8
  %19 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %16, i32 0, i32 1
  %20 = extractvalue { i32, %"class.thrust::system::error_category"* } %call7, 1
  store %"class.thrust::system::error_category"* %20, %"class.thrust::system::error_category"** %19, align 8
  br label %return

sw.bb8:                                           ; preds = %entry
  %call9 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9946)
  %21 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %22 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %21, i32 0, i32 0
  %23 = extractvalue { i32, %"class.thrust::system::error_category"* } %call9, 0
  store i32 %23, i32* %22, align 8
  %24 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %21, i32 0, i32 1
  %25 = extractvalue { i32, %"class.thrust::system::error_category"* } %call9, 1
  store %"class.thrust::system::error_category"* %25, %"class.thrust::system::error_category"** %24, align 8
  br label %return

sw.bb10:                                          ; preds = %entry
  %call11 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9947)
  %26 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %27 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %26, i32 0, i32 0
  %28 = extractvalue { i32, %"class.thrust::system::error_category"* } %call11, 0
  store i32 %28, i32* %27, align 8
  %29 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %26, i32 0, i32 1
  %30 = extractvalue { i32, %"class.thrust::system::error_category"* } %call11, 1
  store %"class.thrust::system::error_category"* %30, %"class.thrust::system::error_category"** %29, align 8
  br label %return

sw.bb12:                                          ; preds = %entry
  %call13 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9948)
  %31 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %32 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %31, i32 0, i32 0
  %33 = extractvalue { i32, %"class.thrust::system::error_category"* } %call13, 0
  store i32 %33, i32* %32, align 8
  %34 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %31, i32 0, i32 1
  %35 = extractvalue { i32, %"class.thrust::system::error_category"* } %call13, 1
  store %"class.thrust::system::error_category"* %35, %"class.thrust::system::error_category"** %34, align 8
  br label %return

sw.bb14:                                          ; preds = %entry
  %call15 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9949)
  %36 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %37 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %36, i32 0, i32 0
  %38 = extractvalue { i32, %"class.thrust::system::error_category"* } %call15, 0
  store i32 %38, i32* %37, align 8
  %39 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %36, i32 0, i32 1
  %40 = extractvalue { i32, %"class.thrust::system::error_category"* } %call15, 1
  store %"class.thrust::system::error_category"* %40, %"class.thrust::system::error_category"** %39, align 8
  br label %return

sw.bb16:                                          ; preds = %entry
  %call17 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9905)
  %41 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %42 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %41, i32 0, i32 0
  %43 = extractvalue { i32, %"class.thrust::system::error_category"* } %call17, 0
  store i32 %43, i32* %42, align 8
  %44 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %41, i32 0, i32 1
  %45 = extractvalue { i32, %"class.thrust::system::error_category"* } %call17, 1
  store %"class.thrust::system::error_category"* %45, %"class.thrust::system::error_category"** %44, align 8
  br label %return

sw.bb18:                                          ; preds = %entry
  %call19 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9950)
  %46 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %47 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %46, i32 0, i32 0
  %48 = extractvalue { i32, %"class.thrust::system::error_category"* } %call19, 0
  store i32 %48, i32* %47, align 8
  %49 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %46, i32 0, i32 1
  %50 = extractvalue { i32, %"class.thrust::system::error_category"* } %call19, 1
  store %"class.thrust::system::error_category"* %50, %"class.thrust::system::error_category"** %49, align 8
  br label %return

sw.bb20:                                          ; preds = %entry
  %call21 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9906)
  %51 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %52 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %51, i32 0, i32 0
  %53 = extractvalue { i32, %"class.thrust::system::error_category"* } %call21, 0
  store i32 %53, i32* %52, align 8
  %54 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %51, i32 0, i32 1
  %55 = extractvalue { i32, %"class.thrust::system::error_category"* } %call21, 1
  store %"class.thrust::system::error_category"* %55, %"class.thrust::system::error_category"** %54, align 8
  br label %return

sw.bb22:                                          ; preds = %entry
  %call23 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9907)
  %56 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %57 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %56, i32 0, i32 0
  %58 = extractvalue { i32, %"class.thrust::system::error_category"* } %call23, 0
  store i32 %58, i32* %57, align 8
  %59 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %56, i32 0, i32 1
  %60 = extractvalue { i32, %"class.thrust::system::error_category"* } %call23, 1
  store %"class.thrust::system::error_category"* %60, %"class.thrust::system::error_category"** %59, align 8
  br label %return

sw.bb24:                                          ; preds = %entry
  %call25 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9908)
  %61 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %62 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %61, i32 0, i32 0
  %63 = extractvalue { i32, %"class.thrust::system::error_category"* } %call25, 0
  store i32 %63, i32* %62, align 8
  %64 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %61, i32 0, i32 1
  %65 = extractvalue { i32, %"class.thrust::system::error_category"* } %call25, 1
  store %"class.thrust::system::error_category"* %65, %"class.thrust::system::error_category"** %64, align 8
  br label %return

sw.bb26:                                          ; preds = %entry
  %call27 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9909)
  %66 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %67 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %66, i32 0, i32 0
  %68 = extractvalue { i32, %"class.thrust::system::error_category"* } %call27, 0
  store i32 %68, i32* %67, align 8
  %69 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %66, i32 0, i32 1
  %70 = extractvalue { i32, %"class.thrust::system::error_category"* } %call27, 1
  store %"class.thrust::system::error_category"* %70, %"class.thrust::system::error_category"** %69, align 8
  br label %return

sw.bb28:                                          ; preds = %entry
  %call29 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9951)
  %71 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %72 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %71, i32 0, i32 0
  %73 = extractvalue { i32, %"class.thrust::system::error_category"* } %call29, 0
  store i32 %73, i32* %72, align 8
  %74 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %71, i32 0, i32 1
  %75 = extractvalue { i32, %"class.thrust::system::error_category"* } %call29, 1
  store %"class.thrust::system::error_category"* %75, %"class.thrust::system::error_category"** %74, align 8
  br label %return

sw.bb30:                                          ; preds = %entry
  %call31 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9910)
  %76 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %77 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %76, i32 0, i32 0
  %78 = extractvalue { i32, %"class.thrust::system::error_category"* } %call31, 0
  store i32 %78, i32* %77, align 8
  %79 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %76, i32 0, i32 1
  %80 = extractvalue { i32, %"class.thrust::system::error_category"* } %call31, 1
  store %"class.thrust::system::error_category"* %80, %"class.thrust::system::error_category"** %79, align 8
  br label %return

sw.bb32:                                          ; preds = %entry
  %call33 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9952)
  %81 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %82 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %81, i32 0, i32 0
  %83 = extractvalue { i32, %"class.thrust::system::error_category"* } %call33, 0
  store i32 %83, i32* %82, align 8
  %84 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %81, i32 0, i32 1
  %85 = extractvalue { i32, %"class.thrust::system::error_category"* } %call33, 1
  store %"class.thrust::system::error_category"* %85, %"class.thrust::system::error_category"** %84, align 8
  br label %return

sw.bb34:                                          ; preds = %entry
  %call35 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9953)
  %86 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %87 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %86, i32 0, i32 0
  %88 = extractvalue { i32, %"class.thrust::system::error_category"* } %call35, 0
  store i32 %88, i32* %87, align 8
  %89 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %86, i32 0, i32 1
  %90 = extractvalue { i32, %"class.thrust::system::error_category"* } %call35, 1
  store %"class.thrust::system::error_category"* %90, %"class.thrust::system::error_category"** %89, align 8
  br label %return

sw.bb36:                                          ; preds = %entry
  %call37 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9954)
  %91 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %92 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %91, i32 0, i32 0
  %93 = extractvalue { i32, %"class.thrust::system::error_category"* } %call37, 0
  store i32 %93, i32* %92, align 8
  %94 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %91, i32 0, i32 1
  %95 = extractvalue { i32, %"class.thrust::system::error_category"* } %call37, 1
  store %"class.thrust::system::error_category"* %95, %"class.thrust::system::error_category"** %94, align 8
  br label %return

sw.bb38:                                          ; preds = %entry
  %call39 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9955)
  %96 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %97 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %96, i32 0, i32 0
  %98 = extractvalue { i32, %"class.thrust::system::error_category"* } %call39, 0
  store i32 %98, i32* %97, align 8
  %99 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %96, i32 0, i32 1
  %100 = extractvalue { i32, %"class.thrust::system::error_category"* } %call39, 1
  store %"class.thrust::system::error_category"* %100, %"class.thrust::system::error_category"** %99, align 8
  br label %return

sw.bb40:                                          ; preds = %entry
  %call41 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9956)
  %101 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %102 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %101, i32 0, i32 0
  %103 = extractvalue { i32, %"class.thrust::system::error_category"* } %call41, 0
  store i32 %103, i32* %102, align 8
  %104 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %101, i32 0, i32 1
  %105 = extractvalue { i32, %"class.thrust::system::error_category"* } %call41, 1
  store %"class.thrust::system::error_category"* %105, %"class.thrust::system::error_category"** %104, align 8
  br label %return

sw.bb42:                                          ; preds = %entry
  %call43 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9957)
  %106 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %107 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %106, i32 0, i32 0
  %108 = extractvalue { i32, %"class.thrust::system::error_category"* } %call43, 0
  store i32 %108, i32* %107, align 8
  %109 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %106, i32 0, i32 1
  %110 = extractvalue { i32, %"class.thrust::system::error_category"* } %call43, 1
  store %"class.thrust::system::error_category"* %110, %"class.thrust::system::error_category"** %109, align 8
  br label %return

sw.bb44:                                          ; preds = %entry
  %call45 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9942)
  %111 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %112 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %111, i32 0, i32 0
  %113 = extractvalue { i32, %"class.thrust::system::error_category"* } %call45, 0
  store i32 %113, i32* %112, align 8
  %114 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %111, i32 0, i32 1
  %115 = extractvalue { i32, %"class.thrust::system::error_category"* } %call45, 1
  store %"class.thrust::system::error_category"* %115, %"class.thrust::system::error_category"** %114, align 8
  br label %return

sw.bb46:                                          ; preds = %entry
  %call47 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9911)
  %116 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %117 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %116, i32 0, i32 0
  %118 = extractvalue { i32, %"class.thrust::system::error_category"* } %call47, 0
  store i32 %118, i32* %117, align 8
  %119 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %116, i32 0, i32 1
  %120 = extractvalue { i32, %"class.thrust::system::error_category"* } %call47, 1
  store %"class.thrust::system::error_category"* %120, %"class.thrust::system::error_category"** %119, align 8
  br label %return

sw.bb48:                                          ; preds = %entry
  %call49 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9912)
  %121 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %122 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %121, i32 0, i32 0
  %123 = extractvalue { i32, %"class.thrust::system::error_category"* } %call49, 0
  store i32 %123, i32* %122, align 8
  %124 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %121, i32 0, i32 1
  %125 = extractvalue { i32, %"class.thrust::system::error_category"* } %call49, 1
  store %"class.thrust::system::error_category"* %125, %"class.thrust::system::error_category"** %124, align 8
  br label %return

sw.bb50:                                          ; preds = %entry
  %call51 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9945)
  %126 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %127 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %126, i32 0, i32 0
  %128 = extractvalue { i32, %"class.thrust::system::error_category"* } %call51, 0
  store i32 %128, i32* %127, align 8
  %129 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %126, i32 0, i32 1
  %130 = extractvalue { i32, %"class.thrust::system::error_category"* } %call51, 1
  store %"class.thrust::system::error_category"* %130, %"class.thrust::system::error_category"** %129, align 8
  br label %return

sw.bb52:                                          ; preds = %entry
  %call53 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9958)
  %131 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %132 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %131, i32 0, i32 0
  %133 = extractvalue { i32, %"class.thrust::system::error_category"* } %call53, 0
  store i32 %133, i32* %132, align 8
  %134 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %131, i32 0, i32 1
  %135 = extractvalue { i32, %"class.thrust::system::error_category"* } %call53, 1
  store %"class.thrust::system::error_category"* %135, %"class.thrust::system::error_category"** %134, align 8
  br label %return

sw.bb54:                                          ; preds = %entry
  %call55 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9959)
  %136 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %137 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %136, i32 0, i32 0
  %138 = extractvalue { i32, %"class.thrust::system::error_category"* } %call55, 0
  store i32 %138, i32* %137, align 8
  %139 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %136, i32 0, i32 1
  %140 = extractvalue { i32, %"class.thrust::system::error_category"* } %call55, 1
  store %"class.thrust::system::error_category"* %140, %"class.thrust::system::error_category"** %139, align 8
  br label %return

sw.bb56:                                          ; preds = %entry
  %call57 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9943)
  %141 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %142 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %141, i32 0, i32 0
  %143 = extractvalue { i32, %"class.thrust::system::error_category"* } %call57, 0
  store i32 %143, i32* %142, align 8
  %144 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %141, i32 0, i32 1
  %145 = extractvalue { i32, %"class.thrust::system::error_category"* } %call57, 1
  store %"class.thrust::system::error_category"* %145, %"class.thrust::system::error_category"** %144, align 8
  br label %return

sw.bb58:                                          ; preds = %entry
  %call59 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9960)
  %146 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %147 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %146, i32 0, i32 0
  %148 = extractvalue { i32, %"class.thrust::system::error_category"* } %call59, 0
  store i32 %148, i32* %147, align 8
  %149 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %146, i32 0, i32 1
  %150 = extractvalue { i32, %"class.thrust::system::error_category"* } %call59, 1
  store %"class.thrust::system::error_category"* %150, %"class.thrust::system::error_category"** %149, align 8
  br label %return

sw.bb60:                                          ; preds = %entry
  %call61 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9961)
  %151 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %152 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %151, i32 0, i32 0
  %153 = extractvalue { i32, %"class.thrust::system::error_category"* } %call61, 0
  store i32 %153, i32* %152, align 8
  %154 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %151, i32 0, i32 1
  %155 = extractvalue { i32, %"class.thrust::system::error_category"* } %call61, 1
  store %"class.thrust::system::error_category"* %155, %"class.thrust::system::error_category"** %154, align 8
  br label %return

sw.bb62:                                          ; preds = %entry
  %call63 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9962)
  %156 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %157 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %156, i32 0, i32 0
  %158 = extractvalue { i32, %"class.thrust::system::error_category"* } %call63, 0
  store i32 %158, i32* %157, align 8
  %159 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %156, i32 0, i32 1
  %160 = extractvalue { i32, %"class.thrust::system::error_category"* } %call63, 1
  store %"class.thrust::system::error_category"* %160, %"class.thrust::system::error_category"** %159, align 8
  br label %return

sw.bb64:                                          ; preds = %entry
  %call65 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9913)
  %161 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %162 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %161, i32 0, i32 0
  %163 = extractvalue { i32, %"class.thrust::system::error_category"* } %call65, 0
  store i32 %163, i32* %162, align 8
  %164 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %161, i32 0, i32 1
  %165 = extractvalue { i32, %"class.thrust::system::error_category"* } %call65, 1
  store %"class.thrust::system::error_category"* %165, %"class.thrust::system::error_category"** %164, align 8
  br label %return

sw.bb66:                                          ; preds = %entry
  %call67 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9914)
  %166 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %167 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %166, i32 0, i32 0
  %168 = extractvalue { i32, %"class.thrust::system::error_category"* } %call67, 0
  store i32 %168, i32* %167, align 8
  %169 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %166, i32 0, i32 1
  %170 = extractvalue { i32, %"class.thrust::system::error_category"* } %call67, 1
  store %"class.thrust::system::error_category"* %170, %"class.thrust::system::error_category"** %169, align 8
  br label %return

sw.bb68:                                          ; preds = %entry
  %call69 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9915)
  %171 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %172 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %171, i32 0, i32 0
  %173 = extractvalue { i32, %"class.thrust::system::error_category"* } %call69, 0
  store i32 %173, i32* %172, align 8
  %174 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %171, i32 0, i32 1
  %175 = extractvalue { i32, %"class.thrust::system::error_category"* } %call69, 1
  store %"class.thrust::system::error_category"* %175, %"class.thrust::system::error_category"** %174, align 8
  br label %return

sw.bb70:                                          ; preds = %entry
  %call71 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9916)
  %176 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %177 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %176, i32 0, i32 0
  %178 = extractvalue { i32, %"class.thrust::system::error_category"* } %call71, 0
  store i32 %178, i32* %177, align 8
  %179 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %176, i32 0, i32 1
  %180 = extractvalue { i32, %"class.thrust::system::error_category"* } %call71, 1
  store %"class.thrust::system::error_category"* %180, %"class.thrust::system::error_category"** %179, align 8
  br label %return

sw.bb72:                                          ; preds = %entry
  %call73 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9917)
  %181 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %182 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %181, i32 0, i32 0
  %183 = extractvalue { i32, %"class.thrust::system::error_category"* } %call73, 0
  store i32 %183, i32* %182, align 8
  %184 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %181, i32 0, i32 1
  %185 = extractvalue { i32, %"class.thrust::system::error_category"* } %call73, 1
  store %"class.thrust::system::error_category"* %185, %"class.thrust::system::error_category"** %184, align 8
  br label %return

sw.bb74:                                          ; preds = %entry
  %call75 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9963)
  %186 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %187 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %186, i32 0, i32 0
  %188 = extractvalue { i32, %"class.thrust::system::error_category"* } %call75, 0
  store i32 %188, i32* %187, align 8
  %189 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %186, i32 0, i32 1
  %190 = extractvalue { i32, %"class.thrust::system::error_category"* } %call75, 1
  store %"class.thrust::system::error_category"* %190, %"class.thrust::system::error_category"** %189, align 8
  br label %return

sw.bb76:                                          ; preds = %entry
  %call77 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9918)
  %191 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %192 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %191, i32 0, i32 0
  %193 = extractvalue { i32, %"class.thrust::system::error_category"* } %call77, 0
  store i32 %193, i32* %192, align 8
  %194 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %191, i32 0, i32 1
  %195 = extractvalue { i32, %"class.thrust::system::error_category"* } %call77, 1
  store %"class.thrust::system::error_category"* %195, %"class.thrust::system::error_category"** %194, align 8
  br label %return

sw.bb78:                                          ; preds = %entry
  %call79 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9964)
  %196 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %197 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %196, i32 0, i32 0
  %198 = extractvalue { i32, %"class.thrust::system::error_category"* } %call79, 0
  store i32 %198, i32* %197, align 8
  %199 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %196, i32 0, i32 1
  %200 = extractvalue { i32, %"class.thrust::system::error_category"* } %call79, 1
  store %"class.thrust::system::error_category"* %200, %"class.thrust::system::error_category"** %199, align 8
  br label %return

sw.bb80:                                          ; preds = %entry
  %call81 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9919)
  %201 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %202 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %201, i32 0, i32 0
  %203 = extractvalue { i32, %"class.thrust::system::error_category"* } %call81, 0
  store i32 %203, i32* %202, align 8
  %204 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %201, i32 0, i32 1
  %205 = extractvalue { i32, %"class.thrust::system::error_category"* } %call81, 1
  store %"class.thrust::system::error_category"* %205, %"class.thrust::system::error_category"** %204, align 8
  br label %return

sw.bb82:                                          ; preds = %entry
  %call83 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9920)
  %206 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %207 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %206, i32 0, i32 0
  %208 = extractvalue { i32, %"class.thrust::system::error_category"* } %call83, 0
  store i32 %208, i32* %207, align 8
  %209 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %206, i32 0, i32 1
  %210 = extractvalue { i32, %"class.thrust::system::error_category"* } %call83, 1
  store %"class.thrust::system::error_category"* %210, %"class.thrust::system::error_category"** %209, align 8
  br label %return

sw.bb84:                                          ; preds = %entry
  %call85 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9921)
  %211 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %212 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %211, i32 0, i32 0
  %213 = extractvalue { i32, %"class.thrust::system::error_category"* } %call85, 0
  store i32 %213, i32* %212, align 8
  %214 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %211, i32 0, i32 1
  %215 = extractvalue { i32, %"class.thrust::system::error_category"* } %call85, 1
  store %"class.thrust::system::error_category"* %215, %"class.thrust::system::error_category"** %214, align 8
  br label %return

sw.bb86:                                          ; preds = %entry
  %call87 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9965)
  %216 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %217 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %216, i32 0, i32 0
  %218 = extractvalue { i32, %"class.thrust::system::error_category"* } %call87, 0
  store i32 %218, i32* %217, align 8
  %219 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %216, i32 0, i32 1
  %220 = extractvalue { i32, %"class.thrust::system::error_category"* } %call87, 1
  store %"class.thrust::system::error_category"* %220, %"class.thrust::system::error_category"** %219, align 8
  br label %return

sw.bb88:                                          ; preds = %entry
  %call89 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9922)
  %221 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %222 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %221, i32 0, i32 0
  %223 = extractvalue { i32, %"class.thrust::system::error_category"* } %call89, 0
  store i32 %223, i32* %222, align 8
  %224 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %221, i32 0, i32 1
  %225 = extractvalue { i32, %"class.thrust::system::error_category"* } %call89, 1
  store %"class.thrust::system::error_category"* %225, %"class.thrust::system::error_category"** %224, align 8
  br label %return

sw.bb90:                                          ; preds = %entry
  %call91 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9966)
  %226 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %227 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %226, i32 0, i32 0
  %228 = extractvalue { i32, %"class.thrust::system::error_category"* } %call91, 0
  store i32 %228, i32* %227, align 8
  %229 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %226, i32 0, i32 1
  %230 = extractvalue { i32, %"class.thrust::system::error_category"* } %call91, 1
  store %"class.thrust::system::error_category"* %230, %"class.thrust::system::error_category"** %229, align 8
  br label %return

sw.bb92:                                          ; preds = %entry
  %call93 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9967)
  %231 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %232 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %231, i32 0, i32 0
  %233 = extractvalue { i32, %"class.thrust::system::error_category"* } %call93, 0
  store i32 %233, i32* %232, align 8
  %234 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %231, i32 0, i32 1
  %235 = extractvalue { i32, %"class.thrust::system::error_category"* } %call93, 1
  store %"class.thrust::system::error_category"* %235, %"class.thrust::system::error_category"** %234, align 8
  br label %return

sw.bb94:                                          ; preds = %entry
  %call95 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9968)
  %236 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %237 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %236, i32 0, i32 0
  %238 = extractvalue { i32, %"class.thrust::system::error_category"* } %call95, 0
  store i32 %238, i32* %237, align 8
  %239 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %236, i32 0, i32 1
  %240 = extractvalue { i32, %"class.thrust::system::error_category"* } %call95, 1
  store %"class.thrust::system::error_category"* %240, %"class.thrust::system::error_category"** %239, align 8
  br label %return

sw.bb96:                                          ; preds = %entry
  %call97 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9969)
  %241 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %242 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %241, i32 0, i32 0
  %243 = extractvalue { i32, %"class.thrust::system::error_category"* } %call97, 0
  store i32 %243, i32* %242, align 8
  %244 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %241, i32 0, i32 1
  %245 = extractvalue { i32, %"class.thrust::system::error_category"* } %call97, 1
  store %"class.thrust::system::error_category"* %245, %"class.thrust::system::error_category"** %244, align 8
  br label %return

sw.bb98:                                          ; preds = %entry
  %call99 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9970)
  %246 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %247 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %246, i32 0, i32 0
  %248 = extractvalue { i32, %"class.thrust::system::error_category"* } %call99, 0
  store i32 %248, i32* %247, align 8
  %249 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %246, i32 0, i32 1
  %250 = extractvalue { i32, %"class.thrust::system::error_category"* } %call99, 1
  store %"class.thrust::system::error_category"* %250, %"class.thrust::system::error_category"** %249, align 8
  br label %return

sw.bb100:                                         ; preds = %entry
  %call101 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9923)
  %251 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %252 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %251, i32 0, i32 0
  %253 = extractvalue { i32, %"class.thrust::system::error_category"* } %call101, 0
  store i32 %253, i32* %252, align 8
  %254 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %251, i32 0, i32 1
  %255 = extractvalue { i32, %"class.thrust::system::error_category"* } %call101, 1
  store %"class.thrust::system::error_category"* %255, %"class.thrust::system::error_category"** %254, align 8
  br label %return

sw.bb102:                                         ; preds = %entry
  %call103 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9924)
  %256 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %257 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %256, i32 0, i32 0
  %258 = extractvalue { i32, %"class.thrust::system::error_category"* } %call103, 0
  store i32 %258, i32* %257, align 8
  %259 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %256, i32 0, i32 1
  %260 = extractvalue { i32, %"class.thrust::system::error_category"* } %call103, 1
  store %"class.thrust::system::error_category"* %260, %"class.thrust::system::error_category"** %259, align 8
  br label %return

sw.bb104:                                         ; preds = %entry
  %call105 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9925)
  %261 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %262 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %261, i32 0, i32 0
  %263 = extractvalue { i32, %"class.thrust::system::error_category"* } %call105, 0
  store i32 %263, i32* %262, align 8
  %264 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %261, i32 0, i32 1
  %265 = extractvalue { i32, %"class.thrust::system::error_category"* } %call105, 1
  store %"class.thrust::system::error_category"* %265, %"class.thrust::system::error_category"** %264, align 8
  br label %return

sw.bb106:                                         ; preds = %entry
  %call107 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9971)
  %266 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %267 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %266, i32 0, i32 0
  %268 = extractvalue { i32, %"class.thrust::system::error_category"* } %call107, 0
  store i32 %268, i32* %267, align 8
  %269 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %266, i32 0, i32 1
  %270 = extractvalue { i32, %"class.thrust::system::error_category"* } %call107, 1
  store %"class.thrust::system::error_category"* %270, %"class.thrust::system::error_category"** %269, align 8
  br label %return

sw.bb108:                                         ; preds = %entry
  %call109 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9926)
  %271 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %272 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %271, i32 0, i32 0
  %273 = extractvalue { i32, %"class.thrust::system::error_category"* } %call109, 0
  store i32 %273, i32* %272, align 8
  %274 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %271, i32 0, i32 1
  %275 = extractvalue { i32, %"class.thrust::system::error_category"* } %call109, 1
  store %"class.thrust::system::error_category"* %275, %"class.thrust::system::error_category"** %274, align 8
  br label %return

sw.bb110:                                         ; preds = %entry
  %call111 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9927)
  %276 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %277 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %276, i32 0, i32 0
  %278 = extractvalue { i32, %"class.thrust::system::error_category"* } %call111, 0
  store i32 %278, i32* %277, align 8
  %279 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %276, i32 0, i32 1
  %280 = extractvalue { i32, %"class.thrust::system::error_category"* } %call111, 1
  store %"class.thrust::system::error_category"* %280, %"class.thrust::system::error_category"** %279, align 8
  br label %return

sw.bb112:                                         ; preds = %entry
  %call113 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9928)
  %281 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %282 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %281, i32 0, i32 0
  %283 = extractvalue { i32, %"class.thrust::system::error_category"* } %call113, 0
  store i32 %283, i32* %282, align 8
  %284 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %281, i32 0, i32 1
  %285 = extractvalue { i32, %"class.thrust::system::error_category"* } %call113, 1
  store %"class.thrust::system::error_category"* %285, %"class.thrust::system::error_category"** %284, align 8
  br label %return

sw.bb114:                                         ; preds = %entry
  %call115 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9972)
  %286 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %287 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %286, i32 0, i32 0
  %288 = extractvalue { i32, %"class.thrust::system::error_category"* } %call115, 0
  store i32 %288, i32* %287, align 8
  %289 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %286, i32 0, i32 1
  %290 = extractvalue { i32, %"class.thrust::system::error_category"* } %call115, 1
  store %"class.thrust::system::error_category"* %290, %"class.thrust::system::error_category"** %289, align 8
  br label %return

sw.bb116:                                         ; preds = %entry
  %call117 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9929)
  %291 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %292 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %291, i32 0, i32 0
  %293 = extractvalue { i32, %"class.thrust::system::error_category"* } %call117, 0
  store i32 %293, i32* %292, align 8
  %294 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %291, i32 0, i32 1
  %295 = extractvalue { i32, %"class.thrust::system::error_category"* } %call117, 1
  store %"class.thrust::system::error_category"* %295, %"class.thrust::system::error_category"** %294, align 8
  br label %return

sw.bb118:                                         ; preds = %entry
  %call119 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9930)
  %296 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %297 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %296, i32 0, i32 0
  %298 = extractvalue { i32, %"class.thrust::system::error_category"* } %call119, 0
  store i32 %298, i32* %297, align 8
  %299 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %296, i32 0, i32 1
  %300 = extractvalue { i32, %"class.thrust::system::error_category"* } %call119, 1
  store %"class.thrust::system::error_category"* %300, %"class.thrust::system::error_category"** %299, align 8
  br label %return

sw.bb120:                                         ; preds = %entry
  %call121 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9931)
  %301 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %302 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %301, i32 0, i32 0
  %303 = extractvalue { i32, %"class.thrust::system::error_category"* } %call121, 0
  store i32 %303, i32* %302, align 8
  %304 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %301, i32 0, i32 1
  %305 = extractvalue { i32, %"class.thrust::system::error_category"* } %call121, 1
  store %"class.thrust::system::error_category"* %305, %"class.thrust::system::error_category"** %304, align 8
  br label %return

sw.bb122:                                         ; preds = %entry
  %call123 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9973)
  %306 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %307 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %306, i32 0, i32 0
  %308 = extractvalue { i32, %"class.thrust::system::error_category"* } %call123, 0
  store i32 %308, i32* %307, align 8
  %309 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %306, i32 0, i32 1
  %310 = extractvalue { i32, %"class.thrust::system::error_category"* } %call123, 1
  store %"class.thrust::system::error_category"* %310, %"class.thrust::system::error_category"** %309, align 8
  br label %return

sw.bb124:                                         ; preds = %entry
  %call125 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9932)
  %311 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %312 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %311, i32 0, i32 0
  %313 = extractvalue { i32, %"class.thrust::system::error_category"* } %call125, 0
  store i32 %313, i32* %312, align 8
  %314 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %311, i32 0, i32 1
  %315 = extractvalue { i32, %"class.thrust::system::error_category"* } %call125, 1
  store %"class.thrust::system::error_category"* %315, %"class.thrust::system::error_category"** %314, align 8
  br label %return

sw.bb126:                                         ; preds = %entry
  %call127 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9933)
  %316 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %317 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %316, i32 0, i32 0
  %318 = extractvalue { i32, %"class.thrust::system::error_category"* } %call127, 0
  store i32 %318, i32* %317, align 8
  %319 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %316, i32 0, i32 1
  %320 = extractvalue { i32, %"class.thrust::system::error_category"* } %call127, 1
  store %"class.thrust::system::error_category"* %320, %"class.thrust::system::error_category"** %319, align 8
  br label %return

sw.bb128:                                         ; preds = %entry
  %call129 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9974)
  %321 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %322 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %321, i32 0, i32 0
  %323 = extractvalue { i32, %"class.thrust::system::error_category"* } %call129, 0
  store i32 %323, i32* %322, align 8
  %324 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %321, i32 0, i32 1
  %325 = extractvalue { i32, %"class.thrust::system::error_category"* } %call129, 1
  store %"class.thrust::system::error_category"* %325, %"class.thrust::system::error_category"** %324, align 8
  br label %return

sw.bb130:                                         ; preds = %entry
  %call131 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9975)
  %326 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %327 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %326, i32 0, i32 0
  %328 = extractvalue { i32, %"class.thrust::system::error_category"* } %call131, 0
  store i32 %328, i32* %327, align 8
  %329 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %326, i32 0, i32 1
  %330 = extractvalue { i32, %"class.thrust::system::error_category"* } %call131, 1
  store %"class.thrust::system::error_category"* %330, %"class.thrust::system::error_category"** %329, align 8
  br label %return

sw.bb132:                                         ; preds = %entry
  %call133 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9976)
  %331 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %332 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %331, i32 0, i32 0
  %333 = extractvalue { i32, %"class.thrust::system::error_category"* } %call133, 0
  store i32 %333, i32* %332, align 8
  %334 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %331, i32 0, i32 1
  %335 = extractvalue { i32, %"class.thrust::system::error_category"* } %call133, 1
  store %"class.thrust::system::error_category"* %335, %"class.thrust::system::error_category"** %334, align 8
  br label %return

sw.bb134:                                         ; preds = %entry
  %call135 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9944)
  %336 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %337 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %336, i32 0, i32 0
  %338 = extractvalue { i32, %"class.thrust::system::error_category"* } %call135, 0
  store i32 %338, i32* %337, align 8
  %339 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %336, i32 0, i32 1
  %340 = extractvalue { i32, %"class.thrust::system::error_category"* } %call135, 1
  store %"class.thrust::system::error_category"* %340, %"class.thrust::system::error_category"** %339, align 8
  br label %return

sw.bb136:                                         ; preds = %entry
  %call137 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9934)
  %341 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %342 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %341, i32 0, i32 0
  %343 = extractvalue { i32, %"class.thrust::system::error_category"* } %call137, 0
  store i32 %343, i32* %342, align 8
  %344 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %341, i32 0, i32 1
  %345 = extractvalue { i32, %"class.thrust::system::error_category"* } %call137, 1
  store %"class.thrust::system::error_category"* %345, %"class.thrust::system::error_category"** %344, align 8
  br label %return

sw.bb138:                                         ; preds = %entry
  %call139 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9935)
  %346 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %347 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %346, i32 0, i32 0
  %348 = extractvalue { i32, %"class.thrust::system::error_category"* } %call139, 0
  store i32 %348, i32* %347, align 8
  %349 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %346, i32 0, i32 1
  %350 = extractvalue { i32, %"class.thrust::system::error_category"* } %call139, 1
  store %"class.thrust::system::error_category"* %350, %"class.thrust::system::error_category"** %349, align 8
  br label %return

sw.bb140:                                         ; preds = %entry
  %call141 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9936)
  %351 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %352 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %351, i32 0, i32 0
  %353 = extractvalue { i32, %"class.thrust::system::error_category"* } %call141, 0
  store i32 %353, i32* %352, align 8
  %354 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %351, i32 0, i32 1
  %355 = extractvalue { i32, %"class.thrust::system::error_category"* } %call141, 1
  store %"class.thrust::system::error_category"* %355, %"class.thrust::system::error_category"** %354, align 8
  br label %return

sw.bb142:                                         ; preds = %entry
  %call143 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9938)
  %356 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %357 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %356, i32 0, i32 0
  %358 = extractvalue { i32, %"class.thrust::system::error_category"* } %call143, 0
  store i32 %358, i32* %357, align 8
  %359 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %356, i32 0, i32 1
  %360 = extractvalue { i32, %"class.thrust::system::error_category"* } %call143, 1
  store %"class.thrust::system::error_category"* %360, %"class.thrust::system::error_category"** %359, align 8
  br label %return

sw.bb144:                                         ; preds = %entry
  %call145 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9977)
  %361 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %362 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %361, i32 0, i32 0
  %363 = extractvalue { i32, %"class.thrust::system::error_category"* } %call145, 0
  store i32 %363, i32* %362, align 8
  %364 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %361, i32 0, i32 1
  %365 = extractvalue { i32, %"class.thrust::system::error_category"* } %call145, 1
  store %"class.thrust::system::error_category"* %365, %"class.thrust::system::error_category"** %364, align 8
  br label %return

sw.bb146:                                         ; preds = %entry
  %call147 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9978)
  %366 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %367 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %366, i32 0, i32 0
  %368 = extractvalue { i32, %"class.thrust::system::error_category"* } %call147, 0
  store i32 %368, i32* %367, align 8
  %369 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %366, i32 0, i32 1
  %370 = extractvalue { i32, %"class.thrust::system::error_category"* } %call147, 1
  store %"class.thrust::system::error_category"* %370, %"class.thrust::system::error_category"** %369, align 8
  br label %return

sw.bb148:                                         ; preds = %entry
  %call149 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9979)
  %371 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %372 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %371, i32 0, i32 0
  %373 = extractvalue { i32, %"class.thrust::system::error_category"* } %call149, 0
  store i32 %373, i32* %372, align 8
  %374 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %371, i32 0, i32 1
  %375 = extractvalue { i32, %"class.thrust::system::error_category"* } %call149, 1
  store %"class.thrust::system::error_category"* %375, %"class.thrust::system::error_category"** %374, align 8
  br label %return

sw.bb150:                                         ; preds = %entry
  %call151 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9939)
  %376 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %377 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %376, i32 0, i32 0
  %378 = extractvalue { i32, %"class.thrust::system::error_category"* } %call151, 0
  store i32 %378, i32* %377, align 8
  %379 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %376, i32 0, i32 1
  %380 = extractvalue { i32, %"class.thrust::system::error_category"* } %call151, 1
  store %"class.thrust::system::error_category"* %380, %"class.thrust::system::error_category"** %379, align 8
  br label %return

sw.bb152:                                         ; preds = %entry
  %call153 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9940)
  %381 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %382 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %381, i32 0, i32 0
  %383 = extractvalue { i32, %"class.thrust::system::error_category"* } %call153, 0
  store i32 %383, i32* %382, align 8
  %384 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %381, i32 0, i32 1
  %385 = extractvalue { i32, %"class.thrust::system::error_category"* } %call153, 1
  store %"class.thrust::system::error_category"* %385, %"class.thrust::system::error_category"** %384, align 8
  br label %return

sw.bb154:                                         ; preds = %entry
  %call155 = call { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 9941)
  %386 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %387 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %386, i32 0, i32 0
  %388 = extractvalue { i32, %"class.thrust::system::error_category"* } %call155, 0
  store i32 %388, i32* %387, align 8
  %389 = getelementptr inbounds { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %386, i32 0, i32 1
  %390 = extractvalue { i32, %"class.thrust::system::error_category"* } %call155, 1
  store %"class.thrust::system::error_category"* %390, %"class.thrust::system::error_category"** %389, align 8
  br label %return

sw.default:                                       ; preds = %entry
  %391 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %call156 = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system15system_categoryEv()
  call void @_ZN6thrust6system15error_conditionC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_condition"* %retval, i32 %391, %"class.thrust::system::error_category"* dereferenceable(8) %call156)
  br label %return

return:                                           ; preds = %sw.default, %sw.bb154, %sw.bb152, %sw.bb150, %sw.bb148, %sw.bb146, %sw.bb144, %sw.bb142, %sw.bb140, %sw.bb138, %sw.bb136, %sw.bb134, %sw.bb132, %sw.bb130, %sw.bb128, %sw.bb126, %sw.bb124, %sw.bb122, %sw.bb120, %sw.bb118, %sw.bb116, %sw.bb114, %sw.bb112, %sw.bb110, %sw.bb108, %sw.bb106, %sw.bb104, %sw.bb102, %sw.bb100, %sw.bb98, %sw.bb96, %sw.bb94, %sw.bb92, %sw.bb90, %sw.bb88, %sw.bb86, %sw.bb84, %sw.bb82, %sw.bb80, %sw.bb78, %sw.bb76, %sw.bb74, %sw.bb72, %sw.bb70, %sw.bb68, %sw.bb66, %sw.bb64, %sw.bb62, %sw.bb60, %sw.bb58, %sw.bb56, %sw.bb54, %sw.bb52, %sw.bb50, %sw.bb48, %sw.bb46, %sw.bb44, %sw.bb42, %sw.bb40, %sw.bb38, %sw.bb36, %sw.bb34, %sw.bb32, %sw.bb30, %sw.bb28, %sw.bb26, %sw.bb24, %sw.bb22, %sw.bb20, %sw.bb18, %sw.bb16, %sw.bb14, %sw.bb12, %sw.bb10, %sw.bb8, %sw.bb6, %sw.bb4, %sw.bb2, %sw.bb
  %392 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %393 = load { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %392, align 8
  ret { i32, %"class.thrust::system::error_category"* } %393
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6system6detail21system_error_category7messageEi(%"class.std::basic_string"* noalias sret %agg.result, %"class.thrust::system::detail::system_error_category"* %this, i32 %ev) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::system_error_category"*, align 8
  %ev.addr = alloca i32, align 4
  store %"class.thrust::system::detail::system_error_category"* %this, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::detail::system_error_category"*, %"class.thrust::system::detail::system_error_category"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system16generic_categoryEv()
  %0 = bitcast %"class.thrust::system::error_category"* %call to void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)***
  %vtable = load void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)**, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*** %0, align 8, !tbaa !5
  %vfn = getelementptr inbounds void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)** %vtable, i64 6
  %1 = load void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)** %vfn, align 8
  %2 = load i32, i32* %ev.addr, align 4, !tbaa !11
  call void %1(%"class.std::basic_string"* sret %agg.result, %"class.thrust::system::error_category"* %call, i32 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32, %"class.thrust::system::error_category"* } @_ZN6thrust6system20make_error_conditionENS0_4errc6errc_tE(i32 %e) #8 comdat {
entry:
  %retval = alloca %"class.thrust::system::error_condition", align 8
  %e.addr = alloca i32, align 4
  store i32 %e, i32* %e.addr, align 4, !tbaa !83
  %0 = load i32, i32* %e.addr, align 4, !tbaa !83
  %call = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system16generic_categoryEv()
  call void @_ZN6thrust6system15error_conditionC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_condition"* %retval, i32 %0, %"class.thrust::system::error_category"* dereferenceable(8) %call)
  %1 = bitcast %"class.thrust::system::error_condition"* %retval to { i32, %"class.thrust::system::error_category"* }*
  %2 = load { i32, %"class.thrust::system::error_category"* }, { i32, %"class.thrust::system::error_category"* }* %1, align 8
  ret { i32, %"class.thrust::system::error_category"* } %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system16generic_categoryEv() #8 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %0 = load atomic i8, i8* bitcast (i64* @_ZGVZN6thrust6system16generic_categoryEvE6result to i8*) acquire, align 8
  %guard.uninitialized = icmp eq i8 %0, 0
  br i1 %guard.uninitialized, label %init.check, label %init.end

init.check:                                       ; preds = %entry
  %1 = call i32 @__cxa_guard_acquire(i64* @_ZGVZN6thrust6system16generic_categoryEvE6result) #5
  %tobool = icmp ne i32 %1, 0
  br i1 %tobool, label %init, label %init.end

init:                                             ; preds = %init.check
  invoke void @_ZN6thrust6system6detail22generic_error_categoryC2Ev(%"class.thrust::system::detail::generic_error_category"* @_ZZN6thrust6system16generic_categoryEvE6result)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %init
  %2 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to void (i8*)*), i8* bitcast (%"class.thrust::system::detail::generic_error_category"* @_ZZN6thrust6system16generic_categoryEvE6result to i8*), i8* @__dso_handle) #5
  call void @__cxa_guard_release(i64* @_ZGVZN6thrust6system16generic_categoryEvE6result) #5
  br label %init.end

init.end:                                         ; preds = %invoke.cont, %init.check, %entry
  ret %"class.thrust::system::error_category"* getelementptr inbounds (%"class.thrust::system::detail::generic_error_category", %"class.thrust::system::detail::generic_error_category"* @_ZZN6thrust6system16generic_categoryEvE6result, i32 0, i32 0)

lpad:                                             ; preds = %init
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void @__cxa_guard_abort(i64* @_ZGVZN6thrust6system16generic_categoryEvE6result) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val1 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail22generic_error_categoryC2Ev(%"class.thrust::system::detail::generic_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::generic_error_category"*, align 8
  store %"class.thrust::system::detail::generic_error_category"* %this, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::generic_error_category"*, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::detail::generic_error_category"* %this1 to %"class.thrust::system::error_category"*
  call void @_ZN6thrust6system14error_categoryC2Ev(%"class.thrust::system::error_category"* %0) #5
  %1 = bitcast %"class.thrust::system::detail::generic_error_category"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([9 x i8*], [9 x i8*]* @_ZTVN6thrust6system6detail22generic_error_categoryE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail22generic_error_categoryD0Ev(%"class.thrust::system::detail::generic_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::generic_error_category"*, align 8
  store %"class.thrust::system::detail::generic_error_category"* %this, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::generic_error_category"*, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8
  call void bitcast (void (%"class.thrust::system::error_category"*)* @_ZN6thrust6system14error_categoryD2Ev to void (%"class.thrust::system::detail::generic_error_category"*)*)(%"class.thrust::system::detail::generic_error_category"* %this1) #5
  %0 = bitcast %"class.thrust::system::detail::generic_error_category"* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZNK6thrust6system6detail22generic_error_category4nameEv(%"class.thrust::system::detail::generic_error_category"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::generic_error_category"*, align 8
  store %"class.thrust::system::detail::generic_error_category"* %this, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::generic_error_category"*, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8
  ret i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.27, i32 0, i32 0)
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6system6detail22generic_error_category7messageEi(%"class.std::basic_string"* noalias sret %agg.result, %"class.thrust::system::detail::generic_error_category"* %this, i32 %ev) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::system::detail::generic_error_category"*, align 8
  %ev.addr = alloca i32, align 4
  %ref.tmp = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %c_str = alloca i8*, align 8
  %ref.tmp3 = alloca %"class.std::allocator", align 1
  %cleanup.cond = alloca i1, align 1
  store %"class.thrust::system::detail::generic_error_category"* %this, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::detail::generic_error_category"*, %"class.thrust::system::detail::generic_error_category"** %this.addr, align 8
  %0 = load atomic i8, i8* bitcast (i64* @_ZGVZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err to i8*) acquire, align 8
  %guard.uninitialized = icmp eq i8 %0, 0
  br i1 %guard.uninitialized, label %init.check, label %init.end

init.check:                                       ; preds = %entry
  %1 = call i32 @__cxa_guard_acquire(i64* @_ZGVZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err) #5
  %tobool = icmp ne i32 %1, 0
  br i1 %tobool, label %init, label %init.end

init:                                             ; preds = %init.check
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* @_ZZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.28, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %init
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  %2 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%"class.std::basic_string"*)* @_ZNSsD2Ev to void (i8*)*), i8* bitcast (%"class.std::basic_string"* @_ZZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err to i8*), i8* @__dso_handle) #5
  call void @__cxa_guard_release(i64* @_ZGVZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err) #5
  br label %init.end

init.end:                                         ; preds = %invoke.cont, %init.check, %entry
  %3 = bitcast i8** %c_str to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %call = call i8* @strerror(i32 %4) #5
  store i8* %call, i8** %c_str, align 8, !tbaa !1
  %5 = load i8*, i8** %c_str, align 8, !tbaa !1
  %tobool2 = icmp ne i8* %5, null
  store i1 false, i1* %cleanup.cond, align 1
  br i1 %tobool2, label %cond.true, label %cond.false

cond.true:                                        ; preds = %init.end
  %6 = load i8*, i8** %c_str, align 8, !tbaa !1
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp3) #5
  store i1 true, i1* %cleanup.cond, align 1
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %agg.result, i8* %6, %"class.std::allocator"* dereferenceable(1) %ref.tmp3)
          to label %invoke.cont5 unwind label %lpad4

invoke.cont5:                                     ; preds = %cond.true
  br label %cond.end

cond.false:                                       ; preds = %init.end
  invoke void @_ZNSsC1ERKSs(%"class.std::basic_string"* %agg.result, %"class.std::basic_string"* dereferenceable(8) @_ZZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err)
          to label %invoke.cont6 unwind label %lpad4

invoke.cont6:                                     ; preds = %cond.false
  br label %cond.end

cond.end:                                         ; preds = %invoke.cont6, %invoke.cont5
  %cleanup.is_active = load i1, i1* %cleanup.cond, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %cond.end
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp3) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %cond.end
  %7 = bitcast i8** %c_str to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  ret void

lpad:                                             ; preds = %init
  %8 = landingpad { i8*, i32 }
          cleanup
  %9 = extractvalue { i8*, i32 } %8, 0
  store i8* %9, i8** %exn.slot, align 8
  %10 = extractvalue { i8*, i32 } %8, 1
  store i32 %10, i32* %ehselector.slot, align 4
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  call void @__cxa_guard_abort(i64* @_ZGVZNK6thrust6system6detail22generic_error_category7messageEiE11unknown_err) #5
  br label %eh.resume

lpad4:                                            ; preds = %cond.false, %cond.true
  %11 = landingpad { i8*, i32 }
          cleanup
  %12 = extractvalue { i8*, i32 } %11, 0
  store i8* %12, i8** %exn.slot, align 8
  %13 = extractvalue { i8*, i32 } %11, 1
  store i32 %13, i32* %ehselector.slot, align 4
  %cleanup.is_active7 = load i1, i1* %cleanup.cond, align 1
  br i1 %cleanup.is_active7, label %cleanup.action8, label %cleanup.done9

cleanup.action8:                                  ; preds = %lpad4
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp3) #5
  br label %cleanup.done9

cleanup.done9:                                    ; preds = %cleanup.action8, %lpad4
  %14 = bitcast i8** %c_str to i8*
  call void @llvm.lifetime.end(i64 8, i8* %14) #5
  br label %eh.resume

eh.resume:                                        ; preds = %cleanup.done9, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val10 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val10
}

; Function Attrs: nounwind
declare i8* @strerror(i32) #4

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6systemeqERKNS0_15error_conditionES3_(%"class.thrust::system::error_condition"* dereferenceable(16) %lhs, %"class.thrust::system::error_condition"* dereferenceable(16) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::system::error_condition"*, align 8
  %rhs.addr = alloca %"class.thrust::system::error_condition"*, align 8
  store %"class.thrust::system::error_condition"* %lhs, %"class.thrust::system::error_condition"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::system::error_condition"* %rhs, %"class.thrust::system::error_condition"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %lhs.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZNK6thrust6system15error_condition8categoryEv(%"class.thrust::system::error_condition"* %0)
  %1 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %rhs.addr, align 8
  %call1 = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZNK6thrust6system15error_condition8categoryEv(%"class.thrust::system::error_condition"* %1)
  %call2 = call zeroext i1 @_ZNK6thrust6system14error_categoryeqERKS1_(%"class.thrust::system::error_category"* %call, %"class.thrust::system::error_category"* dereferenceable(8) %call1)
  br i1 %call2, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %2 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %lhs.addr, align 8
  %call3 = call i32 @_ZNK6thrust6system15error_condition5valueEv(%"class.thrust::system::error_condition"* %2)
  %3 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %rhs.addr, align 8
  %call4 = call i32 @_ZNK6thrust6system15error_condition5valueEv(%"class.thrust::system::error_condition"* %3)
  %cmp = icmp eq i32 %call3, %call4
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %4 = phi i1 [ false, %entry ], [ %cmp, %land.rhs ]
  ret i1 %4
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::system::error_category"* @_ZNK6thrust6system15error_condition8categoryEv(%"class.thrust::system::error_condition"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_condition"*, align 8
  store %"class.thrust::system::error_condition"* %this, %"class.thrust::system::error_condition"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %this.addr, align 8
  %m_cat = getelementptr inbounds %"class.thrust::system::error_condition", %"class.thrust::system::error_condition"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %m_cat, align 8, !tbaa !80
  ret %"class.thrust::system::error_category"* %0
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system14error_categoryeqERKS1_(%"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"* dereferenceable(8) %rhs) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_category"*, align 8
  %rhs.addr = alloca %"class.thrust::system::error_category"*, align 8
  store %"class.thrust::system::error_category"* %this, %"class.thrust::system::error_category"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::error_category"* %rhs, %"class.thrust::system::error_category"** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %this.addr, align 8
  %0 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %rhs.addr, align 8
  %cmp = icmp eq %"class.thrust::system::error_category"* %this1, %0
  ret i1 %cmp
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system15error_condition5valueEv(%"class.thrust::system::error_condition"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_condition"*, align 8
  store %"class.thrust::system::error_condition"* %this, %"class.thrust::system::error_condition"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_condition"*, %"class.thrust::system::error_condition"** %this.addr, align 8
  %m_val = getelementptr inbounds %"class.thrust::system::error_condition", %"class.thrust::system::error_condition"* %this1, i32 0, i32 0
  %0 = load i32, i32* %m_val, align 8, !tbaa !78
  ret i32 %0
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::system::error_category"* @_ZNK6thrust6system10error_code8categoryEv(%"class.thrust::system::error_code"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_code"*, align 8
  store %"class.thrust::system::error_code"* %this, %"class.thrust::system::error_code"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_code"*, %"class.thrust::system::error_code"** %this.addr, align 8
  %m_cat = getelementptr inbounds %"class.thrust::system::error_code", %"class.thrust::system::error_code"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %m_cat, align 8, !tbaa !85
  ret %"class.thrust::system::error_category"* %0
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system10error_code5valueEv(%"class.thrust::system::error_code"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_code"*, align 8
  store %"class.thrust::system::error_code"* %this, %"class.thrust::system::error_code"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_code"*, %"class.thrust::system::error_code"** %this.addr, align 8
  %m_val = getelementptr inbounds %"class.thrust::system::error_code", %"class.thrust::system::error_code"* %this1, i32 0, i32 0
  %0 = load i32, i32* %m_val, align 8, !tbaa !87
  ret i32 %0
}

declare i8* @cudaGetErrorString(i32) #3

declare void @_ZNSt13runtime_errorC2ERKSs(%"class.std::runtime_error"*, %"class.std::basic_string"* dereferenceable(8)) unnamed_addr #3

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system10error_codeC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_code"* %this, i32 %val, %"class.thrust::system::error_category"* dereferenceable(8) %cat) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_code"*, align 8
  %val.addr = alloca i32, align 4
  %cat.addr = alloca %"class.thrust::system::error_category"*, align 8
  store %"class.thrust::system::error_code"* %this, %"class.thrust::system::error_code"** %this.addr, align 8, !tbaa !1
  store i32 %val, i32* %val.addr, align 4, !tbaa !11
  store %"class.thrust::system::error_category"* %cat, %"class.thrust::system::error_category"** %cat.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::error_code"*, %"class.thrust::system::error_code"** %this.addr, align 8
  %m_val = getelementptr inbounds %"class.thrust::system::error_code", %"class.thrust::system::error_code"* %this1, i32 0, i32 0
  %0 = load i32, i32* %val.addr, align 4, !tbaa !11
  store i32 %0, i32* %m_val, align 8, !tbaa !87
  %m_cat = getelementptr inbounds %"class.thrust::system::error_code", %"class.thrust::system::error_code"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %cat.addr, align 8
  store %"class.thrust::system::error_category"* %1, %"class.thrust::system::error_category"** %m_cat, align 8, !tbaa !85
  ret void
}

; Function Attrs: uwtable
define available_externally void @_ZNSsC2Ev(%"class.std::basic_string"* %this) unnamed_addr #0 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %ref.tmp = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %_M_dataplus = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  %call = call dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs12_S_empty_repEv()
  %call2 = call i8* @_ZNSs4_Rep10_M_refdataEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %call) #5
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp) #5
  invoke void @_ZNSs12_Alloc_hiderC2EPcRKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus, i8* %call2, %"class.std::allocator"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val3 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val3
}

; Function Attrs: nounwind
declare void @_ZNSt13runtime_errorD2Ev(%"class.std::runtime_error"*) unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system12system_errorD0Ev(%"class.thrust::system::system_error"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::system_error"*, align 8
  store %"class.thrust::system::system_error"* %this, %"class.thrust::system::system_error"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::system_error"*, %"class.thrust::system::system_error"** %this.addr, align 8
  call void @_ZN6thrust6system12system_errorD2Ev(%"class.thrust::system::system_error"* %this1) #5
  %0 = bitcast %"class.thrust::system::system_error"* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZNK6thrust6system12system_error4whatEv(%"class.thrust::system::system_error"* %this) unnamed_addr #9 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca i8*, align 8
  %this.addr = alloca %"class.thrust::system::system_error"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.thrust::system::system_error"* %this, %"class.thrust::system::system_error"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::system_error"*, %"class.thrust::system::system_error"** %this.addr, align 8
  %m_what = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  %call = call zeroext i1 @_ZNKSs5emptyEv(%"class.std::basic_string"* %m_what) #5
  br i1 %call, label %if.then, label %if.end24

if.then:                                          ; preds = %entry
  %m_what2 = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  %0 = bitcast %"class.thrust::system::system_error"* %this1 to %"class.std::runtime_error"*
  %call3 = call i8* @_ZNKSt13runtime_error4whatEv(%"class.std::runtime_error"* %0) #5
  %call4 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSEPKc(%"class.std::basic_string"* %m_what2, i8* %call3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %m_error_code = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 1
  %call6 = invoke zeroext i1 @_ZNK6thrust6system10error_codecvbEv(%"class.thrust::system::error_code"* %m_error_code)
          to label %invoke.cont5 unwind label %lpad

invoke.cont5:                                     ; preds = %invoke.cont
  br i1 %call6, label %if.then7, label %if.end20

if.then7:                                         ; preds = %invoke.cont5
  %m_what8 = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  %call9 = call zeroext i1 @_ZNKSs5emptyEv(%"class.std::basic_string"* %m_what8) #5
  br i1 %call9, label %if.end, label %if.then10

if.then10:                                        ; preds = %if.then7
  %m_what11 = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  %call13 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLEPKc(%"class.std::basic_string"* %m_what11, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.29, i32 0, i32 0))
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %if.then10
  br label %if.end

lpad:                                             ; preds = %if.end, %if.then10, %invoke.cont, %if.then
  %1 = landingpad { i8*, i32 }
          catch i8* null
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  br label %catch

if.end:                                           ; preds = %invoke.cont12, %if.then7
  %m_what14 = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  %m_error_code15 = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 1
  invoke void @_ZNK6thrust6system10error_code7messageEv(%"class.std::basic_string"* sret %ref.tmp, %"class.thrust::system::error_code"* %m_error_code15)
          to label %invoke.cont16 unwind label %lpad

invoke.cont16:                                    ; preds = %if.end
  %call19 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %m_what14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont18 unwind label %lpad17

invoke.cont18:                                    ; preds = %invoke.cont16
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %if.end20

lpad17:                                           ; preds = %invoke.cont16
  %4 = landingpad { i8*, i32 }
          catch i8* null
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %catch

catch:                                            ; preds = %lpad17, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %7 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %8 = bitcast %"class.thrust::system::system_error"* %this1 to %"class.std::runtime_error"*
  %call21 = call i8* @_ZNKSt13runtime_error4whatEv(%"class.std::runtime_error"* %8) #5
  store i8* %call21, i8** %retval, align 8
  invoke void @__cxa_end_catch()
          to label %invoke.cont23 unwind label %lpad22

if.end20:                                         ; preds = %invoke.cont18, %invoke.cont5
  br label %try.cont

invoke.cont23:                                    ; preds = %catch
  br label %return

lpad22:                                           ; preds = %catch
  %9 = landingpad { i8*, i32 }
          filter [0 x i8*] zeroinitializer
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad22
  %exn27 = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn27) #15
  unreachable

try.cont:                                         ; preds = %if.end20
  br label %if.end24

if.end24:                                         ; preds = %try.cont, %entry
  %m_what25 = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  %call26 = call i8* @_ZNKSs5c_strEv(%"class.std::basic_string"* %m_what25) #5
  store i8* %call26, i8** %retval, align 8
  br label %return

return:                                           ; preds = %if.end24, %invoke.cont23
  %12 = load i8*, i8** %retval, align 8
  ret i8* %12
}

; Function Attrs: nounwind uwtable
define available_externally dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs12_S_empty_repEv() #1 align 2 {
entry:
  %call = call dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs4_Rep12_S_empty_repEv()
  ret %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %call
}

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNSs4_Rep10_M_refdataEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, align 8
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8
  %add.ptr = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1, i64 1
  %0 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %add.ptr to i8*
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSs12_Alloc_hiderC2EPcRKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this, i8* %__dat, %"class.std::allocator"* dereferenceable(1) %__a) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*, align 8
  %__dat.addr = alloca i8*, align 8
  %__a.addr = alloca %"class.std::allocator"*, align 8
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"** %this.addr, align 8, !tbaa !1
  store i8* %__dat, i8** %__dat.addr, align 8, !tbaa !1
  store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"** %this.addr, align 8
  %0 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this1 to %"class.std::allocator"*
  %1 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  call void @_ZNSaIcEC2ERKS_(%"class.std::allocator"* %0, %"class.std::allocator"* dereferenceable(1) %1) #5
  %_M_p = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this1, i32 0, i32 0
  %2 = load i8*, i8** %__dat.addr, align 8, !tbaa !1
  store i8* %2, i8** %_M_p, align 8, !tbaa !88
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally zeroext i1 @_ZNKSs5emptyEv(%"class.std::basic_string"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %call = call i64 @_ZNKSs4sizeEv(%"class.std::basic_string"* %this1) #5
  %cmp = icmp eq i64 %call, 0
  ret i1 %cmp
}

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSEPKc(%"class.std::basic_string"* %this, i8* %__s) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__s.addr = alloca i8*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs6assignEPKc(%"class.std::basic_string"* %this1, i8* %0)
  ret %"class.std::basic_string"* %call
}

; Function Attrs: nounwind
declare i8* @_ZNKSt13runtime_error4whatEv(%"class.std::runtime_error"*) unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system10error_codecvbEv(%"class.thrust::system::error_code"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_code"*, align 8
  store %"class.thrust::system::error_code"* %this, %"class.thrust::system::error_code"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_code"*, %"class.thrust::system::error_code"** %this.addr, align 8
  %call = call i32 @_ZNK6thrust6system10error_code5valueEv(%"class.thrust::system::error_code"* %this1)
  %cmp = icmp ne i32 %call, 0
  ret i1 %cmp
}

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSspLEPKc(%"class.std::basic_string"* %this, i8* %__s) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__s.addr = alloca i8*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs6appendEPKc(%"class.std::basic_string"* %this1, i8* %0)
  ret %"class.std::basic_string"* %call
}

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %this, %"class.std::basic_string"* dereferenceable(8) %__str) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__str.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store %"class.std::basic_string"* %__str, %"class.std::basic_string"** %__str.addr, align 8, !tbaa !7
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %call = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs6appendERKSs(%"class.std::basic_string"* %this1, %"class.std::basic_string"* dereferenceable(8) %0)
  ret %"class.std::basic_string"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6system10error_code7messageEv(%"class.std::basic_string"* noalias sret %agg.result, %"class.thrust::system::error_code"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::error_code"*, align 8
  store %"class.thrust::system::error_code"* %this, %"class.thrust::system::error_code"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::error_code"*, %"class.thrust::system::error_code"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::system::error_category"* @_ZNK6thrust6system10error_code8categoryEv(%"class.thrust::system::error_code"* %this1)
  %0 = bitcast %"class.thrust::system::error_category"* %call to void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)***
  %vtable = load void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)**, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*** %0, align 8, !tbaa !5
  %vfn = getelementptr inbounds void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)** %vtable, i64 6
  %1 = load void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)** %vfn, align 8
  %call2 = call i32 @_ZNK6thrust6system10error_code5valueEv(%"class.thrust::system::error_code"* %this1)
  call void %1(%"class.std::basic_string"* sret %agg.result, %"class.thrust::system::error_category"* %call, i32 %call2)
  ret void
}

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSs6assignEPKc(%"class.std::basic_string"* %this, i8* %__s) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__s.addr = alloca i8*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call i64 @_ZNSt11char_traitsIcE6lengthEPKc(i8* %1)
  %call2 = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs6assignEPKcm(%"class.std::basic_string"* %this1, i8* %0, i64 %call)
  ret %"class.std::basic_string"* %call2
}

declare dereferenceable(8) %"class.std::basic_string"* @_ZNSs6assignEPKcm(%"class.std::basic_string"*, i8*, i64) #3

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSs6appendEPKc(%"class.std::basic_string"* %this, i8* %__s) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__s.addr = alloca i8*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call i64 @_ZNSt11char_traitsIcE6lengthEPKc(i8* %1)
  %call2 = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs6appendEPKcm(%"class.std::basic_string"* %this1, i8* %0, i64 %call)
  ret %"class.std::basic_string"* %call2
}

declare dereferenceable(8) %"class.std::basic_string"* @_ZNSs6appendEPKcm(%"class.std::basic_string"*, i8*, i64) #3

declare dereferenceable(8) %"class.std::basic_string"* @_ZNSs6appendERKSs(%"class.std::basic_string"*, %"class.std::basic_string"* dereferenceable(8)) #3

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIvEEE3getES3_(i8* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive1, i32 0, i32 0
  store i8* %ptr.coerce, i8** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.115"* %ptr to %"class.thrust::pointer.116"*
  %call = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEE3getEv(%"class.thrust::pointer.116"* %0)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEE3getEv(%"class.thrust::pointer.116"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.116"*, align 8
  store %"class.thrust::pointer.116"* %this, %"class.thrust::pointer.116"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.116"*, %"class.thrust::pointer.116"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.116"* %this1 to %"class.thrust::iterator_adaptor.117"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlE4baseEv(%"class.thrust::iterator_adaptor.117"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  ret i8* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlE4baseEv(%"class.thrust::iterator_adaptor.117"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.117"*, align 8
  store %"class.thrust::iterator_adaptor.117"* %this, %"class.thrust::iterator_adaptor.117"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.117"*, %"class.thrust::iterator_adaptor.117"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IaEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE(%"class.thrust::pointer.116"* %this, %"class.thrust::device_ptr"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.116"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  store %"class.thrust::pointer.116"* %this, %"class.thrust::pointer.116"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr"* %other, %"class.thrust::device_ptr"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.116"*, %"class.thrust::pointer.116"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.116"* %this1 to %"class.thrust::iterator_adaptor.117"*
  %2 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive2, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive3, align 8
  %call = call i8* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIaEEE3getES3_(i8* %5)
  store i8* %call, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_(%"class.thrust::iterator_adaptor.117"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIaEEE3getES3_(i8* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %ptr.coerce, i8** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr"* %ptr to %"class.thrust::pointer"*
  %call = call i8* @_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEE3getEv(%"class.thrust::pointer"* %0)
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_(%"class.thrust::iterator_adaptor.117"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.117"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.117"* %this, %"class.thrust::iterator_adaptor.117"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.117"*, %"class.thrust::iterator_adaptor.117"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.117"* %this1 to %"class.thrust::iterator_facade.118"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !89
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEE3getEv(%"class.thrust::pointer"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer"*, align 8
  store %"class.thrust::pointer"* %this, %"class.thrust::pointer"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer"*, %"class.thrust::pointer"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer"* %this1 to %"class.thrust::iterator_adaptor.59"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE4baseEv(%"class.thrust::iterator_adaptor.59"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  ret i8* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE4baseEv(%"class.thrust::iterator_adaptor.59"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.59"*, align 8
  store %"class.thrust::iterator_adaptor.59"* %this, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.59"*, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.55"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.55"*, align 8
  store %"class.thrust::detail::contiguous_storage.55"* %this, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.55"*, %"class.thrust::detail::contiguous_storage.55"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.55", %"class.thrust::detail::contiguous_storage.55"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8max_sizeERKS3_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8max_sizeERKS3_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIaEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIaEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8allocateERS3_m(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %2
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIaEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.122", align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust10device_ptrIKaEC2IaEEPT_(%"class.thrust::device_ptr.122"* %agg.tmp, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.122", %"class.thrust::device_ptr.122"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.123", %"class.thrust::pointer.123"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.124", %"class.thrust::iterator_adaptor.124"* %coerce.dive1, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive2, align 8
  %call = call i8* @_ZN6thrust23device_malloc_allocatorIaE8allocateEmNS_10device_ptrIKaEE(%"class.thrust::device_malloc_allocator"* %0, i64 %1, i8* %2)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  store i8* %call, i8** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive7, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive8, align 8
  ret i8* %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust23device_malloc_allocatorIaE8allocateEmNS_10device_ptrIKaEE(%"class.thrust::device_malloc_allocator"* %this, i64 %cnt, i8* %.coerce) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %0 = alloca %"class.thrust::device_ptr.122", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %cnt.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.122", %"class.thrust::device_ptr.122"* %0, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.123", %"class.thrust::pointer.123"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.124", %"class.thrust::iterator_adaptor.124"* %coerce.dive1, i32 0, i32 0
  store i8* %.coerce, i8** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator"* %this, %"class.thrust::device_malloc_allocator"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %this.addr, align 8
  %1 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK6thrust23device_malloc_allocatorIaE8max_sizeEv(%"class.thrust::device_malloc_allocator"* %this3)
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %2 = bitcast i8* %exception to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %2) #5
  call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt9bad_alloc to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD1Ev to i8*)) #15
  unreachable

if.end:                                           ; preds = %entry
  %3 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call4 = call i8* @_ZN6thrust13device_mallocIaEENS_10device_ptrIT_EEm(i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive6, i32 0, i32 0
  store i8* %call4, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive9, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive10, align 8
  ret i8* %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKaEC2IaEEPT_(%"class.thrust::device_ptr.122"* %this, i8* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.122"*, align 8
  %ptr.addr = alloca i8*, align 8
  store %"class.thrust::device_ptr.122"* %this, %"class.thrust::device_ptr.122"** %this.addr, align 8, !tbaa !1
  store i8* %ptr, i8** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.122"*, %"class.thrust::device_ptr.122"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.122"* %this1 to %"class.thrust::pointer.123"*
  %1 = load i8*, i8** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIKaNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IaEEPT_(%"class.thrust::pointer.123"* %0, i8* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust23device_malloc_allocatorIaE8max_sizeEv(%"class.thrust::device_malloc_allocator"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  store %"class.thrust::device_malloc_allocator"* %this, %"class.thrust::device_malloc_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %this.addr, align 8
  %call = call i64 @_ZNSt14numeric_limitsImE3maxEv() #5
  %div = udiv i64 %call, 1
  ret i64 %div
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::bad_alloc"*, align 8
  store %"class.std::bad_alloc"* %this, %"class.std::bad_alloc"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::bad_alloc"*, %"class.std::bad_alloc"** %this.addr, align 8
  %0 = bitcast %"class.std::bad_alloc"* %this1 to %"class.std::exception"*
  call void @_ZNSt9exceptionC2Ev(%"class.std::exception"* %0) #5
  %1 = bitcast %"class.std::bad_alloc"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTVSt9bad_alloc, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  ret void
}

; Function Attrs: nounwind
declare void @_ZNSt9bad_allocD1Ev(%"class.std::bad_alloc"*) unnamed_addr #4

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust13device_mallocIaEENS_10device_ptrIT_EEm(i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %n.addr = alloca i64, align 8
  %s = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %coerce = alloca %"class.thrust::pointer.126", align 8
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZN6thrust6mallocIaNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.126", %"class.thrust::pointer.126"* %coerce, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.126"* %coerce)
  call void @_ZN6thrust10device_ptrIaEC2IaEEPT_(%"class.thrust::device_ptr"* %retval, i8* %call2)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.end(i64 1, i8* %3) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %4
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNSt14numeric_limitsImE3maxEv() #1 comdat align 2 {
entry:
  ret i64 -1
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSt9exceptionC2Ev(%"class.std::exception"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::exception"*, align 8
  store %"class.std::exception"* %this, %"class.std::exception"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::exception"*, %"class.std::exception"** %this.addr, align 8
  %0 = bitcast %"class.std::exception"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTVSt9exception, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  ret void
}

; Function Attrs: nounwind
declare void @_ZNSt9bad_allocD0Ev(%"class.std::bad_alloc"*) unnamed_addr #4

; Function Attrs: nounwind
declare i8* @_ZNKSt9bad_alloc4whatEv(%"class.std::bad_alloc"*) unnamed_addr #4

; Function Attrs: nounwind
declare void @_ZNSt9exceptionD1Ev(%"class.std::exception"*) unnamed_addr #4

; Function Attrs: nounwind
declare void @_ZNSt9exceptionD0Ev(%"class.std::exception"*) unnamed_addr #4

; Function Attrs: nounwind
declare i8* @_ZNKSt9exception4whatEv(%"class.std::exception"*) unnamed_addr #4

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6mallocIaNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.126", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.126", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call i8* @_ZN6thrust6system6detail7generic6mallocIaNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.126", %"class.thrust::pointer.126"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %coerce.dive, i32 0, i32 0
  store i8* %call2, i8** %coerce.dive3, align 8
  %call4 = call i8* @_ZN6thrust16raw_pointer_castINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.126"* dereferenceable(8) %ref.tmp)
  store i8* %call4, i8** %raw_ptr, align 8, !tbaa !1
  %4 = load i8*, i8** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IaEEPT_(%"class.thrust::pointer.126"* %retval, i8* %4)
  %5 = bitcast i8** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.126", %"class.thrust::pointer.126"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %coerce.dive5, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive6, align 8
  ret i8* %6
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.126"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.126"*, align 8
  store %"class.thrust::pointer.126"* %this, %"class.thrust::pointer.126"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.126"*, %"class.thrust::pointer.126"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.126"* %this1 to %"class.thrust::iterator_adaptor.127"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPaaS5_NS_27random_access_traversal_tagENS_9referenceIaS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.127"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  ret i8* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust16raw_pointer_castINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.126"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.126"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.126", align 8
  store %"class.thrust::pointer.126"* %ptr, %"class.thrust::pointer.126"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.126"*, %"class.thrust::pointer.126"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.126"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.126"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.126", %"class.thrust::pointer.126"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %coerce.dive, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive1, align 8
  %call = call i8* @_ZN6thrust6detail14pointer_traitsINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i8* %3)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic6mallocIaNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.126", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 1, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  call void @_ZN6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IaEEPT_(%"class.thrust::pointer.126"* %retval, i8* %call2)
  %4 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.126", %"class.thrust::pointer.126"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %coerce.dive3, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %5
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IaEEPT_(%"class.thrust::pointer.126"* %this, i8* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.126"*, align 8
  %other.addr = alloca i8*, align 8
  store %"class.thrust::pointer.126"* %this, %"class.thrust::pointer.126"** %this.addr, align 8, !tbaa !1
  store i8* %other, i8** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.126"*, %"class.thrust::pointer.126"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.126"* %this1 to %"class.thrust::iterator_adaptor.127"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPaaS5_NS_27random_access_traversal_tagENS_9referenceIaS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.127"* %0, i8** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust6detail14pointer_traitsINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i8* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.126", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.126", %"class.thrust::pointer.126"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %coerce.dive, i32 0, i32 0
  store i8* %ptr.coerce, i8** %coerce.dive1, align 8
  %call = call i8* @_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.126"* %ptr)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.129", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call i8* @_ZN6thrust6system4cuda6detail6mallocINS2_3tagEEEPvRNS2_16execution_policyIT_EEm(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, i64 %3)
  store i8* %call2, i8** %ref.tmp, align 8, !tbaa !1
  %call3 = call i8* @_ZN6thrust16raw_pointer_castIPvEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i8** dereferenceable(8) %ref.tmp)
  store i8* %call3, i8** %raw_ptr, align 8, !tbaa !1
  %4 = load i8*, i8** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IvEEPT_(%"class.thrust::pointer.129"* %retval, i8* %4)
  %5 = bitcast i8** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %6
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.129"*, align 8
  store %"class.thrust::pointer.129"* %this, %"class.thrust::pointer.129"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.129"*, %"class.thrust::pointer.129"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.129"* %this1 to %"class.thrust::iterator_adaptor.130"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlE4baseEv(%"class.thrust::iterator_adaptor.130"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  ret i8* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust16raw_pointer_castIPvEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i8** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i8**, align 8
  store i8** %ptr, i8*** %ptr.addr, align 8, !tbaa !7
  %0 = load i8**, i8*** %ptr.addr, align 8
  %1 = load i8*, i8** %0, align 8, !tbaa !1
  %call = call i8* @_ZN6thrust6detail14pointer_traitsIPvE3getES2_(i8* %1)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system4cuda6detail6mallocINS2_3tagEEEPvRNS2_16execution_policyIT_EEm(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), i64 %n) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %result = alloca i8*, align 8
  %error = alloca i32, align 4
  %ref.tmp = alloca %"class.std::basic_string", align 8
  %temp.lvalue = alloca %"class.std::basic_string", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp4 = alloca %"class.std::allocator", align 1
  %cleanup.isactive = alloca i1, align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast i8** %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  store i8* null, i8** %result, align 8, !tbaa !1
  %2 = bitcast i32* %error to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32 @cudaMalloc(i8** %result, i64 %3)
  store i32 %call, i32* %error, align 4, !tbaa !73
  %4 = load i32, i32* %error, align 4, !tbaa !73
  %tobool = icmp ne i32 %4, 0
  br i1 %tobool, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  %call1 = invoke dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system13cuda_categoryEv()
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %6 = bitcast %"class.thrust::system::error_category"* %call1 to void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)***
  %vtable = load void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)**, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*** %6, align 8, !tbaa !5
  %vfn = getelementptr inbounds void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)** %vtable, i64 6
  %7 = load void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)*, void (%"class.std::basic_string"*, %"class.thrust::system::error_category"*, i32)** %vfn, align 8
  %8 = load i32, i32* %error, align 4, !tbaa !73
  invoke void %7(%"class.std::basic_string"* sret %temp.lvalue, %"class.thrust::system::error_category"* %call1, i32 %8)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call3 = call i8* @_ZNKSs5c_strEv(%"class.std::basic_string"* %temp.lvalue) #5
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp4) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp, i8* %call3, %"class.std::allocator"* dereferenceable(1) %ref.tmp4)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont2
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont8 unwind label %lpad7

invoke.cont8:                                     ; preds = %invoke.cont6
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad7

lpad:                                             ; preds = %invoke.cont, %if.then
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  br label %ehcleanup10

lpad5:                                            ; preds = %invoke.cont2
  %12 = landingpad { i8*, i32 }
          cleanup
  %13 = extractvalue { i8*, i32 } %12, 0
  store i8* %13, i8** %exn.slot, align 8
  %14 = extractvalue { i8*, i32 } %12, 1
  store i32 %14, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad7:                                            ; preds = %invoke.cont8, %invoke.cont6
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad7, %lpad5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp4) #5
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %temp.lvalue) #5
  br label %ehcleanup10

ehcleanup10:                                      ; preds = %ehcleanup, %lpad
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup10
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup10
  %18 = bitcast i32* %error to i8*
  call void @llvm.lifetime.end(i64 4, i8* %18) #5
  %19 = bitcast i8** %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %19) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %20 = load i8*, i8** %result, align 8, !tbaa !1
  %21 = bitcast i32* %error to i8*
  call void @llvm.lifetime.end(i64 4, i8* %21) #5
  %22 = bitcast i8** %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %22) #5
  ret i8* %20

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont8
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IvEEPT_(%"class.thrust::pointer.129"* %this, i8* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.129"*, align 8
  %other.addr = alloca i8*, align 8
  store %"class.thrust::pointer.129"* %this, %"class.thrust::pointer.129"** %this.addr, align 8, !tbaa !1
  store i8* %other, i8** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.129"*, %"class.thrust::pointer.129"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.129"* %this1 to %"class.thrust::iterator_adaptor.130"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEC2ERKS8_(%"class.thrust::iterator_adaptor.130"* %0, i8** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail14pointer_traitsIPvE3getES2_(i8* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i8*, align 8
  store i8* %ptr, i8** %ptr.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %ptr.addr, align 8, !tbaa !1
  ret i8* %0
}

declare i32 @cudaMalloc(i8**, i64) #3

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %this, %"class.std::basic_string"* dereferenceable(8) %w) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::system::detail::bad_alloc"*, align 8
  %w.addr = alloca %"class.std::basic_string"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::system::detail::bad_alloc"* %this, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8, !tbaa !1
  store %"class.std::basic_string"* %w, %"class.std::basic_string"** %w.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::detail::bad_alloc"*, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::detail::bad_alloc"* %this1 to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %0) #5
  %1 = bitcast %"class.thrust::system::detail::bad_alloc"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTVN6thrust6system6detail9bad_allocE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  %m_what = getelementptr inbounds %"class.thrust::system::detail::bad_alloc", %"class.thrust::system::detail::bad_alloc"* %this1, i32 0, i32 1
  invoke void @_ZNSsC2Ev(%"class.std::basic_string"* %m_what)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_what2 = getelementptr inbounds %"class.thrust::system::detail::bad_alloc", %"class.thrust::system::detail::bad_alloc"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::detail::bad_alloc"* %this1 to %"class.std::bad_alloc"*
  %call = call i8* @_ZNKSt9bad_alloc4whatEv(%"class.std::bad_alloc"* %2) #5
  %call5 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSEPKc(%"class.std::basic_string"* %m_what2, i8* %call)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  %m_what6 = getelementptr inbounds %"class.thrust::system::detail::bad_alloc", %"class.thrust::system::detail::bad_alloc"* %this1, i32 0, i32 1
  %call8 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLEPKc(%"class.std::basic_string"* %m_what6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.29, i32 0, i32 0))
          to label %invoke.cont7 unwind label %lpad3

invoke.cont7:                                     ; preds = %invoke.cont4
  %m_what9 = getelementptr inbounds %"class.thrust::system::detail::bad_alloc", %"class.thrust::system::detail::bad_alloc"* %this1, i32 0, i32 1
  %3 = load %"class.std::basic_string"*, %"class.std::basic_string"** %w.addr, align 8
  %call11 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %m_what9, %"class.std::basic_string"* dereferenceable(8) %3)
          to label %invoke.cont10 unwind label %lpad3

invoke.cont10:                                    ; preds = %invoke.cont7
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont7, %invoke.cont4, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %m_what) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  %10 = bitcast %"class.thrust::system::detail::bad_alloc"* %this1 to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocD2Ev(%"class.std::bad_alloc"* %10) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val12 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val12
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail9bad_allocD2Ev(%"class.thrust::system::detail::bad_alloc"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::bad_alloc"*, align 8
  store %"class.thrust::system::detail::bad_alloc"* %this, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::bad_alloc"*, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::detail::bad_alloc"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTVN6thrust6system6detail9bad_allocE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  %m_what = getelementptr inbounds %"class.thrust::system::detail::bad_alloc", %"class.thrust::system::detail::bad_alloc"* %this1, i32 0, i32 1
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %m_what) #5
  %1 = bitcast %"class.thrust::system::detail::bad_alloc"* %this1 to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocD2Ev(%"class.std::bad_alloc"* %1) #5
  ret void
}

; Function Attrs: nounwind
declare void @_ZNSt9bad_allocD2Ev(%"class.std::bad_alloc"*) unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail9bad_allocD0Ev(%"class.thrust::system::detail::bad_alloc"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::bad_alloc"*, align 8
  store %"class.thrust::system::detail::bad_alloc"* %this, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::bad_alloc"*, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8
  call void @_ZN6thrust6system6detail9bad_allocD2Ev(%"class.thrust::system::detail::bad_alloc"* %this1) #5
  %0 = bitcast %"class.thrust::system::detail::bad_alloc"* %this1 to i8*
  call void @_ZdlPv(i8* %0) #14
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZNK6thrust6system6detail9bad_alloc4whatEv(%"class.thrust::system::detail::bad_alloc"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::detail::bad_alloc"*, align 8
  store %"class.thrust::system::detail::bad_alloc"* %this, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::detail::bad_alloc"*, %"class.thrust::system::detail::bad_alloc"** %this.addr, align 8
  %m_what = getelementptr inbounds %"class.thrust::system::detail::bad_alloc", %"class.thrust::system::detail::bad_alloc"* %this1, i32 0, i32 1
  %call = call i8* @_ZNKSs5c_strEv(%"class.std::basic_string"* %m_what) #5
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEC2ERKS8_(%"class.thrust::iterator_adaptor.130"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.130"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.130"* %this, %"class.thrust::iterator_adaptor.130"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.130"*, %"class.thrust::iterator_adaptor.130"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.130"* %this1 to %"class.thrust::iterator_facade.131"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !91
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlE4baseEv(%"class.thrust::iterator_adaptor.130"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.130"*, align 8
  store %"class.thrust::iterator_adaptor.130"* %this, %"class.thrust::iterator_adaptor.130"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.130"*, %"class.thrust::iterator_adaptor.130"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPaaS5_NS_27random_access_traversal_tagENS_9referenceIaS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.127"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.127"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.127"* %this, %"class.thrust::iterator_adaptor.127"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.127"*, %"class.thrust::iterator_adaptor.127"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.127"* %this1 to %"class.thrust::iterator_facade.128"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !93
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPaaS5_NS_27random_access_traversal_tagENS_9referenceIaS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.127"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.127"*, align 8
  store %"class.thrust::iterator_adaptor.127"* %this, %"class.thrust::iterator_adaptor.127"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.127"*, %"class.thrust::iterator_adaptor.127"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.127", %"class.thrust::iterator_adaptor.127"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKaNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IaEEPT_(%"class.thrust::pointer.123"* %this, i8* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.123"*, align 8
  %other.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  store %"class.thrust::pointer.123"* %this, %"class.thrust::pointer.123"** %this.addr, align 8, !tbaa !1
  store i8* %other, i8** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.123"*, %"class.thrust::pointer.123"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.123"* %this1 to %"class.thrust::iterator_adaptor.124"*
  %1 = load i8*, i8** %other.addr, align 8, !tbaa !1
  store i8* %1, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKaEEPS2_aNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_(%"class.thrust::iterator_adaptor.124"* %0, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKaEEPS2_aNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_(%"class.thrust::iterator_adaptor.124"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.124"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.124"* %this, %"class.thrust::iterator_adaptor.124"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.124"*, %"class.thrust::iterator_adaptor.124"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.124"* %this1 to %"class.thrust::iterator_facade.125"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.124", %"class.thrust::iterator_adaptor.124"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !95
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIaEENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::device_ptr"* %agg.tmp8 to i8*
  %7 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive9, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive11, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive14, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive15, align 8
  %call = call i8* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIaEENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.thrust::device_malloc_allocator"* dereferenceable(1) %1, i8* %8, i8* %9, i8* %10)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive17, i32 0, i32 0
  store i8* %call, i8** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive20, i32 0, i32 0
  %11 = load i8*, i8** %coerce.dive21, align 8
  ret i8* %11
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIaEENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIaEEE3getERS3_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive9, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive11, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive14, i32 0, i32 0
  %11 = load i8*, i8** %coerce.dive15, align 8
  %call = call i8* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i8* %9, i8* %10, i8* %11)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive17, i32 0, i32 0
  store i8* %call, i8** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive20, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive21, align 8
  ret i8* %12
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2, i8* %first.coerce, i8* %last.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  %call8 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call8)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call9 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call10 = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %2, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 0
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 1
  store %"struct.thrust::execution_policy.120"* %10, %"struct.thrust::execution_policy.120"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.132"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::device_ptr"* %agg.tmp12 to i8*
  %17 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive13, i32 0, i32 0
  %18 = load i8*, i8** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive15, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive18, i32 0, i32 0
  %20 = load i8*, i8** %coerce.dive19, align 8
  %call20 = call i8* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %11, i8* %18, i8* %19, i8* %20)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive22, i32 0, i32 0
  store i8* %call20, i8** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive25, i32 0, i32 0
  %21 = load i8*, i8** %coerce.dive26, align 8
  ret i8* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIaEEE3getERS3_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIaEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, i8* %first.coerce, i8* %last.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call7 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp8 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp9 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr"* %agg.tmp10 to i8*
  %8 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive11, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp9, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive13, i32 0, i32 0
  %15 = load i8*, i8** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp10, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive16, i32 0, i32 0
  %16 = load i8*, i8** %coerce.dive17, align 8
  %call18 = call i8* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, i8* %14, i8* %15, i8* %16)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive20, i32 0, i32 0
  store i8* %call18, i8** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive23, i32 0, i32 0
  %17 = load i8*, i8** %coerce.dive24, align 8
  ret i8* %17
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %system1, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %system2) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %system1.addr = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  %system2.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %non_const_system1 = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  %non_const_system2 = alloca %"struct.thrust::execution_policy.120"*, align 8
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %system1, %"struct.thrust::system::cpp::detail::execution_policy.86"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %system2, %"struct.thrust::system::cuda::detail::execution_policy.119"** %system2.addr, align 8, !tbaa !7
  %0 = bitcast %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system1 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cpp::detail::execution_policy.86"*, %"struct.thrust::system::cpp::detail::execution_policy.86"** %system1.addr, align 8
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %1, %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system1, align 8, !tbaa !7
  %2 = bitcast %"struct.thrust::execution_policy.120"** %non_const_system2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %3 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %3 to %"struct.thrust::execution_policy.120"*
  store %"struct.thrust::execution_policy.120"* %4, %"struct.thrust::execution_policy.120"** %non_const_system2, align 8, !tbaa !7
  %5 = load %"struct.thrust::system::cpp::detail::execution_policy.86"*, %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system1, align 8
  %6 = bitcast %"struct.thrust::system::cpp::detail::execution_policy.86"* %5 to %"struct.thrust::execution_policy.88"*
  %7 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %non_const_system2, align 8
  call void @_ZN6thrust6system4cuda6detail12cross_systemINS0_3cpp6detail3tagENS2_3tagEEC2ERNS_16execution_policyIS6_EERNS9_IS7_EE(%"struct.thrust::system::cuda::detail::cross_system"* %retval, %"struct.thrust::execution_policy.88"* dereferenceable(1) %6, %"struct.thrust::execution_policy.120"* dereferenceable(1) %7)
  %8 = bitcast %"struct.thrust::execution_policy.120"** %non_const_system2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %8) #5
  %9 = bitcast %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system1 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %10 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %retval to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %11 = load { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %10, align 8
  ret { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %11
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i8* %first.coerce, i8* %last.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.112"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive10, i32 0, i32 0
  %16 = load i8*, i8** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp8, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive12, i32 0, i32 0
  %17 = load i8*, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive15, i32 0, i32 0
  %18 = load i8*, i8** %coerce.dive16, align 8
  %call = call i8* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i8* %16, i8* %17, i8* %18)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive18, i32 0, i32 0
  store i8* %call, i8** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive21, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive22, align 8
  ret i8* %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %x, %"struct.thrust::detail::execution_policy_base.132"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %x.addr, align 8
  %1 = bitcast %"struct.thrust::detail::execution_policy_base.132"* %0 to %"struct.thrust::system::cuda::detail::cross_system"*
  ret %"struct.thrust::system::cuda::detail::cross_system"* %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %x, %"struct.thrust::detail::execution_policy_base.132"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %x.addr, align 8
  ret %"struct.thrust::detail::execution_policy_base.132"* %0
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i8* %begin.coerce, i8* %end.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr", align 8
  %agg.tmp10 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %begin.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %end.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.112"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.112"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp7, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive12, i32 0, i32 0
  %16 = load i8*, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive14, i32 0, i32 0
  %17 = load i8*, i8** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive17, i32 0, i32 0
  %18 = load i8*, i8** %coerce.dive18, align 8
  %call = call i8* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i8* %16, i8* %17, i8* %18)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive20, i32 0, i32 0
  store i8* %call, i8** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive23, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive24, align 8
  ret i8* %19
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i8* %begin.coerce, i8* %end.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp12 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp13 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %begin.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %end.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.112"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp9 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.112"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive14, i32 0, i32 0
  %16 = load i8*, i8** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive16, i32 0, i32 0
  %17 = load i8*, i8** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive19, i32 0, i32 0
  %18 = load i8*, i8** %coerce.dive20, align 8
  %call = call i8* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i8* %16, i8* %17, i8* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive22, i32 0, i32 0
  store i8* %call, i8** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive25, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive26, align 8
  ret i8* %19
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEENS_10device_ptrIaEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i8* %begin.coerce, i8* %end.coerce, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %begin.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive2, i32 0, i32 0
  store i8* %end.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive6, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.112"* %end to %"class.thrust::iterator_facade.114"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.112"* %begin to %"class.thrust::iterator_facade.114"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_aS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.114"* dereferenceable(1) %7, %"class.thrust::iterator_facade.114"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.112"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.112"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::device_ptr"* %agg.tmp9 to i8*
  %13 = bitcast %"class.thrust::device_ptr"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive10, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive13, i32 0, i32 0
  %15 = load i8*, i8** %coerce.dive14, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEElNS_10device_ptrIaEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i8* %14, i64 %11, i8* %15)
  %16 = bitcast %"class.thrust::device_ptr"* %result to %"class.thrust::iterator_facade.60"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call15 = call i8* @_ZN6thrustplINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE(%"class.thrust::iterator_facade.60"* dereferenceable(1) %16, i64 %17)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive17, i32 0, i32 0
  store i8* %call15, i8** %coerce.dive18, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive20, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive21, align 8
  ret i8* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKaEElNS_10device_ptrIaEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i8* %first.coerce, i64 %n, i8* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %result = alloca %"class.thrust::device_ptr", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr", align 8
  %coerce = alloca %"class.thrust::device_reference", align 8
  %src = alloca i8*, align 8
  %ref.tmp15 = alloca i8*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %result, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive4, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::device_ptr"* %result to %"class.thrust::iterator_facade.60"*
  %call = call i8* @_ZNK6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEdeEv(%"class.thrust::iterator_facade.60"* %1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference", %"class.thrust::device_reference"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  store i8* %call, i8** %coerce.dive9, align 8
  %2 = bitcast %"class.thrust::device_reference"* %coerce to %"class.thrust::reference"*
  %call10 = call i8* @_ZNK6thrust9referenceIaNS_10device_ptrIaEENS_16device_referenceIaEEEadEv(%"class.thrust::reference"* %2)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive12, i32 0, i32 0
  store i8* %call10, i8** %coerce.dive13, align 8
  %call14 = call i8* @_ZN6thrust16raw_pointer_castINS_10device_ptrIaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr"* dereferenceable(8) %ref.tmp)
  store i8* %call14, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = bitcast %"class.thrust::detail::normal_iterator.112"* %first to %"class.thrust::iterator_facade.114"*
  %call16 = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.114"* %4)
  store i8* %call16, i8** %ref.tmp15, align 8, !tbaa !1
  %call17 = call i8* @_ZN6thrust16raw_pointer_castIPKaEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i8** dereferenceable(8) %ref.tmp15)
  store i8* %call17, i8** %src, align 8, !tbaa !1
  %5 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %6, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %7 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call18 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %7)
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call18 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %9 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %9, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %10 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %10)
  %11 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %8, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %11)
  store i32 %call21, i32* %kind, align 4, !tbaa !97
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %12) #5
  %13 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system122 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %13, i32 0, i32 0
  %ref23 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system122, align 8, !tbaa !7
  %14 = bitcast %"struct.thrust::execution_policy.88"* %ref23 to %"struct.thrust::detail::execution_policy_base.85"*
  %call24 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %14)
  %15 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call24 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %16 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system225 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %16, i32 0, i32 1
  %ref26 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system225, align 8, !tbaa !7
  %17 = bitcast %"struct.thrust::execution_policy.120"* %ref26 to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %17)
  %18 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call28 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %15, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %18)
  store %struct.CUstream_st* %call28, %struct.CUstream_st** %s, align 8, !tbaa !1
  %19 = load i8*, i8** %dst, align 8, !tbaa !1
  %20 = load i8*, i8** %src, align 8, !tbaa !1
  %21 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %21, 1
  %22 = load i32, i32* %kind, align 4, !tbaa !97
  %23 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %19, i8* %20, i64 %mul, i32 %22, %struct.CUstream_st* %23)
  %24 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %24, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %25 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %25) #5
  %26 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  %27 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %28) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrustplINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE(%"class.thrust::iterator_facade.60"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.60"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::device_ptr", align 8
  store %"class.thrust::iterator_facade.60"* %i, %"class.thrust::iterator_facade.60"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::device_ptr"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.60"*, %"class.thrust::iterator_facade.60"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.60"* %1 to %"class.thrust::device_ptr"*
  %3 = bitcast %"class.thrust::device_ptr"* %tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::device_ptr"* %tmp to %"class.thrust::iterator_facade.60"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl(%"class.thrust::iterator_facade.60"* %5, i64 %6)
  %7 = bitcast %"class.thrust::device_ptr"* %retval to i8*
  %8 = bitcast %"class.thrust::device_ptr"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive2, align 8
  ret i8* %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust16raw_pointer_castINS_10device_ptrIaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  store %"class.thrust::device_ptr"* %ptr, %"class.thrust::device_ptr"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive2, align 8
  %call = call i8* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIaEEE3getES3_(i8* %3)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEdeEv(%"class.thrust::iterator_facade.60"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.60"*, align 8
  store %"class.thrust::iterator_facade.60"* %this, %"class.thrust::iterator_facade.60"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.60"*, %"class.thrust::iterator_facade.60"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.60"* %this1)
  %call2 = call i8* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIaEEEENT_9referenceERKS4_(%"class.thrust::device_ptr"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference", %"class.thrust::device_reference"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  store i8* %call2, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference", %"class.thrust::device_reference"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive10, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive11, align 8
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i8* @_ZNK6thrust9referenceIaNS_10device_ptrIaEENS_16device_referenceIaEEEadEv(%"class.thrust::reference"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr", align 8
  %this.addr = alloca %"class.thrust::reference"*, align 8
  store %"class.thrust::reference"* %this, %"class.thrust::reference"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference"*, %"class.thrust::reference"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive2, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive3, align 8
  ret i8* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust16raw_pointer_castIPKaEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i8** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i8**, align 8
  store i8** %ptr, i8*** %ptr.addr, align 8, !tbaa !7
  %0 = load i8**, i8*** %ptr.addr, align 8
  %1 = load i8*, i8** %0, align 8, !tbaa !1
  %call = call i8* @_ZN6thrust6detail14pointer_traitsIPKaE3getES3_(i8* %1)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.114"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.114"*, align 8
  store %"class.thrust::iterator_facade.114"* %this, %"class.thrust::iterator_facade.114"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.114"*, %"class.thrust::iterator_facade.114"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.112"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.114"* %this1)
  %call2 = call dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKaEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %call)
  ret i8* %call2
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1), %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1)) #1 comdat {
entry:
  %.addr = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  %.addr1 = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %0, %"struct.thrust::system::cpp::detail::execution_policy.86"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %1, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr1, align 8, !tbaa !7
  ret i32 1
}

; Function Attrs: uwtable
define linkonce_odr %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1), %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec) #0 comdat {
entry:
  %retval = alloca %struct.CUstream_st*, align 8
  %.addr = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %0, %"struct.thrust::system::cpp::detail::execution_policy.86"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %call = call zeroext i1 @_ZN6thrust6system4cuda6detail19trivial_copy_detail12_GLOBAL__N_115is_valid_policyINS2_16execution_policyINS2_3tagEEEEEbRKT_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1)
  br i1 %call, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %2 to %"struct.thrust::detail::execution_policy_base.121"*
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERKT_RKNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call2 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %4)
  store %struct.CUstream_st* %call2, %struct.CUstream_st** %retval, align 8
  br label %return

if.end:                                           ; preds = %entry
  %call3 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail13legacy_streamEv()
  store %struct.CUstream_st* %call3, %struct.CUstream_st** %retval, align 8
  br label %return

return:                                           ; preds = %if.end, %if.then
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %retval, align 8
  ret %struct.CUstream_st* %5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %dst, i8* %src, i64 %count, i32 %kind, %struct.CUstream_st* %stream) #8 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %dst.addr = alloca i8*, align 8
  %src.addr = alloca i8*, align 8
  %count.addr = alloca i64, align 8
  %kind.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %error = alloca i32, align 4
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store i8* %dst, i8** %dst.addr, align 8, !tbaa !1
  store i8* %src, i8** %src.addr, align 8, !tbaa !1
  store i64 %count, i64* %count.addr, align 8, !tbaa !13
  store i32 %kind, i32* %kind.addr, align 4, !tbaa !97
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = bitcast i32* %error to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i8*, i8** %dst.addr, align 8, !tbaa !1
  %2 = load i8*, i8** %src.addr, align 8, !tbaa !1
  %3 = load i64, i64* %count.addr, align 8, !tbaa !13
  %4 = load i32, i32* %kind.addr, align 4, !tbaa !97
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %call = call i32 @cudaMemcpyAsync(i8* %1, i8* %2, i64 %3, i32 %4, %struct.CUstream_st* %5)
  store i32 %call, i32* %error, align 4, !tbaa !73
  %6 = load i32, i32* %error, align 4, !tbaa !73
  %tobool = icmp ne i32 %6, 0
  br i1 %tobool, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 40) #5
  %7 = bitcast i8* %exception to %"class.thrust::system::system_error"*
  %8 = load i32, i32* %error, align 4, !tbaa !73
  %call1 = invoke dereferenceable(8) %"class.thrust::system::error_category"* @_ZN6thrust6system13cuda_categoryEv()
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system12system_errorC2EiRKNS0_14error_categoryE(%"class.thrust::system::system_error"* %7, i32 %8, %"class.thrust::system::error_category"* dereferenceable(8) %call1)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  call void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system12system_errorE to i8*), i8* bitcast (void (%"class.thrust::system::system_error"*)* @_ZN6thrust6system12system_errorD2Ev to i8*)) #15
  unreachable

lpad:                                             ; preds = %invoke.cont, %if.then
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @__cxa_free_exception(i8* %exception) #5
  %12 = bitcast i32* %error to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %13 = bitcast i32* %error to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val3 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %stream, i8* %message) #8 comdat {
entry:
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %message.addr = alloca i8*, align 8
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  store i8* %message, i8** %message.addr, align 8, !tbaa !1
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamSynchronize(%struct.CUstream_st* %0)
  %1 = load i8*, i8** %message.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIaEEEENT_9referenceERKS4_(%"class.thrust::device_ptr"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference", align 8
  %f.addr = alloca %"class.thrust::device_ptr"*, align 8
  store %"class.thrust::device_ptr"* %f, %"class.thrust::device_ptr"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr"* %0 to %"class.thrust::pointer"*
  %call = call i8* @_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEE11dereferenceEv(%"class.thrust::pointer"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference", %"class.thrust::device_reference"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %call, i8** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference", %"class.thrust::device_reference"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive9, align 8
  ret i8* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.60"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.60"*, align 8
  store %"class.thrust::iterator_facade.60"* %this, %"class.thrust::iterator_facade.60"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.60"*, %"class.thrust::iterator_facade.60"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.60"* %this1 to %"class.thrust::device_ptr"*
  ret %"class.thrust::device_ptr"* %0
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust7pointerIaNS_6system4cuda6detail3tagENS_16device_referenceIaEENS_10device_ptrIaEEE11dereferenceEv(%"class.thrust::pointer"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference", align 8
  %this.addr = alloca %"class.thrust::pointer"*, align 8
  store %"class.thrust::pointer"* %this, %"class.thrust::pointer"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer"*, %"class.thrust::pointer"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer"* %this1 to %"class.thrust::device_ptr"*
  call void @_ZN6thrust16device_referenceIaEC2ERKNS_10device_ptrIaEE(%"class.thrust::device_reference"* %retval, %"class.thrust::device_ptr"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference", %"class.thrust::device_reference"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %1 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceIaEC2ERKNS_10device_ptrIaEE(%"class.thrust::device_reference"* %this, %"class.thrust::device_ptr"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr"*, align 8
  store %"class.thrust::device_reference"* %this, %"class.thrust::device_reference"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr"* %ptr, %"class.thrust::device_ptr"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference"*, %"class.thrust::device_reference"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference"* %this1 to %"class.thrust::reference"*
  %1 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceIaNS_10device_ptrIaEENS_16device_referenceIaEEEC2ERKS2_(%"class.thrust::reference"* %0, %"class.thrust::device_ptr"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceIaNS_10device_ptrIaEENS_16device_referenceIaEEEC2ERKS2_(%"class.thrust::reference"* %this, %"class.thrust::device_ptr"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr"*, align 8
  store %"class.thrust::reference"* %this, %"class.thrust::reference"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr"* %ptr, %"class.thrust::device_ptr"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference"*, %"class.thrust::reference"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference", %"class.thrust::reference"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail14pointer_traitsIPKaE3getES3_(i8* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i8*, align 8
  store i8* %ptr, i8** %ptr.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %ptr.addr, align 8, !tbaa !1
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKaEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  store %"class.thrust::detail::normal_iterator.112"* %f, %"class.thrust::detail::normal_iterator.112"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.112"* %0 to %"class.thrust::iterator_adaptor.113"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.113"* %1)
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.112"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.114"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.114"*, align 8
  store %"class.thrust::iterator_facade.114"* %this, %"class.thrust::iterator_facade.114"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.114"*, %"class.thrust::iterator_facade.114"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.114"* %this1 to %"class.thrust::detail::normal_iterator.112"*
  ret %"class.thrust::detail::normal_iterator.112"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.113"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.113"*, align 8
  store %"class.thrust::iterator_adaptor.113"* %this, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.113"*, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !71
  ret i8* %0
}

; Function Attrs: uwtable
define internal zeroext i1 @_ZN6thrust6system4cuda6detail19trivial_copy_detail12_GLOBAL__N_115is_valid_policyINS2_16execution_policyINS2_3tagEEEEEbRKT_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %t) #0 {
entry:
  %retval = alloca i1, align 1
  %t.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %value = alloca i64, align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %t, %"struct.thrust::system::cuda::detail::execution_policy.119"** %t.addr, align 8, !tbaa !7
  %0 = bitcast i64* %value to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %t.addr, align 8
  %2 = ptrtoint %"struct.thrust::system::cuda::detail::execution_policy.119"* %1 to i64
  store volatile i64 %2, i64* %value, align 8, !tbaa !13
  %3 = load volatile i64, i64* %value, align 8, !tbaa !13
  %tobool = icmp ne i64 %3, 0
  br i1 %tobool, label %if.then, label %if.end2

if.then:                                          ; preds = %entry
  %4 = load volatile i64, i64* %value, align 8, !tbaa !13
  %cmp = icmp eq i64 %4, 0
  br i1 %cmp, label %if.then1, label %if.end

if.then1:                                         ; preds = %if.then
  %5 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8, !tbaa !1
  %call = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.31, i32 0, i32 0))
  call void @_ZSt9terminatev() #13
  unreachable

if.end:                                           ; preds = %if.then
  store i1 true, i1* %retval, align 1
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end2:                                          ; preds = %entry
  store i1 false, i1* %retval, align 1
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end2, %if.end
  %6 = bitcast i64* %value to i8*
  call void @llvm.lifetime.end(i64 8, i8* %6) #5
  %7 = load i1, i1* %retval, align 1
  ret i1 %7
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec) #8 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %call = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail14default_streamEv()
  ret %struct.CUstream_st* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERKT_RKNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %x, %"struct.thrust::detail::execution_policy_base.121"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %x.addr, align 8
  %1 = bitcast %"struct.thrust::detail::execution_policy_base.121"* %0 to %"struct.thrust::system::cuda::detail::tag"*
  ret %"struct.thrust::system::cuda::detail::tag"* %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %struct.CUstream_st* @_ZN6thrust6system4cuda6detail13legacy_streamEv() #9 comdat {
entry:
  ret %struct.CUstream_st* inttoptr (i64 1 to %struct.CUstream_st*)
}

declare i32 @fprintf(%struct._IO_FILE*, i8*, ...) #3

; Function Attrs: inlinehint uwtable
define linkonce_odr %struct.CUstream_st* @_ZN6thrust6system4cuda6detail14default_streamEv() #8 comdat {
entry:
  %call = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail13legacy_streamEv()
  ret %struct.CUstream_st* %call
}

declare i32 @cudaMemcpyAsync(i8*, i8*, i64, i32, %struct.CUstream_st*) #3

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system12system_errorC2EiRKNS0_14error_categoryE(%"class.thrust::system::system_error"* %this, i32 %ev, %"class.thrust::system::error_category"* dereferenceable(8) %ecat) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::system::system_error"*, align 8
  %ev.addr = alloca i32, align 4
  %ecat.addr = alloca %"class.thrust::system::error_category"*, align 8
  %ref.tmp = alloca %"class.std::basic_string", align 8
  %ref.tmp2 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::system::system_error"* %this, %"class.thrust::system::system_error"** %this.addr, align 8, !tbaa !1
  store i32 %ev, i32* %ev.addr, align 4, !tbaa !11
  store %"class.thrust::system::error_category"* %ecat, %"class.thrust::system::error_category"** %ecat.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::system_error"*, %"class.thrust::system::system_error"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::system_error"* %this1 to %"class.std::runtime_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp2) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.21, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZNSt13runtime_errorC2ERKSs(%"class.std::runtime_error"* %0, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp2) #5
  %1 = bitcast %"class.thrust::system::system_error"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([5 x i8*], [5 x i8*]* @_ZTVN6thrust6system12system_errorE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  %m_error_code = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 1
  %2 = load i32, i32* %ev.addr, align 4, !tbaa !11
  %3 = load %"class.thrust::system::error_category"*, %"class.thrust::system::error_category"** %ecat.addr, align 8
  invoke void @_ZN6thrust6system10error_codeC2EiRKNS0_14error_categoryE(%"class.thrust::system::error_code"* %m_error_code, i32 %2, %"class.thrust::system::error_category"* dereferenceable(8) %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  %m_what = getelementptr inbounds %"class.thrust::system::system_error", %"class.thrust::system::system_error"* %this1, i32 0, i32 2
  invoke void @_ZNSsC2Ev(%"class.std::basic_string"* %m_what)
          to label %invoke.cont7 unwind label %lpad5

invoke.cont7:                                     ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont6, %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::system::system_error"* %this1 to %"class.std::runtime_error"*
  call void @_ZNSt13runtime_errorD2Ev(%"class.std::runtime_error"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val9 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val9
}

declare i32 @cudaStreamSynchronize(%struct.CUstream_st*) #3

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr"* @_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl(%"class.thrust::iterator_facade.60"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.60"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.60"* %this, %"class.thrust::iterator_facade.60"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.60"*, %"class.thrust::iterator_facade.60"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.60"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIaEEEEvRT_NS4_15difference_typeE(%"class.thrust::device_ptr"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.60"* %this1)
  ret %"class.thrust::device_ptr"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIaEEEEvRT_NS4_15difference_typeE(%"class.thrust::device_ptr"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr"* %f, %"class.thrust::device_ptr"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr"* %0 to %"class.thrust::iterator_adaptor.59"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7advanceEl(%"class.thrust::iterator_adaptor.59"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr"* @_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.60"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.60"*, align 8
  store %"class.thrust::iterator_facade.60"* %this, %"class.thrust::iterator_facade.60"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.60"*, %"class.thrust::iterator_facade.60"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.60"* %this1 to %"class.thrust::device_ptr"*
  ret %"class.thrust::device_ptr"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7advanceEl(%"class.thrust::iterator_adaptor.59"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.59"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.59"* %this, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.59"*, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %this1, i32 0, i32 0
  %1 = load i8*, i8** %m_iterator, align 8, !tbaa !69
  %add.ptr = getelementptr inbounds i8, i8* %1, i64 %0
  store i8* %add.ptr, i8** %m_iterator, align 8, !tbaa !69
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail12cross_systemINS0_3cpp6detail3tagENS2_3tagEEC2ERNS_16execution_policyIS6_EERNS9_IS7_EE(%"struct.thrust::system::cuda::detail::cross_system"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %this, %"struct.thrust::system::cuda::detail::cross_system"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %this1 to %"struct.thrust::execution_policy.133"*
  %system12 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  store %"struct.thrust::execution_policy.88"* %1, %"struct.thrust::execution_policy.88"** %system12, align 8, !tbaa !7
  %system23 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  store %"struct.thrust::execution_policy.120"* %2, %"struct.thrust::execution_policy.120"** %system23, align 8, !tbaa !7
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIaEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.56"* %i, %"class.thrust::detail::normal_iterator.56"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.56"* %i, %"class.thrust::detail::normal_iterator.56"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %1 to %"class.thrust::iterator_facade.58"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl(%"class.thrust::iterator_facade.58"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl(%"class.thrust::iterator_facade.58"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.58"* %this, %"class.thrust::iterator_facade.58"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.58"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.58"* %this1)
  ret %"class.thrust::detail::normal_iterator.56"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.56"* %f, %"class.thrust::detail::normal_iterator.56"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.56"* %0 to %"class.thrust::iterator_adaptor.57"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.57"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.58"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  store %"class.thrust::iterator_facade.58"* %this, %"class.thrust::iterator_facade.58"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.58"* %this1 to %"class.thrust::detail::normal_iterator.56"*
  ret %"class.thrust::detail::normal_iterator.56"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.57"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.57"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.57"* %this, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.57"*, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr"* %m_iterator to %"class.thrust::iterator_facade.60"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZN6thrust15iterator_facadeINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl(%"class.thrust::iterator_facade.60"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIaEENS_10device_ptrIaEElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %a, i8* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %p.coerce, i8** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator"* %a, %"class.thrust::device_malloc_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator"*, %"class.thrust::device_malloc_allocator"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive4, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIaEENS_10device_ptrIaEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_(%"class.thrust::device_malloc_allocator"* dereferenceable(1) %0, i8* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS5_aS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.58"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.58"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  store %"class.thrust::iterator_facade.58"* %lhs, %"class.thrust::iterator_facade.58"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.58"* %rhs, %"class.thrust::iterator_facade.58"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.58"* %0 to %"class.thrust::detail::normal_iterator.56"*
  %2 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.58"* %2 to %"class.thrust::detail::normal_iterator.56"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIaEENS_10device_ptrIaEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_(%"class.thrust::device_malloc_allocator"* dereferenceable(1), i8* %.coerce, i64) #1 comdat {
entry:
  %2 = alloca %"class.thrust::device_ptr", align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator"*, align 8
  %.addr3 = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %2, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive1, i32 0, i32 0
  store i8* %.coerce, i8** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator"* %0, %"class.thrust::device_malloc_allocator"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr3, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.56"* %f1, %"class.thrust::detail::normal_iterator.56"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.56"* %f2, %"class.thrust::detail::normal_iterator.56"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  store %"class.thrust::detail::normal_iterator.56"* %f1, %"class.thrust::detail::normal_iterator.56"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.56"* %f2, %"class.thrust::detail::normal_iterator.56"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %1 to %"class.thrust::iterator_adaptor.57"*
  %3 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.56"* %3 to %"class.thrust::iterator_adaptor.57"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.57"* %2, %"class.thrust::iterator_adaptor.57"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.57"* %this, %"class.thrust::iterator_adaptor.57"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.57"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.57"*, align 8
  store %"class.thrust::iterator_adaptor.57"* %this, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.57"* %y, %"class.thrust::iterator_adaptor.57"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.57"*, %"class.thrust::iterator_adaptor.57"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.57"*, %"class.thrust::iterator_adaptor.57"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIaEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.57"* %0)
  %1 = bitcast %"class.thrust::device_ptr"* %call to %"class.thrust::iterator_facade.60"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr"* %m_iterator to %"class.thrust::iterator_facade.60"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS2_aS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.60"* dereferenceable(1) %1, %"class.thrust::iterator_facade.60"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrIaEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS2_aS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.60"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.60"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.60"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.60"*, align 8
  store %"class.thrust::iterator_facade.60"* %lhs, %"class.thrust::iterator_facade.60"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.60"* %rhs, %"class.thrust::iterator_facade.60"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.60"*, %"class.thrust::iterator_facade.60"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.60"* %0 to %"class.thrust::device_ptr"*
  %2 = load %"class.thrust::iterator_facade.60"*, %"class.thrust::iterator_facade.60"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.60"* %2 to %"class.thrust::device_ptr"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIaEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_(%"class.thrust::device_ptr"* dereferenceable(8) %1, %"class.thrust::device_ptr"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIaEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_(%"class.thrust::device_ptr"* dereferenceable(8) %f1, %"class.thrust::device_ptr"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr"* %f1, %"class.thrust::device_ptr"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr"* %f2, %"class.thrust::device_ptr"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIaEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr"* dereferenceable(8) %0, %"class.thrust::device_ptr"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIaEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr"* dereferenceable(8) %f1, %"class.thrust::device_ptr"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr"*, align 8
  store %"class.thrust::device_ptr"* %f1, %"class.thrust::device_ptr"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr"* %f2, %"class.thrust::device_ptr"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr"* %1 to %"class.thrust::iterator_adaptor.59"*
  %3 = load %"class.thrust::device_ptr"*, %"class.thrust::device_ptr"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr"* %3 to %"class.thrust::iterator_adaptor.59"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE11distance_toIS2_S3_aS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.59"* %2, %"class.thrust::iterator_adaptor.59"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE11distance_toIS2_S3_aS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.59"* %this, %"class.thrust::iterator_adaptor.59"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.59"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.59"*, align 8
  store %"class.thrust::iterator_adaptor.59"* %this, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.59"* %y, %"class.thrust::iterator_adaptor.59"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.59"*, %"class.thrust::iterator_adaptor.59"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.59"*, %"class.thrust::iterator_adaptor.59"** %y.addr, align 8
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE4baseEv(%"class.thrust::iterator_adaptor.59"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %this1, i32 0, i32 0
  %2 = load i8*, i8** %m_iterator, align 8, !tbaa !69
  %sub.ptr.lhs.cast = ptrtoint i8* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i8* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  ret i64 %sub.ptr.sub
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust6detail18contiguous_storageIaSaIaEE5beginEv(%"class.thrust::detail::contiguous_storage"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.112", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPKaEC2IPaEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.112"* %retval, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.112", %"class.thrust::detail::normal_iterator.112"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %coerce.dive, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive2, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPKaEC2IPaEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.112"* %this, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  store %"class.thrust::detail::normal_iterator.112"* %this, %"class.thrust::detail::normal_iterator.112"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator"* %other, %"class.thrust::detail::normal_iterator"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.112"* %this1 to %"class.thrust::iterator_adaptor.113"*
  %2 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %2 to %"class.thrust::iterator_adaptor"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %3)
  %4 = load i8*, i8** %call, align 8, !tbaa !1
  store i8* %4, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.113"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.113"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.113"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.113"* %this, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.113"*, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.113"* %this1 to %"class.thrust::iterator_facade.114"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !71
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.112"* %i, %"class.thrust::detail::normal_iterator.112"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.112"* %i, %"class.thrust::detail::normal_iterator.112"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKaEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.112"* %i, %"class.thrust::detail::normal_iterator.112"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.112"* %1 to %"class.thrust::iterator_facade.114"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.112"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.114"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.112"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.114"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.114"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.114"* %this, %"class.thrust::iterator_facade.114"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.114"*, %"class.thrust::iterator_facade.114"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.112"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.114"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKaEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.112"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.114"* %this1)
  ret %"class.thrust::detail::normal_iterator.112"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKaEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.112"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.112"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.112"* %f, %"class.thrust::detail::normal_iterator.112"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.112"*, %"class.thrust::detail::normal_iterator.112"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.112"* %0 to %"class.thrust::iterator_adaptor.113"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.113"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.112"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.114"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.114"*, align 8
  store %"class.thrust::iterator_facade.114"* %this, %"class.thrust::iterator_facade.114"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.114"*, %"class.thrust::iterator_facade.114"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.114"* %this1 to %"class.thrust::detail::normal_iterator.112"*
  ret %"class.thrust::detail::normal_iterator.112"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.113"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.113"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.113"* %this, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.113"*, %"class.thrust::iterator_adaptor.113"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.113", %"class.thrust::iterator_adaptor.113"* %this1, i32 0, i32 0
  %1 = load i8*, i8** %m_iterator, align 8, !tbaa !71
  %add.ptr = getelementptr inbounds i8, i8* %1, i64 %0
  store i8* %add.ptr, i8** %m_iterator, align 8, !tbaa !71
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.46"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  %ref.tmp = alloca %"class.thrust::device_malloc_allocator.64", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.46"* %v, %"class.thrust::detail::vector_base.46"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEEC2Ev(%"class.thrust::device_malloc_allocator.64"* %ref.tmp)
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_(%"class.thrust::detail::contiguous_storage.63"* %m_storage, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEED2Ev(%"class.thrust::device_malloc_allocator.64"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !99
  %0 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %v.addr, align 8
  %call = invoke %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %v.addr, align 8
  %call7 = invoke %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.46"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %call7, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive10, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive12, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_(%"class.thrust::detail::vector_base.62"* %this1, %"struct.thrust::pair"* %2, %"struct.thrust::pair"* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEED2Ev(%"class.thrust::device_malloc_allocator.64"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.63"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEEC2Ev(%"class.thrust::device_malloc_allocator.64"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  store %"class.thrust::device_malloc_allocator.64"* %this, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_(%"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  %alloc.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.64"* %alloc, %"class.thrust::device_malloc_allocator.64"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %alloc.addr, align 8
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEEC2ERKS3_(%"class.thrust::device_malloc_allocator.64"* %m_allocator, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust10device_ptrINS_4pairIaaEEEC2IS2_EEPT_(%"class.thrust::device_ptr.69"* %agg.tmp, %"struct.thrust::pair"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.66"* %m_begin, %"struct.thrust::pair"* %1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !104
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEED2Ev(%"class.thrust::device_malloc_allocator.64"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEED2Ev(%"class.thrust::device_malloc_allocator.64"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  store %"class.thrust::device_malloc_allocator.64"* %this, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_(%"class.thrust::detail::vector_base.62"* %this, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive9, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.62"* %this4, %"struct.thrust::pair"* %4, %"struct.thrust::pair"* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.46", %"class.thrust::detail::vector_base.46"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.47"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive3, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.46"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %call = call %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.46"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.63"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.63"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEED2Ev(%"class.thrust::device_malloc_allocator.64"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEED2Ev(%"class.thrust::device_malloc_allocator.64"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEEC2ERKS3_(%"class.thrust::device_malloc_allocator.64"* %this, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  store %"class.thrust::device_malloc_allocator.64"* %this, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.64"* %0, %"class.thrust::device_malloc_allocator.64"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrINS_4pairIaaEEEC2IS2_EEPT_(%"class.thrust::device_ptr.69"* %this, %"struct.thrust::pair"* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %ptr.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::device_ptr.69"* %this, %"class.thrust::device_ptr.69"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %ptr, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.69"* %this1 to %"class.thrust::pointer.70"*
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_(%"class.thrust::pointer.70"* %0, %"struct.thrust::pair"* %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.66"* %this, %"struct.thrust::pair"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.69", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"class.thrust::detail::normal_iterator.66"* %this, %"class.thrust::detail::normal_iterator.66"** %this.addr, align 8, !tbaa !1
  %this3 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.66"* %this3 to %"class.thrust::iterator_adaptor.67"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.67"* %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_(%"class.thrust::pointer.70"* %this, %"struct.thrust::pair"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.70"*, align 8
  %other.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::pointer.70"* %this, %"class.thrust::pointer.70"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %other, %"struct.thrust::pair"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.70"*, %"class.thrust::pointer.70"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.70"* %this1 to %"class.thrust::iterator_adaptor.71"*
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_(%"class.thrust::iterator_adaptor.71"* %0, %"struct.thrust::pair"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_(%"class.thrust::iterator_adaptor.71"* %this, %"struct.thrust::pair"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.71"*, align 8
  %iter.addr = alloca %"struct.thrust::pair"**, align 8
  store %"class.thrust::iterator_adaptor.71"* %this, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"** %iter, %"struct.thrust::pair"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.71"*, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.71"* %this1 to %"class.thrust::iterator_facade.72"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !105
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.67"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.67"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  store %"class.thrust::iterator_adaptor.67"* %this, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %iter, %"class.thrust::device_ptr.69"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.67"*, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.67"* %this1 to %"class.thrust::iterator_facade.68"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.69"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.69"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.62"* %this, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive8, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair"* %6, %"struct.thrust::pair"* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive12, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive14, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE(%"class.thrust::detail::vector_base.62"* %this4, i64 %8, %"struct.thrust::pair"* %13, %"struct.thrust::pair"* %14, %"class.thrust::detail::contiguous_storage.63"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !99
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive5, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive7, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_(%"struct.thrust::pair"* %4, %"struct.thrust::pair"* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE(%"class.thrust::detail::vector_base.62"* %this, i64 %requested_size, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"class.thrust::detail::contiguous_storage.63"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp54 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.63"* %new_storage, %"class.thrust::detail::contiguous_storage.63"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.63"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8capacityEv(%"class.thrust::detail::vector_base.62"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::vector_base.62"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup78

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8allocateEm(%"class.thrust::detail::contiguous_storage.63"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %new_storage.addr, align 8
  %call21 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.63"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair"* %call21, %"struct.thrust::pair"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive27, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive29, i32 0, i32 0
  %20 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp18, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive34, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive35, align 8
  %call37 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_(%"class.thrust::detail::contiguous_storage.63"* %m_storage, %"struct.thrust::pair"* %19, %"struct.thrust::pair"* %20, %"struct.thrust::pair"* %21)
          to label %invoke.cont36 unwind label %lpad19

invoke.cont36:                                    ; preds = %invoke.cont20
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %coerce, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive41, i32 0, i32 0
  store %"struct.thrust::pair"* %call37, %"struct.thrust::pair"** %coerce.dive42, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.66"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %new_storage.addr, align 8
  %call45 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.63"* %27)
          to label %invoke.cont44 unwind label %lpad43

invoke.cont44:                                    ; preds = %catch
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %new_storage_end, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive49, i32 0, i32 0
  store %"struct.thrust::pair"* %call45, %"struct.thrust::pair"** %coerce.dive50, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont52 unwind label %lpad51

invoke.cont52:                                    ; preds = %invoke.cont44
  %m_storage53 = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %new_storage.addr, align 8
  %call56 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.63"* %29)
          to label %invoke.cont55 unwind label %lpad51

invoke.cont55:                                    ; preds = %invoke.cont52
  %coerce.dive57 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp54, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive60, i32 0, i32 0
  store %"struct.thrust::pair"* %call56, %"struct.thrust::pair"** %coerce.dive61, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp62 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.66"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive63 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp54, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive64, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive66, i32 0, i32 0
  %32 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive67, align 8
  %coerce.dive68 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp62, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive68, i32 0, i32 0
  %coerce.dive70 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive69, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive71, i32 0, i32 0
  %33 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive72, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.63"* %m_storage53, %"struct.thrust::pair"* %32, %"struct.thrust::pair"* %33)
          to label %invoke.cont73 unwind label %lpad51

invoke.cont73:                                    ; preds = %invoke.cont55
  %34 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.63"* %34)
          to label %invoke.cont74 unwind label %lpad51

invoke.cont74:                                    ; preds = %invoke.cont73
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad51

lpad43:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup76

lpad51:                                           ; preds = %invoke.cont74, %invoke.cont73, %invoke.cont55, %invoke.cont52, %invoke.cont44
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.66"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup76

ehcleanup76:                                      ; preds = %lpad51, %lpad43
  invoke void @__cxa_end_catch()
          to label %invoke.cont77 unwind label %terminate.lpad

invoke.cont77:                                    ; preds = %ehcleanup76
  br label %ehcleanup78

try.cont:                                         ; preds = %invoke.cont36
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup78:                                      ; preds = %invoke.cont77, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup78
  %exn79 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn79, 0
  %lpad.val80 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val80

terminate.lpad:                                   ; preds = %ehcleanup76
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont74, %invoke.cont14
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_(%"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive8, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE(%"struct.thrust::pair"* %4, %"struct.thrust::pair"* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE(%"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to %"class.thrust::iterator_facade.136"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to %"class.thrust::iterator_facade.136"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.136"* dereferenceable(1) %1, %"class.thrust::iterator_facade.136"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.136"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.136"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  store %"class.thrust::iterator_facade.136"* %lhs, %"class.thrust::iterator_facade.136"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.136"* %rhs, %"class.thrust::iterator_facade.136"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.136"* %0 to %"class.thrust::detail::normal_iterator.134"*
  %2 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.136"* %2 to %"class.thrust::detail::normal_iterator.134"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.134"* %f1, %"class.thrust::detail::normal_iterator.134"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.134"* %f2, %"class.thrust::detail::normal_iterator.134"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  store %"class.thrust::detail::normal_iterator.134"* %f1, %"class.thrust::detail::normal_iterator.134"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.134"* %f2, %"class.thrust::detail::normal_iterator.134"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %1 to %"class.thrust::iterator_adaptor.135"*
  %3 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %3 to %"class.thrust::iterator_adaptor.135"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.135"* %2, %"class.thrust::iterator_adaptor.135"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  store %"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.135"* %y, %"class.thrust::iterator_adaptor.135"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.135"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.135"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  store %"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.63"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp7 = alloca %"class.thrust::device_ptr.69", align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.63"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.66"* %m_begin to %"class.thrust::iterator_adaptor.67"*
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.67"* %0)
  %1 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.63"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %m_allocator, %"struct.thrust::pair"* %3, i64 %call3)
  %m_begin6 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrINS_4pairIaaEEEC2IS2_EEPT_(%"class.thrust::device_ptr.69"* %agg.tmp7, %"struct.thrust::pair"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive9, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.66"* %ref.tmp, %"struct.thrust::pair"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.66"* %m_begin6 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.66"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !104
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8capacityEv(%"class.thrust::detail::vector_base.62"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.63"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::vector_base.62"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.63"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8allocateEm(%"class.thrust::detail::contiguous_storage.63"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %ref.tmp8 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.69", align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8allocateERS5_m(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.66"* %ref.tmp, %"struct.thrust::pair"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.66"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.66"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !104
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin7 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrINS_4pairIaaEEEC2IS2_EEPT_(%"class.thrust::device_ptr.69"* %agg.tmp9, %"struct.thrust::pair"* null)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive11, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.66"* %ref.tmp8, %"struct.thrust::pair"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.66"* %m_begin7 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.66"* %ref.tmp8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size13 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size13, align 8, !tbaa !104
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_(%"class.thrust::detail::contiguous_storage.63"* %this, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive8, align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this9 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this9, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp11 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to %"class.thrust::iterator_adaptor.67"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.67"* %6)
  %7 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::device_ptr.69"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp10, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive13, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive15, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive18, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair"* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIaaEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %m_allocator, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10, %"struct.thrust::pair"* %11)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair"* %call20, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive25, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.66"* %retval, %"struct.thrust::pair"* %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %13) #5
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive30, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive31, align 8
  ret %"struct.thrust::pair"* %14
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.63"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.66"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.66"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.66"* %i, %"class.thrust::detail::normal_iterator.66"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.63"* %this, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this10 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this10, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.66"* %first to %"class.thrust::iterator_adaptor.67"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.67"* %0)
  %1 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.66"* %last to %"class.thrust::iterator_facade.68"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.66"* %first to %"class.thrust::iterator_facade.68"*
  %call11 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.68"* dereferenceable(1) %3, %"class.thrust::iterator_facade.68"* dereferenceable(1) %4)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive13, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive14, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIaaEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %m_allocator, %"struct.thrust::pair"* %5, i64 %call11)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.63"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !104
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.69", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.67"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.67"*, align 8
  store %"class.thrust::iterator_adaptor.67"* %this, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.67"*, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.69"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.69", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEE10deallocateENS_10device_ptrIS2_EEm(%"class.thrust::device_malloc_allocator.64"* %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEE10deallocateENS_10device_ptrIS2_EEm(%"class.thrust::device_malloc_allocator.64"* %this, %"struct.thrust::pair"* %p.coerce, i64 %cnt) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.69", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %cnt.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.64"* %this, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8
  call void @_ZN6thrust10device_ptrIvEC2INS_4pairIaaEEEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %agg.tmp, %"class.thrust::device_ptr.69"* dereferenceable(8) %p)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive5, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust11device_freeENS_10device_ptrIvEE(i8* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIvEC2INS_4pairIaaEEEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.115"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  store %"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.115"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %other, %"class.thrust::device_ptr.69"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.115"*, %"class.thrust::device_ptr.115"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.115"* %this1 to %"class.thrust::pointer.116"*
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %other.addr, align 8
  call void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIaaEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE(%"class.thrust::pointer.116"* %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIaaEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE(%"class.thrust::pointer.116"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.116"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  store %"class.thrust::pointer.116"* %this, %"class.thrust::pointer.116"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %other, %"class.thrust::device_ptr.69"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.116"*, %"class.thrust::pointer.116"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.116"* %this1 to %"class.thrust::iterator_adaptor.117"*
  %2 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.69"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIaaEEEEE3getES5_(%"struct.thrust::pair"* %5)
  %6 = bitcast %"struct.thrust::pair"* %call to i8*
  store i8* %6, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_(%"class.thrust::iterator_adaptor.117"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIaaEEEEE3getES5_(%"struct.thrust::pair"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.69"* %ptr to %"class.thrust::pointer.70"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv(%"class.thrust::pointer.70"* %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv(%"class.thrust::pointer.70"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.70"*, align 8
  store %"class.thrust::pointer.70"* %this, %"class.thrust::pointer.70"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.70"*, %"class.thrust::pointer.70"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.70"* %this1 to %"class.thrust::iterator_adaptor.71"*
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.71"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.71"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.71"*, align 8
  store %"class.thrust::iterator_adaptor.71"* %this, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.71"*, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.63"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8max_sizeERKS5_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8max_sizeERKS5_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIaaEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIaaEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8allocateERS5_m(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIaaEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.137", align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust10device_ptrIKNS_4pairIaaEEEC2IS2_EEPT_(%"class.thrust::device_ptr.137"* %agg.tmp, %"struct.thrust::pair"* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive1, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEE8allocateEmNS_10device_ptrIKS2_EE(%"class.thrust::device_malloc_allocator.64"* %0, i64 %1, %"struct.thrust::pair"* %2)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive7, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  ret %"struct.thrust::pair"* %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust23device_malloc_allocatorINS_4pairIaaEEE8allocateEmNS_10device_ptrIKS2_EE(%"class.thrust::device_malloc_allocator.64"* %this, i64 %cnt, %"struct.thrust::pair"* %.coerce) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %0 = alloca %"class.thrust::device_ptr.137", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %cnt.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %0, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.64"* %this, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8
  %1 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK6thrust23device_malloc_allocatorINS_4pairIaaEEE8max_sizeEv(%"class.thrust::device_malloc_allocator.64"* %this3)
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %2 = bitcast i8* %exception to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %2) #5
  call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt9bad_alloc to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD1Ev to i8*)) #15
  unreachable

if.end:                                           ; preds = %entry
  %3 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call4 = call %"struct.thrust::pair"* @_ZN6thrust13device_mallocINS_4pairIaaEEEENS_10device_ptrIT_EEm(i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %call4, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive9, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKNS_4pairIaaEEEC2IS2_EEPT_(%"class.thrust::device_ptr.137"* %this, %"struct.thrust::pair"* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  %ptr.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::device_ptr.137"* %this, %"class.thrust::device_ptr.137"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %ptr, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.137"* %this1 to %"class.thrust::pointer.138"*
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_(%"class.thrust::pointer.138"* %0, %"struct.thrust::pair"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust23device_malloc_allocatorINS_4pairIaaEEE8max_sizeEv(%"class.thrust::device_malloc_allocator.64"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  store %"class.thrust::device_malloc_allocator.64"* %this, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %this.addr, align 8
  %call = call i64 @_ZNSt14numeric_limitsImE3maxEv() #5
  %div = udiv i64 %call, 2
  ret i64 %div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust13device_mallocINS_4pairIaaEEEENS_10device_ptrIT_EEm(i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %n.addr = alloca i64, align 8
  %s = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %coerce = alloca %"class.thrust::pointer.141", align 8
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6mallocINS_4pairIaaEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.141"* %coerce)
  call void @_ZN6thrust10device_ptrINS_4pairIaaEEEC2IS2_EEPT_(%"class.thrust::device_ptr.69"* %retval, %"struct.thrust::pair"* %call2)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.end(i64 1, i8* %3) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %4
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6mallocINS_4pairIaaEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.141", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::pair"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIaaEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.141"* dereferenceable(8) %ref.tmp)
  store %"struct.thrust::pair"* %call4, %"struct.thrust::pair"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.141"* %retval, %"struct.thrust::pair"* %4)
  %5 = bitcast %"struct.thrust::pair"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive5, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  ret %"struct.thrust::pair"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.141"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.141"*, align 8
  store %"class.thrust::pointer.141"* %this, %"class.thrust::pointer.141"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.141"* %this1 to %"class.thrust::iterator_adaptor.142"*
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.142"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.141"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.141"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  store %"class.thrust::pointer.141"* %ptr, %"class.thrust::pointer.141"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair"* %3)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIaaEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 2, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to %"struct.thrust::pair"*
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.141"* %retval, %"struct.thrust::pair"* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.141"* %this, %"struct.thrust::pair"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.141"*, align 8
  %other.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::pointer.141"* %this, %"class.thrust::pointer.141"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %other, %"struct.thrust::pair"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.141"* %this1 to %"class.thrust::iterator_adaptor.142"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.142"* %0, %"struct.thrust::pair"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.141"* %ptr)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.142"* %this, %"struct.thrust::pair"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.142"*, align 8
  %iter.addr = alloca %"struct.thrust::pair"**, align 8
  store %"class.thrust::iterator_adaptor.142"* %this, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"** %iter, %"struct.thrust::pair"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.142"*, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.142"* %this1 to %"class.thrust::iterator_facade.143"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !109
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.142"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.142"*, align 8
  store %"class.thrust::iterator_adaptor.142"* %this, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.142"*, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_(%"class.thrust::pointer.138"* %this, %"struct.thrust::pair"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.138"*, align 8
  %other.addr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::pointer.138"* %this, %"class.thrust::pointer.138"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %other, %"struct.thrust::pair"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.138"*, %"class.thrust::pointer.138"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.138"* %this1 to %"class.thrust::iterator_adaptor.139"*
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %other.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %1, %"struct.thrust::pair"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.139"* %0, %"struct.thrust::pair"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.139"* %this, %"struct.thrust::pair"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.139"*, align 8
  %iter.addr = alloca %"struct.thrust::pair"**, align 8
  store %"class.thrust::iterator_adaptor.139"* %this, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"** %iter, %"struct.thrust::pair"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.139"*, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.139"* %this1 to %"class.thrust::iterator_facade.140"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !111
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIaaEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp8 to i8*
  %7 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive9, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive11, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive14, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIaaEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %1, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive20, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  ret %"struct.thrust::pair"* %11
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIaaEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIaaEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive9, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive11, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive14, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10, %"struct.thrust::pair"* %11)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive20, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  ret %"struct.thrust::pair"* %12
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  %call8 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call8)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call9 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call10 = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %2, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 0
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 1
  store %"struct.thrust::execution_policy.120"* %10, %"struct.thrust::execution_policy.120"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.132"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp12 to i8*
  %17 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive13, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive15, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive18, i32 0, i32 0
  %20 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %11, %"struct.thrust::pair"* %18, %"struct.thrust::pair"* %19, %"struct.thrust::pair"* %20)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair"* %call20, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive25, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  ret %"struct.thrust::pair"* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIaaEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIaaEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call7 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp8 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp9 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp10 to i8*
  %8 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive11, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp9, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive13, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp10, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive16, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive17, align 8
  %call18 = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair"* %14, %"struct.thrust::pair"* %15, %"struct.thrust::pair"* %16)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair"* %call18, %"struct.thrust::pair"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive23, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive24, align 8
  ret %"struct.thrust::pair"* %17
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.69", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive10, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp8, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive12, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive15, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive16, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %17, %"struct.thrust::pair"* %18)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive21, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp10 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.134"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.134"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp7, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive12, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive14, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive17, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %17, %"struct.thrust::pair"* %18)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive23, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive24, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp12 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp13 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.134"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp9 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.134"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive14, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive16, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive19, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive20, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %17, %"struct.thrust::pair"* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive25, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.69", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.134"* %end to %"class.thrust::iterator_facade.136"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.134"* %begin to %"class.thrust::iterator_facade.136"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.136"* dereferenceable(1) %7, %"class.thrust::iterator_facade.136"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.134"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp9 to i8*
  %13 = bitcast %"class.thrust::device_ptr.69"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive10, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive13, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive14, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair"* %14, i64 %11, %"struct.thrust::pair"* %15)
  %16 = bitcast %"class.thrust::device_ptr.69"* %result to %"class.thrust::iterator_facade.72"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call15 = call %"struct.thrust::pair"* @_ZN6thrustplINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.72"* dereferenceable(1) %16, i64 %17)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair"* %call15, %"struct.thrust::pair"** %coerce.dive18, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive20, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIaaEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair"* %first.coerce, i64 %n, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %result = alloca %"class.thrust::device_ptr.69", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %coerce = alloca %"class.thrust::device_reference.144", align 8
  %src = alloca i8*, align 8
  %ref.tmp15 = alloca %"struct.thrust::pair"*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %result, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::device_ptr.69"* %result to %"class.thrust::iterator_facade.72"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv(%"class.thrust::iterator_facade.72"* %1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.144", %"class.thrust::device_reference.144"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive9, align 8
  %2 = bitcast %"class.thrust::device_reference.144"* %coerce to %"class.thrust::reference.145"*
  %call10 = call %"struct.thrust::pair"* @_ZNK6thrust9referenceINS_4pairIaaEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv(%"class.thrust::reference.145"* %2)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair"* %call10, %"struct.thrust::pair"** %coerce.dive13, align 8
  %call14 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIaaEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"class.thrust::device_ptr.69"* dereferenceable(8) %ref.tmp)
  %3 = bitcast %"struct.thrust::pair"* %call14 to i8*
  store i8* %3, i8** %dst, align 8, !tbaa !1
  %4 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to %"class.thrust::iterator_facade.136"*
  %call16 = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.136"* %5)
  store %"struct.thrust::pair"* %call16, %"struct.thrust::pair"** %ref.tmp15, align 8, !tbaa !1
  %call17 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair"** dereferenceable(8) %ref.tmp15)
  %6 = bitcast %"struct.thrust::pair"* %call17 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call18 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call18 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %11, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %10, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %13)
  store i32 %call21, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system122 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %15, i32 0, i32 0
  %ref23 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system122, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.88"* %ref23 to %"struct.thrust::detail::execution_policy_base.85"*
  %call24 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call24 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system225 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %18, i32 0, i32 1
  %ref26 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system225, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.120"* %ref26 to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call28 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %17, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call28, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 2
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrustplINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.72"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.72"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::device_ptr.69", align 8
  store %"class.thrust::iterator_facade.72"* %i, %"class.thrust::iterator_facade.72"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::device_ptr.69"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.72"*, %"class.thrust::iterator_facade.72"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.72"* %1 to %"class.thrust::device_ptr.69"*
  %3 = bitcast %"class.thrust::device_ptr.69"* %tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.69"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::device_ptr.69"* %tmp to %"class.thrust::iterator_facade.72"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.72"* %5, i64 %6)
  %7 = bitcast %"class.thrust::device_ptr.69"* %retval to i8*
  %8 = bitcast %"class.thrust::device_ptr.69"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.69"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  ret %"struct.thrust::pair"* %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIaaEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"class.thrust::device_ptr.69"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  store %"class.thrust::device_ptr.69"* %ptr, %"class.thrust::device_ptr.69"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIaaEEEEE3getES5_(%"struct.thrust::pair"* %3)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv(%"class.thrust::iterator_facade.72"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.144", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.72"*, align 8
  store %"class.thrust::iterator_facade.72"* %this, %"class.thrust::iterator_facade.72"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.72"*, %"class.thrust::iterator_facade.72"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.72"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIaaEEEEEENT_9referenceERKS6_(%"class.thrust::device_ptr.69"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.144", %"class.thrust::device_reference.144"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.144", %"class.thrust::device_reference.144"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust9referenceINS_4pairIaaEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv(%"class.thrust::reference.145"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %this.addr = alloca %"class.thrust::reference.145"*, align 8
  store %"class.thrust::reference.145"* %this, %"class.thrust::reference.145"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.145"*, %"class.thrust::reference.145"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.69"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.69"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"struct.thrust::pair"**, align 8
  store %"struct.thrust::pair"** %ptr, %"struct.thrust::pair"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %ptr.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %0, align 8, !tbaa !1
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsIPKNS_4pairIaaEEE3getES5_(%"struct.thrust::pair"* %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.136"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  store %"class.thrust::iterator_facade.136"* %this, %"class.thrust::iterator_facade.136"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.136"* %this1)
  %call2 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENT_9referenceERKS9_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %call)
  ret %"struct.thrust::pair"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIaaEEEEEENT_9referenceERKS6_(%"class.thrust::device_ptr.69"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.144", align 8
  %f.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  store %"class.thrust::device_ptr.69"* %f, %"class.thrust::device_ptr.69"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %0 to %"class.thrust::pointer.70"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv(%"class.thrust::pointer.70"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.144", %"class.thrust::device_reference.144"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.144", %"class.thrust::device_reference.144"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.72"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.72"*, align 8
  store %"class.thrust::iterator_facade.72"* %this, %"class.thrust::iterator_facade.72"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.72"*, %"class.thrust::iterator_facade.72"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.72"* %this1 to %"class.thrust::device_ptr.69"*
  ret %"class.thrust::device_ptr.69"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv(%"class.thrust::pointer.70"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.144", align 8
  %this.addr = alloca %"class.thrust::pointer.70"*, align 8
  store %"class.thrust::pointer.70"* %this, %"class.thrust::pointer.70"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.70"*, %"class.thrust::pointer.70"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.70"* %this1 to %"class.thrust::device_ptr.69"*
  call void @_ZN6thrust16device_referenceINS_4pairIaaEEEC2ERKNS_10device_ptrIS2_EE(%"class.thrust::device_reference.144"* %retval, %"class.thrust::device_ptr.69"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.144", %"class.thrust::device_reference.144"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceINS_4pairIaaEEEC2ERKNS_10device_ptrIS2_EE(%"class.thrust::device_reference.144"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.144"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  store %"class.thrust::device_reference.144"* %this, %"class.thrust::device_reference.144"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %ptr, %"class.thrust::device_ptr.69"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.144"*, %"class.thrust::device_reference.144"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.144"* %this1 to %"class.thrust::reference.145"*
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIaaEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_(%"class.thrust::reference.145"* %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIaaEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_(%"class.thrust::reference.145"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.145"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  store %"class.thrust::reference.145"* %this, %"class.thrust::reference.145"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %ptr, %"class.thrust::device_ptr.69"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.145"*, %"class.thrust::reference.145"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.145", %"class.thrust::reference.145"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsIPKNS_4pairIaaEEE3getES5_(%"struct.thrust::pair"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::pair"* %ptr, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %ptr.addr, align 8, !tbaa !1
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENT_9referenceERKS9_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  store %"class.thrust::detail::normal_iterator.134"* %f, %"class.thrust::detail::normal_iterator.134"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %0 to %"class.thrust::iterator_adaptor.135"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.135"* %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.136"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  store %"class.thrust::iterator_facade.136"* %this, %"class.thrust::iterator_facade.136"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.136"* %this1 to %"class.thrust::detail::normal_iterator.134"*
  ret %"class.thrust::detail::normal_iterator.134"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.135"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  store %"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.72"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.72"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.72"* %this, %"class.thrust::iterator_facade.72"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.72"*, %"class.thrust::iterator_facade.72"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.72"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIaaEEEEEEvRT_NS6_15difference_typeE(%"class.thrust::device_ptr.69"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.72"* %this1)
  ret %"class.thrust::device_ptr.69"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIaaEEEEEEvRT_NS6_15difference_typeE(%"class.thrust::device_ptr.69"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.69"* %f, %"class.thrust::device_ptr.69"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %0 to %"class.thrust::iterator_adaptor.71"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl(%"class.thrust::iterator_adaptor.71"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.72"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.72"*, align 8
  store %"class.thrust::iterator_facade.72"* %this, %"class.thrust::iterator_facade.72"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.72"*, %"class.thrust::iterator_facade.72"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.72"* %this1 to %"class.thrust::device_ptr.69"*
  ret %"class.thrust::device_ptr.69"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl(%"class.thrust::iterator_adaptor.71"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.71"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.71"* %this, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.71"*, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !105
  %add.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %1, i64 %0
  store %"struct.thrust::pair"* %add.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !105
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIaaEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.66"* %i, %"class.thrust::detail::normal_iterator.66"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.66"* %i, %"class.thrust::detail::normal_iterator.66"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.66"* %1 to %"class.thrust::iterator_facade.68"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.68"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.68"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.68"* %this, %"class.thrust::iterator_facade.68"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.68"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.68"* %this1)
  ret %"class.thrust::detail::normal_iterator.66"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.66"* %f, %"class.thrust::detail::normal_iterator.66"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.66"* %0 to %"class.thrust::iterator_adaptor.67"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.67"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.68"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  store %"class.thrust::iterator_facade.68"* %this, %"class.thrust::iterator_facade.68"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.68"* %this1 to %"class.thrust::detail::normal_iterator.66"*
  ret %"class.thrust::detail::normal_iterator.66"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.67"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.67"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.67"* %this, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.67"*, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.69"* %m_iterator to %"class.thrust::iterator_facade.72"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.72"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIaaEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.69", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIaaEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.68"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.68"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  store %"class.thrust::iterator_facade.68"* %lhs, %"class.thrust::iterator_facade.68"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.68"* %rhs, %"class.thrust::iterator_facade.68"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.68"* %0 to %"class.thrust::detail::normal_iterator.66"*
  %2 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.68"* %2 to %"class.thrust::detail::normal_iterator.66"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIaaEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.69", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.64"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::device_ptr.69", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.64"* %a, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.64"*, %"class.thrust::device_malloc_allocator.64"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIaaEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.64"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.69"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive9, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %first = alloca %"class.thrust::device_ptr.69", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp4 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call3 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call3 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.69"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive6, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  %call8 = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair"* %5, i64 %4)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %call8, %"struct.thrust::pair"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive13, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive14, align 8
  ret %"struct.thrust::pair"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %first = alloca %"class.thrust::device_ptr.69", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"struct.thrust::pair"* %4, i64 %3)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive11, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  ret %"struct.thrust::pair"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIaaEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.69", align 8
  %first = alloca %"class.thrust::device_ptr.69", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp6 = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp7 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce15 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp17 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp18 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp19 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp20 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp21 = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp28 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp31 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp34 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp35 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp36 = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp37 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp41 = alloca i32, align 4
  %agg.tmp.ensured44 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp45 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp50 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp51 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp52 = alloca %"class.thrust::device_ptr.69", align 8
  %agg.tmp53 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive3 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp5 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp6 to i8*
  %12 = bitcast %"class.thrust::device_ptr.69"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp7 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp6, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive9, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  %call11 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"struct.thrust::pair"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call11, i64* %17, align 4
  %call12 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call13 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call13, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call14 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce15, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive16 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call14, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call14, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp18, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp20 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp21 to i8*
  %30 = bitcast %"class.thrust::device_ptr.69"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp22 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp21, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive24, i32 0, i32 0
  %34 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive25, align 8
  %call26 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp18, %"struct.thrust::pair"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp17 to i64*
  store i64 %call26, i64* %35, align 4
  %call27 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce15, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp17)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call29 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call29, i64* %ref.tmp28, align 8, !tbaa !13
  %call30 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp28)
  store i64 %call30, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call32 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call32 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call33 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp31, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call33)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp35 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp36 to i8*
  %45 = bitcast %"class.thrust::device_ptr.69"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp37 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive38 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp36, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive39, i32 0, i32 0
  %49 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive40, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp31, %"struct.thrust::pair"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call42 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call42, i32* %ref.tmp41, align 4, !tbaa !11
  %call43 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp41)
  store i32 %call43, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv46 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv47 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call48 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call48 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call49 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp45, i64 %conv46, i64 %conv47, i64 0, %struct.CUstream_st* %call49)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp51 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp52 to i8*
  %61 = bitcast %"class.thrust::device_ptr.69"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp53 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive54 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp52, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive55, i32 0, i32 0
  %65 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive56, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured44, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp45, %"struct.thrust::pair"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured44) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::device_ptr.69"* %first to %"class.thrust::iterator_facade.72"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call57 = call %"struct.thrust::pair"* @_ZN6thrustplINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.72"* dereferenceable(1) %66, i64 %67)
  %coerce.dive58 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive59, i32 0, i32 0
  store %"struct.thrust::pair"* %call57, %"struct.thrust::pair"** %coerce.dive60, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive61 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %retval, i32 0, i32 0
  %coerce.dive62 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive61, i32 0, i32 0
  %coerce.dive63 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive62, i32 0, i32 0
  %72 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive63, align 8
  ret %"struct.thrust::pair"* %72
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %f.addr = alloca %"struct.thrust::detail::allocator_traits_detail::gozer"*, align 8
  store %"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::allocator_traits_detail::gozer"* %f, %"struct.thrust::detail::allocator_traits_detail::gozer"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::wrapped_function.146"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::allocator_traits_detail::gozer"*, %"struct.thrust::detail::allocator_traits_detail::gozer"** %f.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %t0, i32* dereferenceable(4) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.147", align 8
  %t0.addr = alloca i32*, align 8
  %t1.addr = alloca i32*, align 8
  store i32* %t0, i32** %t0.addr, align 8, !tbaa !7
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  %0 = load i32*, i32** %t0.addr, align 8
  %1 = load i32*, i32** %t1.addr, align 8
  call void @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_(%"class.thrust::tuple.147"* %retval, i32* dereferenceable(4) %0, i32* dereferenceable(4) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive to { i32*, i32* }*
  %3 = load { i32*, i32* }, { i32*, i32* }* %2, align 8
  ret { i32*, i32* } %3
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %k) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.147"*, align 8
  %k.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::tuple.147"* %this, %"class.thrust::tuple.147"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %k, %"struct.thrust::pair.82"** %k.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.147"*, %"class.thrust::tuple.147"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %k.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 0, i32 0
  %1 = load i32, i32* %first, align 4, !tbaa !24
  %2 = bitcast %"class.thrust::tuple.147"* %this1 to %"struct.thrust::detail::cons.148"*
  %head = getelementptr inbounds %"struct.thrust::detail::cons.148", %"struct.thrust::detail::cons.148"* %2, i32 0, i32 0
  %ref = load i32*, i32** %head, align 8, !tbaa !7
  store i32 %1, i32* %ref, align 4, !tbaa !11
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %k.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %3, i32 0, i32 1
  %4 = load i32, i32* %second, align 4, !tbaa !28
  %5 = bitcast %"class.thrust::tuple.147"* %this1 to %"struct.thrust::detail::cons.148"*
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.148", %"struct.thrust::detail::cons.148"* %5, i32 0, i32 1
  %head2 = getelementptr inbounds %"struct.thrust::detail::cons.149", %"struct.thrust::detail::cons.149"* %tail, i32 0, i32 0
  %ref3 = load i32*, i32** %head2, align 8, !tbaa !7
  store i32 %4, i32* %ref3, align 4, !tbaa !11
  ret %"class.thrust::tuple.147"* %this1
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.69", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.69"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp5)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, i64 %num_groups, i64 %group_size, i64 %heap_size) #8 comdat {
entry:
  %num_groups.addr = alloca i64, align 8
  %group_size.addr = alloca i64, align 8
  %heap_size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  store i64 %group_size, i64* %group_size.addr, align 8, !tbaa !13
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  %0 = load i64, i64* %group_size.addr, align 8, !tbaa !13
  %1 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %call = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_3conEmm(i64 %0, i64 %1)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %3 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %2, i32 0, i32 0
  %4 = extractvalue { i64, i64 } %call, 0
  store i64 %4, i64* %3, align 4
  %5 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %2, i32 0, i32 1
  %6 = extractvalue { i64, i64 } %call, 1
  store i64 %6, i64* %5, align 4
  %7 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %9 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %8, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i64 %10, i64 %12, i64 %7)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %n, i32 %narrow_grid_size) #1 comdat {
entry:
  %n.addr = alloca i64, align 8
  %narrow_grid_size.addr = alloca i32, align 4
  %threshold = alloca i64, align 8
  %result = alloca i8, align 1
  %narrow_n = alloca i32, align 4
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i32 %narrow_grid_size, i32* %narrow_grid_size.addr, align 4, !tbaa !11
  %0 = bitcast i64* %threshold to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  store i64 4294967295, i64* %threshold, align 8, !tbaa !13
  call void @llvm.lifetime.start(i64 1, i8* %result) #5
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load i64, i64* %threshold, align 8, !tbaa !13
  %cmp = icmp sgt i64 %1, %2
  %frombool = zext i1 %cmp to i8
  store i8 %frombool, i8* %result, align 1, !tbaa !75
  %3 = load i8, i8* %result, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %3 to i1
  br i1 %tobool, label %if.end3, label %if.then

if.then:                                          ; preds = %entry
  %4 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %5 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %6 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %sub = sub i32 %6, 1
  %7 = load i32, i32* %narrow_grid_size.addr, align 4, !tbaa !11
  %add = add i32 %sub, %7
  %8 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %cmp1 = icmp ult i32 %add, %8
  br i1 %cmp1, label %if.then2, label %if.end

if.then2:                                         ; preds = %if.then
  store i8 1, i8* %result, align 1, !tbaa !75
  br label %if.end

if.end:                                           ; preds = %if.then2, %if.then
  %9 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  br label %if.end3

if.end3:                                          ; preds = %if.end, %entry
  %10 = load i8, i8* %result, align 1, !tbaa !75, !range !77
  %tobool4 = trunc i8 %10 to i1
  call void @llvm.lifetime.end(i64 1, i8* %result) #5
  %11 = bitcast i64* %threshold to i8*
  call void @llvm.lifetime.end(i64 8, i8* %11) #5
  ret i1 %tobool4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %t0, i64* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.152", align 8
  %t0.addr = alloca i64*, align 8
  %t1.addr = alloca i64*, align 8
  store i64* %t0, i64** %t0.addr, align 8, !tbaa !7
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  %0 = load i64*, i64** %t0.addr, align 8
  %1 = load i64*, i64** %t1.addr, align 8
  call void @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_(%"class.thrust::tuple.152"* %retval, i64* dereferenceable(8) %0, i64* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive to { i64*, i64* }*
  %3 = load { i64*, i64* }, { i64*, i64* }* %2, align 8
  ret { i64*, i64* } %3
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %k) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.152"*, align 8
  %k.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::tuple.152"* %this, %"class.thrust::tuple.152"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %k, %"struct.thrust::pair.82"** %k.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.152"*, %"class.thrust::tuple.152"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %k.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 0, i32 0
  %1 = load i32, i32* %first, align 4, !tbaa !24
  %conv = sext i32 %1 to i64
  %2 = bitcast %"class.thrust::tuple.152"* %this1 to %"struct.thrust::detail::cons.153"*
  %head = getelementptr inbounds %"struct.thrust::detail::cons.153", %"struct.thrust::detail::cons.153"* %2, i32 0, i32 0
  %ref = load i64*, i64** %head, align 8, !tbaa !7
  store i64 %conv, i64* %ref, align 8, !tbaa !13
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %k.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %3, i32 0, i32 1
  %4 = load i32, i32* %second, align 4, !tbaa !28
  %conv2 = sext i32 %4 to i64
  %5 = bitcast %"class.thrust::tuple.152"* %this1 to %"struct.thrust::detail::cons.153"*
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.153", %"struct.thrust::detail::cons.153"* %5, i32 0, i32 1
  %head3 = getelementptr inbounds %"struct.thrust::detail::cons.154", %"struct.thrust::detail::cons.154"* %tail, i32 0, i32 0
  %ref4 = load i64*, i64** %head3, align 8, !tbaa !7
  store i64 %conv2, i64* %ref4, align 8, !tbaa !13
  ret %"class.thrust::tuple.152"* %this1
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.69", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.69"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp5)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %lhs, i64* dereferenceable(8) %rhs) #1 comdat {
entry:
  %lhs.addr = alloca i64*, align 8
  %rhs.addr = alloca i64*, align 8
  store i64* %lhs, i64** %lhs.addr, align 8, !tbaa !7
  store i64* %rhs, i64** %rhs.addr, align 8, !tbaa !7
  %0 = load i64*, i64** %rhs.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  %2 = load i64*, i64** %lhs.addr, align 8
  %3 = load i64, i64* %2, align 8, !tbaa !13
  %cmp = icmp slt i64 %1, %3
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %4 = load i64*, i64** %rhs.addr, align 8
  %5 = load i64, i64* %4, align 8, !tbaa !13
  br label %cond.end

cond.false:                                       ; preds = %entry
  %6 = load i64*, i64** %lhs.addr, align 8
  %7 = load i64, i64* %6, align 8, !tbaa !13
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i64 [ %5, %cond.true ], [ %7, %cond.false ]
  ret i64 %cond
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %x, i64 %y) #9 comdat {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i64, align 8
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  %0 = load i64, i64* %x.addr, align 8, !tbaa !13
  %1 = load i64, i64* %y.addr, align 8, !tbaa !13
  %sub = sub nsw i64 %1, 1
  %add = add nsw i64 %0, %sub
  %2 = load i64, i64* %y.addr, align 8, !tbaa !13
  %div = sdiv i64 %add, %2
  ret i64 %div
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.69", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.69"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* noalias sret %agg.result, i64 %num_groups, i64 %group_size, i64 %heap_size, %struct.CUstream_st* %stream) #8 comdat {
entry:
  %num_groups.addr = alloca i64, align 8
  %group_size.addr = alloca i64, align 8
  %heap_size.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  store i64 %group_size, i64* %group_size.addr, align 8, !tbaa !13
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %1 = load i64, i64* %group_size.addr, align 8, !tbaa !13
  %2 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %call = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_3conEmm(i64 %1, i64 %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %4 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { i64, i64 } %call, 0
  store i64 %5, i64* %4, align 4
  %6 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { i64, i64 } %call, 1
  store i64 %7, i64* %6, align 4
  %8 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %10 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %9, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %9, i32 0, i32 1
  %13 = load i64, i64* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.result, %struct.CUstream_st* %0, i64 %11, i64 %13, i64 %8)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::future"*, align 8
  %e = alloca i32, align 4
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::system::cuda::detail::bulk_::future"* %this, %"class.thrust::system::cuda::detail::bulk_::future"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::future"*, %"class.thrust::system::cuda::detail::bulk_::future"** %this.addr, align 8
  %call = invoke zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_6futureIvE5validEv(%"class.thrust::system::cuda::detail::bulk_::future"* %this1)
          to label %invoke.cont unwind label %terminate.lpad

invoke.cont:                                      ; preds = %entry
  br i1 %call, label %if.then, label %if.end21

if.then:                                          ; preds = %invoke.cont
  %0 = bitcast i32* %e to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %m_event = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 1
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %m_event, align 8, !tbaa !113
  %call3 = invoke i32 @cudaEventDestroy(%struct.CUevent_st* %1)
          to label %invoke.cont2 unwind label %terminate.lpad

invoke.cont2:                                     ; preds = %if.then
  store i32 %call3, i32* %e, align 4, !tbaa !73
  %2 = load i32, i32* %e, align 4, !tbaa !73
  %tobool = icmp ne i32 %2, 0
  br i1 %tobool, label %if.then4, label %if.end

if.then4:                                         ; preds = %invoke.cont2
  %3 = load i32, i32* %e, align 4, !tbaa !73
  %call6 = invoke i8* @cudaGetErrorString(i32 %3)
          to label %invoke.cont5 unwind label %lpad

invoke.cont5:                                     ; preds = %if.then4
  %call8 = invoke i32 (i8*, ...) @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.42, i32 0, i32 0), i8* %call6)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %invoke.cont5
  br label %if.end

lpad:                                             ; preds = %invoke.cont15, %if.then14, %if.then10, %invoke.cont5, %if.then4
  %4 = landingpad { i8*, i32 }
          catch i8* null
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  %7 = bitcast i32* %e to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %terminate.handler

if.end:                                           ; preds = %invoke.cont7, %invoke.cont2
  %m_owns_stream = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 2
  %8 = load i8, i8* %m_owns_stream, align 8, !tbaa !115, !range !77
  %tobool9 = trunc i8 %8 to i1
  br i1 %tobool9, label %if.then10, label %if.end20

if.then10:                                        ; preds = %if.end
  %m_stream = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 0
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %m_stream, align 8, !tbaa !116
  %call12 = invoke i32 @cudaStreamDestroy(%struct.CUstream_st* %9)
          to label %invoke.cont11 unwind label %lpad

invoke.cont11:                                    ; preds = %if.then10
  store i32 %call12, i32* %e, align 4, !tbaa !73
  %10 = load i32, i32* %e, align 4, !tbaa !73
  %tobool13 = icmp ne i32 %10, 0
  br i1 %tobool13, label %if.then14, label %if.end19

if.then14:                                        ; preds = %invoke.cont11
  %11 = load i32, i32* %e, align 4, !tbaa !73
  %call16 = invoke i8* @cudaGetErrorString(i32 %11)
          to label %invoke.cont15 unwind label %lpad

invoke.cont15:                                    ; preds = %if.then14
  %call18 = invoke i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.43, i32 0, i32 0), i8* %call16)
          to label %invoke.cont17 unwind label %lpad

invoke.cont17:                                    ; preds = %invoke.cont15
  br label %if.end19

if.end19:                                         ; preds = %invoke.cont17, %invoke.cont11
  br label %if.end20

if.end20:                                         ; preds = %if.end19, %if.end
  %12 = bitcast i32* %e to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  br label %if.end21

if.end21:                                         ; preds = %if.end20, %invoke.cont
  ret void

terminate.lpad:                                   ; preds = %if.then, %entry
  %13 = landingpad { i8*, i32 }
          catch i8* null
  %14 = extractvalue { i8*, i32 } %13, 0
  call void @__clang_call_terminate(i8* %14) #13
  unreachable

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %lhs, i32* dereferenceable(4) %rhs) #1 comdat {
entry:
  %lhs.addr = alloca i32*, align 8
  %rhs.addr = alloca i32*, align 8
  store i32* %lhs, i32** %lhs.addr, align 8, !tbaa !7
  store i32* %rhs, i32** %rhs.addr, align 8, !tbaa !7
  %0 = load i32*, i32** %rhs.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  %2 = load i32*, i32** %lhs.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  %cmp = icmp ult i32 %1, %3
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %4 = load i32*, i32** %rhs.addr, align 8
  %5 = load i32, i32* %4, align 4, !tbaa !11
  br label %cond.end

cond.false:                                       ; preds = %entry
  %6 = load i32*, i32** %lhs.addr, align 8
  %7 = load i32, i32* %6, align 4, !tbaa !11
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %5, %cond.true ], [ %7, %cond.false ]
  ret i32 %cond
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %x, i32 %y) #9 comdat {
entry:
  %x.addr = alloca i32, align 4
  %y.addr = alloca i32, align 4
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  store i32 %y, i32* %y.addr, align 4, !tbaa !11
  %0 = load i32, i32* %x.addr, align 4, !tbaa !11
  %1 = load i32, i32* %y.addr, align 4, !tbaa !11
  %sub = sub i32 %1, 1
  %add = add i32 %0, %sub
  %2 = load i32, i32* %y.addr, align 4, !tbaa !11
  %div = udiv i32 %add, %2
  ret i32 %div
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.69", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.69"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_(%"class.thrust::tuple.147"* %this, i32* dereferenceable(4) %t0, i32* dereferenceable(4) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.147"*, align 8
  %t0.addr = alloca i32*, align 8
  %t1.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.147"* %this, %"class.thrust::tuple.147"** %this.addr, align 8, !tbaa !1
  store i32* %t0, i32** %t0.addr, align 8, !tbaa !7
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.147"*, %"class.thrust::tuple.147"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.147"* %this1 to %"struct.thrust::detail::cons.148"*
  %1 = load i32*, i32** %t0.addr, align 8
  %2 = load i32*, i32** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRjNS1_IS2_NS_9null_typeEEEEC2IjjKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.148"* %0, i32* dereferenceable(4) %1, i32* dereferenceable(4) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRjNS1_IS2_NS_9null_typeEEEEC2IjjKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.148"* %this, i32* dereferenceable(4) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.148"*, align 8
  %t1.addr = alloca i32*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.148"* %this, %"struct.thrust::detail::cons.148"** %this.addr, align 8, !tbaa !1
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.148"*, %"struct.thrust::detail::cons.148"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.148", %"struct.thrust::detail::cons.148"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %t1.addr, align 8
  store i32* %0, i32** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.148", %"struct.thrust::detail::cons.148"* %this1, i32 0, i32 1
  %1 = load i32*, i32** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRjNS_9null_typeEEC2IjEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.149"* %tail, i32* dereferenceable(4) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRjNS_9null_typeEEC2IjEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.149"* %this, i32* dereferenceable(4) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.149"*, align 8
  %t1.addr = alloca i32*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.149"* %this, %"struct.thrust::detail::cons.149"** %this.addr, align 8, !tbaa !1
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.149"*, %"struct.thrust::detail::cons.149"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.149", %"struct.thrust::detail::cons.149"* %this9, i32 0, i32 0
  %9 = load i32*, i32** %t1.addr, align 8
  store i32* %9, i32** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::device_ptr.69"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.155", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %a2, %"class.thrust::device_ptr.69"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.155"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure"* %agg.result, %"class.thrust::tuple.155"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_size, align 4, !tbaa !117
  ret i32 %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_size, align 4, !tbaa !120
  ret i32 %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* noalias sret %agg.result) #8 comdat {
entry:
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail14current_deviceEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEi(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %agg.result, i32 %call)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEi(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* noalias sret %agg.result, i32 %device_id) #8 comdat {
entry:
  %device_id.addr = alloca i32, align 4
  store i32 %device_id, i32* %device_id.addr, align 4, !tbaa !11
  %0 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEi(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %agg.result, i32 %0)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail14current_deviceEv() #8 comdat {
entry:
  %result = alloca i32, align 4
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 -1, i32* %result, align 4, !tbaa !11
  %call = call i32 @cudaGetDevice(i32* %result)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.33, i32 0, i32 0))
  %1 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp slt i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 38, i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.33, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %3) #5
  ret i32 %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEi(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* noalias sret %agg.result, i32 %device_id) #8 comdat {
entry:
  %device_id.addr = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  store i32 %device_id, i32* %device_id.addr, align 4, !tbaa !11
  %0 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %cmp = icmp sge i32 %0, 16
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail26device_properties_uncachedEi(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %agg.result, i32 %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %idxprom = sext i32 %2 to i64
  %arrayidx = getelementptr inbounds [16 x i8], [16 x i8]* @_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE16properties_exist, i64 0, i64 %idxprom
  %3 = load i8, i8* %arrayidx, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %3 to i1
  br i1 %tobool, label %if.end6, label %if.then1

if.then1:                                         ; preds = %if.end
  %4 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %idxprom2 = sext i32 %4 to i64
  %arrayidx3 = getelementptr inbounds [16 x %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"], [16 x %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"]* @_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE17device_properties, i64 0, i64 %idxprom2
  %5 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail26device_properties_uncachedEi(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp, i32 %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %arrayidx3 to i8*
  %7 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false), !tbaa.struct !123
  fence seq_cst
  %8 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %idxprom4 = sext i32 %8 to i64
  %arrayidx5 = getelementptr inbounds [16 x i8], [16 x i8]* @_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE16properties_exist, i64 0, i64 %idxprom4
  store i8 1, i8* %arrayidx5, align 1, !tbaa !75
  br label %if.end6

if.end6:                                          ; preds = %if.then1, %if.end
  %9 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %idxprom7 = sext i32 %9 to i64
  %arrayidx8 = getelementptr inbounds [16 x %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"], [16 x %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"]* @_ZZN6thrust6system4cuda6detail5bulk_6detail24device_properties_cachedEiE17device_properties, i64 0, i64 %idxprom7
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result to i8*
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %arrayidx8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 56, i32 8, i1 false), !tbaa.struct !123
  br label %return

return:                                           ; preds = %if.end6, %if.then
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail26device_properties_uncachedEi(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* noalias sret %agg.result, i32 %device_id) #8 comdat {
entry:
  %device_id.addr = alloca i32, align 4
  %error = alloca i32, align 4
  %temp = alloca i32, align 4
  store i32 %device_id, i32* %device_id.addr, align 4, !tbaa !11
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result to i8*
  call void @llvm.memset.p0i8.i64(i8* %0, i8 0, i64 56, i32 8, i1 false)
  %1 = bitcast i32* %error to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  store i32 38, i32* %error, align 4, !tbaa !73
  %major = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 0
  %2 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call = call i32 @cudaDeviceGetAttribute(i32* %major, i32 75, i32 %2)
  store i32 %call, i32* %error, align 4, !tbaa !73
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %3 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call1 = call i32 @cudaDeviceGetAttribute(i32* %arrayidx, i32 5, i32 %3)
  store i32 %call1, i32* %error, align 4, !tbaa !73
  %maxGridSize2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 1
  %arrayidx3 = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize2, i64 0, i64 1
  %4 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call4 = call i32 @cudaDeviceGetAttribute(i32* %arrayidx3, i32 6, i32 %4)
  store i32 %call4, i32* %error, align 4, !tbaa !73
  %maxGridSize5 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 1
  %arrayidx6 = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize5, i64 0, i64 2
  %5 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call7 = call i32 @cudaDeviceGetAttribute(i32* %arrayidx6, i32 7, i32 %5)
  store i32 %call7, i32* %error, align 4, !tbaa !73
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 2
  %6 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call8 = call i32 @cudaDeviceGetAttribute(i32* %maxThreadsPerBlock, i32 1, i32 %6)
  store i32 %call8, i32* %error, align 4, !tbaa !73
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 3
  %7 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call9 = call i32 @cudaDeviceGetAttribute(i32* %maxThreadsPerMultiProcessor, i32 39, i32 %7)
  store i32 %call9, i32* %error, align 4, !tbaa !73
  %minor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 4
  %8 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call10 = call i32 @cudaDeviceGetAttribute(i32* %minor, i32 76, i32 %8)
  store i32 %call10, i32* %error, align 4, !tbaa !73
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 5
  %9 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call11 = call i32 @cudaDeviceGetAttribute(i32* %multiProcessorCount, i32 16, i32 %9)
  store i32 %call11, i32* %error, align 4, !tbaa !73
  %regsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 6
  %10 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call12 = call i32 @cudaDeviceGetAttribute(i32* %regsPerBlock, i32 12, i32 %10)
  store i32 %call12, i32* %error, align 4, !tbaa !73
  %11 = bitcast i32* %temp to i8*
  call void @llvm.lifetime.start(i64 4, i8* %11) #5
  %12 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call13 = call i32 @cudaDeviceGetAttribute(i32* %temp, i32 8, i32 %12)
  store i32 %call13, i32* %error, align 4, !tbaa !73
  %13 = load i32, i32* %temp, align 4, !tbaa !11
  %conv = sext i32 %13 to i64
  %sharedMemPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 7
  store i64 %conv, i64* %sharedMemPerBlock, align 8, !tbaa !124
  %warpSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %agg.result, i32 0, i32 8
  %14 = load i32, i32* %device_id.addr, align 4, !tbaa !11
  %call14 = call i32 @cudaDeviceGetAttribute(i32* %warpSize, i32 10, i32 %14)
  store i32 %call14, i32* %error, align 4, !tbaa !73
  %15 = load i32, i32* %error, align 4, !tbaa !73
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %15, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.32, i32 0, i32 0))
  %16 = bitcast i32* %temp to i8*
  call void @llvm.lifetime.end(i64 4, i8* %16) #5
  %17 = bitcast i32* %error to i8*
  call void @llvm.lifetime.end(i64 4, i8* %17) #5
  ret void
}

; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #2

declare i32 @cudaDeviceGetAttribute(i32*, i32, i32) #3

declare i32 @cudaGetDevice(i32*) #3

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attributes, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties) #8 comdat {
entry:
  %attributes.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function", align 1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attributes, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyINS4_25cuda_launch_config_detail4util13zero_functionImEEEEmRKNS4_21function_attributes_tERKNS4_19device_properties_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attr, void ()* %entry1) #8 {
entry:
  %attr.addr = alloca %struct.cudaFuncAttributes*, align 8
  %entry.addr = alloca void ()*, align 8
  store %struct.cudaFuncAttributes* %attr, %struct.cudaFuncAttributes** %attr.addr, align 8, !tbaa !1
  store void ()* %entry1, void ()** %entry.addr, align 8, !tbaa !1
  %0 = load %struct.cudaFuncAttributes*, %struct.cudaFuncAttributes** %attr.addr, align 8, !tbaa !1
  %1 = load void ()*, void ()** %entry.addr, align 8, !tbaa !1
  %2 = bitcast void ()* %1 to i8*
  %call = call i32 @cudaFuncGetAttributes(%struct.cudaFuncAttributes* %0, i8* %2)
  ret i32 %call
}

declare i32 @cudaFuncGetAttributes(%struct.cudaFuncAttributes*, i8*) #3

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

declare i32 @cudaSetupArgument(i8*, i64, i64)

declare i32 @cudaLaunch(i8*)

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyINS4_25cuda_launch_config_detail4util13zero_functionImEEEEmRKNS4_21function_attributes_tERKNS4_19device_properties_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attributes, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties) #8 comdat {
entry:
  %block_size_to_dynamic_smem_size = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function", align 1
  %attributes.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %max_occupancy = alloca i64, align 8
  %largest_blocksize = alloca i64, align 8
  %granularity = alloca i64, align 8
  %max_blocksize = alloca i64, align 8
  %highest_occupancy = alloca i64, align 8
  %blocksize = alloca i64, align 8
  %cleanup.dest.slot = alloca i32
  %occupancy = alloca i64, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attributes, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  %0 = bitcast i64* %max_occupancy to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %1, i32 0, i32 3
  %2 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %conv = sext i32 %2 to i64
  store i64 %conv, i64* %max_occupancy, align 8, !tbaa !13
  %3 = bitcast i64* %largest_blocksize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %4, i32 0, i32 2
  %5 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %maxThreadsPerBlock1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %5, i32 0, i32 2
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_IiEET_RKS8_SA_(i32* dereferenceable(4) %maxThreadsPerBlock, i32* dereferenceable(4) %maxThreadsPerBlock1)
  %conv2 = sext i32 %call to i64
  store i64 %conv2, i64* %largest_blocksize, align 8, !tbaa !13
  %6 = bitcast i64* %granularity to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %warpSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %7, i32 0, i32 8
  %8 = load i32, i32* %warpSize, align 8, !tbaa !142
  %conv3 = sext i32 %8 to i64
  store i64 %conv3, i64* %granularity, align 8, !tbaa !13
  %9 = bitcast i64* %max_blocksize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %9) #5
  store i64 0, i64* %max_blocksize, align 8, !tbaa !13
  %10 = bitcast i64* %highest_occupancy to i8*
  call void @llvm.lifetime.start(i64 8, i8* %10) #5
  store i64 0, i64* %highest_occupancy, align 8, !tbaa !13
  %11 = bitcast i64* %blocksize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %11) #5
  %12 = load i64, i64* %largest_blocksize, align 8, !tbaa !13
  store i64 %12, i64* %blocksize, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %13 = load i64, i64* %blocksize, align 8, !tbaa !13
  %cmp = icmp ne i64 %13, 0
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  store i32 2, i32* %cleanup.dest.slot, align 4
  br label %cleanup10

for.body:                                         ; preds = %for.cond
  %14 = bitcast i64* %occupancy to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load i64, i64* %blocksize, align 8, !tbaa !13
  %16 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %17 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %18 = load i64, i64* %blocksize, align 8, !tbaa !13
  %19 = load i64, i64* %blocksize, align 8, !tbaa !13
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util13zero_functionImEclEm(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function"* %block_size_to_dynamic_smem_size, i64 %19)
  %call5 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %16, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %17, i64 %18, i64 %call4)
  %mul = mul i64 %15, %call5
  store i64 %mul, i64* %occupancy, align 8, !tbaa !13
  %20 = load i64, i64* %occupancy, align 8, !tbaa !13
  %21 = load i64, i64* %highest_occupancy, align 8, !tbaa !13
  %cmp6 = icmp ugt i64 %20, %21
  br i1 %cmp6, label %if.then, label %if.end

if.then:                                          ; preds = %for.body
  %22 = load i64, i64* %blocksize, align 8, !tbaa !13
  store i64 %22, i64* %max_blocksize, align 8, !tbaa !13
  %23 = load i64, i64* %occupancy, align 8, !tbaa !13
  store i64 %23, i64* %highest_occupancy, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %for.body
  %24 = load i64, i64* %highest_occupancy, align 8, !tbaa !13
  %25 = load i64, i64* %max_occupancy, align 8, !tbaa !13
  %cmp7 = icmp eq i64 %24, %25
  br i1 %cmp7, label %if.then8, label %if.end9

if.then8:                                         ; preds = %if.end
  store i32 2, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end9:                                          ; preds = %if.end
  store i32 0, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end9, %if.then8
  %26 = bitcast i64* %occupancy to i8*
  call void @llvm.lifetime.end(i64 8, i8* %26) #5
  %cleanup.dest = load i32, i32* %cleanup.dest.slot, align 4
  switch i32 %cleanup.dest, label %cleanup10 [
    i32 0, label %cleanup.cont
  ]

cleanup.cont:                                     ; preds = %cleanup
  br label %for.inc

for.inc:                                          ; preds = %cleanup.cont
  %27 = load i64, i64* %granularity, align 8, !tbaa !13
  %28 = load i64, i64* %blocksize, align 8, !tbaa !13
  %sub = sub i64 %28, %27
  store i64 %sub, i64* %blocksize, align 8, !tbaa !13
  br label %for.cond

cleanup10:                                        ; preds = %cleanup, %for.cond.cleanup
  %29 = bitcast i64* %blocksize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  br label %for.end

for.end:                                          ; preds = %cleanup10
  %30 = load i64, i64* %max_blocksize, align 8, !tbaa !13
  store i32 1, i32* %cleanup.dest.slot, align 4
  %31 = bitcast i64* %highest_occupancy to i8*
  call void @llvm.lifetime.end(i64 8, i8* %31) #5
  %32 = bitcast i64* %max_blocksize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %32) #5
  %33 = bitcast i64* %granularity to i8*
  call void @llvm.lifetime.end(i64 8, i8* %33) #5
  %34 = bitcast i64* %largest_blocksize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %34) #5
  %35 = bitcast i64* %max_occupancy to i8*
  call void @llvm.lifetime.end(i64 8, i8* %35) #5
  ret i64 %30
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_IiEET_RKS8_SA_(i32* dereferenceable(4) %lhs, i32* dereferenceable(4) %rhs) #9 comdat {
entry:
  %lhs.addr = alloca i32*, align 8
  %rhs.addr = alloca i32*, align 8
  store i32* %lhs, i32** %lhs.addr, align 8, !tbaa !7
  store i32* %rhs, i32** %rhs.addr, align 8, !tbaa !7
  %0 = load i32*, i32** %rhs.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  %2 = load i32*, i32** %lhs.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  %cmp = icmp slt i32 %1, %3
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %4 = load i32*, i32** %rhs.addr, align 8
  %5 = load i32, i32* %4, align 4, !tbaa !11
  br label %cond.end

cond.false:                                       ; preds = %entry
  %6 = load i32*, i32** %lhs.addr, align 8
  %7 = load i32, i32* %6, align 4, !tbaa !11
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %5, %cond.true ], [ %7, %cond.false ]
  ret i32 %cond
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attributes, i64 %CTA_SIZE, i64 %dynamic_smem_bytes) #8 comdat {
entry:
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attributes.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %CTA_SIZE.addr = alloca i64, align 8
  %dynamic_smem_bytes.addr = alloca i64, align 8
  %maxThreadsPerSM = alloca i64, align 8
  %maxBlocksPerSM = alloca i64, align 8
  %ctaLimitThreads = alloca i64, align 8
  %ctaLimitBlocks = alloca i64, align 8
  %smemAllocationUnit = alloca i64, align 8
  %smemBytes = alloca i64, align 8
  %smemPerCTA = alloca i64, align 8
  %ctaLimitSMem = alloca i64, align 8
  %regAllocationUnit = alloca i32, align 4
  %warpAllocationMultiple = alloca i64, align 8
  %numWarps = alloca i64, align 8
  %ctaLimitRegs = alloca i64, align 8
  %regsPerCTA = alloca i64, align 8
  %regsPerWarp = alloca i64, align 8
  %numSides = alloca i64, align 8
  %numRegsPerSide = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp45 = alloca i64, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attributes, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8, !tbaa !7
  store i64 %CTA_SIZE, i64* %CTA_SIZE.addr, align 8, !tbaa !13
  store i64 %dynamic_smem_bytes, i64* %dynamic_smem_bytes.addr, align 8, !tbaa !13
  %0 = bitcast i64* %maxThreadsPerSM to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %1, i32 0, i32 3
  %2 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %conv = sext i32 %2 to i64
  store i64 %conv, i64* %maxThreadsPerSM, align 8, !tbaa !13
  %3 = bitcast i64* %maxBlocksPerSM to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail29max_blocks_per_multiprocessorERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %4)
  store i64 %call, i64* %maxBlocksPerSM, align 8, !tbaa !13
  %5 = bitcast i64* %ctaLimitThreads to i8*
  call void @llvm.lifetime.start(i64 8, i8* %5) #5
  %6 = load i64, i64* %CTA_SIZE.addr, align 8, !tbaa !13
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %7, i32 0, i32 2
  %8 = load i32, i32* %maxThreadsPerBlock, align 8, !tbaa !143
  %conv1 = sext i32 %8 to i64
  %cmp = icmp ule i64 %6, %conv1
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %9 = load i64, i64* %maxThreadsPerSM, align 8, !tbaa !13
  %10 = load i64, i64* %CTA_SIZE.addr, align 8, !tbaa !13
  %div = udiv i64 %9, %10
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i64 [ %div, %cond.true ], [ 0, %cond.false ]
  store i64 %cond, i64* %ctaLimitThreads, align 8, !tbaa !13
  %11 = bitcast i64* %ctaLimitBlocks to i8*
  call void @llvm.lifetime.start(i64 8, i8* %11) #5
  %12 = load i64, i64* %maxBlocksPerSM, align 8, !tbaa !13
  store i64 %12, i64* %ctaLimitBlocks, align 8, !tbaa !13
  %13 = bitcast i64* %smemAllocationUnit to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  %14 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail20smem_allocation_unitERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %14)
  store i64 %call2, i64* %smemAllocationUnit, align 8, !tbaa !13
  %15 = bitcast i64* %smemBytes to i8*
  call void @llvm.lifetime.start(i64 8, i8* %15) #5
  %16 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %16, i32 0, i32 5
  %17 = load i64, i64* %sharedSizeBytes, align 8, !tbaa !140
  %18 = load i64, i64* %dynamic_smem_bytes.addr, align 8, !tbaa !13
  %add = add i64 %17, %18
  store i64 %add, i64* %smemBytes, align 8, !tbaa !13
  %19 = bitcast i64* %smemPerCTA to i8*
  call void @llvm.lifetime.start(i64 8, i8* %19) #5
  %20 = load i64, i64* %smemBytes, align 8, !tbaa !13
  %21 = load i64, i64* %smemAllocationUnit, align 8, !tbaa !13
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iImmEET_S8_T0_(i64 %20, i64 %21)
  store i64 %call3, i64* %smemPerCTA, align 8, !tbaa !13
  %22 = bitcast i64* %ctaLimitSMem to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  %23 = load i64, i64* %smemPerCTA, align 8, !tbaa !13
  %cmp4 = icmp ugt i64 %23, 0
  br i1 %cmp4, label %cond.true5, label %cond.false7

cond.true5:                                       ; preds = %cond.end
  %24 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %sharedMemPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %24, i32 0, i32 7
  %25 = load i64, i64* %sharedMemPerBlock, align 8, !tbaa !124
  %26 = load i64, i64* %smemPerCTA, align 8, !tbaa !13
  %div6 = udiv i64 %25, %26
  br label %cond.end8

cond.false7:                                      ; preds = %cond.end
  %27 = load i64, i64* %maxBlocksPerSM, align 8, !tbaa !13
  br label %cond.end8

cond.end8:                                        ; preds = %cond.false7, %cond.true5
  %cond9 = phi i64 [ %div6, %cond.true5 ], [ %27, %cond.false7 ]
  store i64 %cond9, i64* %ctaLimitSMem, align 8, !tbaa !13
  %28 = bitcast i32* %regAllocationUnit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %28) #5
  %29 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %30 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %30, i32 0, i32 3
  %31 = load i32, i32* %numRegs, align 4, !tbaa !136
  %conv10 = sext i32 %31 to i64
  %call11 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail19reg_allocation_unitERKNS4_19device_properties_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %29, i64 %conv10)
  store i32 %call11, i32* %regAllocationUnit, align 4, !tbaa !11
  %32 = bitcast i64* %warpAllocationMultiple to i8*
  call void @llvm.lifetime.start(i64 8, i8* %32) #5
  %33 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %call12 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail24warp_allocation_multipleERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %33)
  store i64 %call12, i64* %warpAllocationMultiple, align 8, !tbaa !13
  %34 = bitcast i64* %numWarps to i8*
  call void @llvm.lifetime.start(i64 8, i8* %34) #5
  %35 = load i64, i64* %CTA_SIZE.addr, align 8, !tbaa !13
  %36 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %warpSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %36, i32 0, i32 8
  %37 = load i32, i32* %warpSize, align 8, !tbaa !142
  %call13 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riImiEET_S8_T0_(i64 %35, i32 %37)
  %38 = load i64, i64* %warpAllocationMultiple, align 8, !tbaa !13
  %call14 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iImmEET_S8_T0_(i64 %call13, i64 %38)
  store i64 %call14, i64* %numWarps, align 8, !tbaa !13
  %39 = bitcast i64* %ctaLimitRegs to i8*
  call void @llvm.lifetime.start(i64 8, i8* %39) #5
  %40 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %major = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %40, i32 0, i32 0
  %41 = load i32, i32* %major, align 8, !tbaa !144
  %cmp15 = icmp sle i32 %41, 1
  br i1 %cmp15, label %if.then, label %if.else

if.then:                                          ; preds = %cond.end8
  %42 = bitcast i64* %regsPerCTA to i8*
  call void @llvm.lifetime.start(i64 8, i8* %42) #5
  %43 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %numRegs16 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %43, i32 0, i32 3
  %44 = load i32, i32* %numRegs16, align 4, !tbaa !136
  %45 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %warpSize17 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %45, i32 0, i32 8
  %46 = load i32, i32* %warpSize17, align 8, !tbaa !142
  %mul = mul nsw i32 %44, %46
  %conv18 = sext i32 %mul to i64
  %47 = load i64, i64* %numWarps, align 8, !tbaa !13
  %mul19 = mul i64 %conv18, %47
  %48 = load i32, i32* %regAllocationUnit, align 4, !tbaa !11
  %call20 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iImiEET_S8_T0_(i64 %mul19, i32 %48)
  store i64 %call20, i64* %regsPerCTA, align 8, !tbaa !13
  %49 = load i64, i64* %regsPerCTA, align 8, !tbaa !13
  %cmp21 = icmp ugt i64 %49, 0
  br i1 %cmp21, label %cond.true22, label %cond.false25

cond.true22:                                      ; preds = %if.then
  %50 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %regsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %50, i32 0, i32 6
  %51 = load i32, i32* %regsPerBlock, align 8, !tbaa !145
  %conv23 = sext i32 %51 to i64
  %52 = load i64, i64* %regsPerCTA, align 8, !tbaa !13
  %div24 = udiv i64 %conv23, %52
  br label %cond.end26

cond.false25:                                     ; preds = %if.then
  %53 = load i64, i64* %maxBlocksPerSM, align 8, !tbaa !13
  br label %cond.end26

cond.end26:                                       ; preds = %cond.false25, %cond.true22
  %cond27 = phi i64 [ %div24, %cond.true22 ], [ %53, %cond.false25 ]
  store i64 %cond27, i64* %ctaLimitRegs, align 8, !tbaa !13
  %54 = bitcast i64* %regsPerCTA to i8*
  call void @llvm.lifetime.end(i64 8, i8* %54) #5
  br label %if.end

if.else:                                          ; preds = %cond.end8
  %55 = bitcast i64* %regsPerWarp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %55) #5
  %56 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %numRegs28 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %56, i32 0, i32 3
  %57 = load i32, i32* %numRegs28, align 4, !tbaa !136
  %58 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %warpSize29 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %58, i32 0, i32 8
  %59 = load i32, i32* %warpSize29, align 8, !tbaa !142
  %mul30 = mul nsw i32 %57, %59
  %60 = load i32, i32* %regAllocationUnit, align 4, !tbaa !11
  %call31 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iIiiEET_S8_T0_(i32 %mul30, i32 %60)
  %conv32 = sext i32 %call31 to i64
  store i64 %conv32, i64* %regsPerWarp, align 8, !tbaa !13
  %61 = bitcast i64* %numSides to i8*
  call void @llvm.lifetime.start(i64 8, i8* %61) #5
  %62 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %call33 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail28num_sides_per_multiprocessorERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %62)
  store i64 %call33, i64* %numSides, align 8, !tbaa !13
  %63 = bitcast i64* %numRegsPerSide to i8*
  call void @llvm.lifetime.start(i64 8, i8* %63) #5
  %64 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %regsPerBlock34 = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %64, i32 0, i32 6
  %65 = load i32, i32* %regsPerBlock34, align 8, !tbaa !145
  %conv35 = sext i32 %65 to i64
  %66 = load i64, i64* %numSides, align 8, !tbaa !13
  %div36 = udiv i64 %conv35, %66
  store i64 %div36, i64* %numRegsPerSide, align 8, !tbaa !13
  %67 = load i64, i64* %regsPerWarp, align 8, !tbaa !13
  %cmp37 = icmp ugt i64 %67, 0
  br i1 %cmp37, label %cond.true38, label %cond.false42

cond.true38:                                      ; preds = %if.else
  %68 = load i64, i64* %numRegsPerSide, align 8, !tbaa !13
  %69 = load i64, i64* %regsPerWarp, align 8, !tbaa !13
  %div39 = udiv i64 %68, %69
  %70 = load i64, i64* %numSides, align 8, !tbaa !13
  %mul40 = mul i64 %div39, %70
  %71 = load i64, i64* %numWarps, align 8, !tbaa !13
  %div41 = udiv i64 %mul40, %71
  br label %cond.end43

cond.false42:                                     ; preds = %if.else
  %72 = load i64, i64* %maxBlocksPerSM, align 8, !tbaa !13
  br label %cond.end43

cond.end43:                                       ; preds = %cond.false42, %cond.true38
  %cond44 = phi i64 [ %div41, %cond.true38 ], [ %72, %cond.false42 ]
  store i64 %cond44, i64* %ctaLimitRegs, align 8, !tbaa !13
  %73 = bitcast i64* %numRegsPerSide to i8*
  call void @llvm.lifetime.end(i64 8, i8* %73) #5
  %74 = bitcast i64* %numSides to i8*
  call void @llvm.lifetime.end(i64 8, i8* %74) #5
  %75 = bitcast i64* %regsPerWarp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %75) #5
  br label %if.end

if.end:                                           ; preds = %cond.end43, %cond.end26
  %call46 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_ImEET_RKS8_SA_(i64* dereferenceable(8) %ctaLimitThreads, i64* dereferenceable(8) %ctaLimitBlocks)
  store i64 %call46, i64* %ref.tmp45, align 8, !tbaa !13
  %call47 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_ImEET_RKS8_SA_(i64* dereferenceable(8) %ctaLimitSMem, i64* dereferenceable(8) %ref.tmp45)
  store i64 %call47, i64* %ref.tmp, align 8, !tbaa !13
  %call48 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_ImEET_RKS8_SA_(i64* dereferenceable(8) %ctaLimitRegs, i64* dereferenceable(8) %ref.tmp)
  %76 = bitcast i64* %ctaLimitRegs to i8*
  call void @llvm.lifetime.end(i64 8, i8* %76) #5
  %77 = bitcast i64* %numWarps to i8*
  call void @llvm.lifetime.end(i64 8, i8* %77) #5
  %78 = bitcast i64* %warpAllocationMultiple to i8*
  call void @llvm.lifetime.end(i64 8, i8* %78) #5
  %79 = bitcast i32* %regAllocationUnit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %79) #5
  %80 = bitcast i64* %ctaLimitSMem to i8*
  call void @llvm.lifetime.end(i64 8, i8* %80) #5
  %81 = bitcast i64* %smemPerCTA to i8*
  call void @llvm.lifetime.end(i64 8, i8* %81) #5
  %82 = bitcast i64* %smemBytes to i8*
  call void @llvm.lifetime.end(i64 8, i8* %82) #5
  %83 = bitcast i64* %smemAllocationUnit to i8*
  call void @llvm.lifetime.end(i64 8, i8* %83) #5
  %84 = bitcast i64* %ctaLimitBlocks to i8*
  call void @llvm.lifetime.end(i64 8, i8* %84) #5
  %85 = bitcast i64* %ctaLimitThreads to i8*
  call void @llvm.lifetime.end(i64 8, i8* %85) #5
  %86 = bitcast i64* %maxBlocksPerSM to i8*
  call void @llvm.lifetime.end(i64 8, i8* %86) #5
  %87 = bitcast i64* %maxThreadsPerSM to i8*
  call void @llvm.lifetime.end(i64 8, i8* %87) #5
  ret i64 %call48
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util13zero_functionImEclEm(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function"* %this, i64) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function"*, align 8
  %.addr = alloca i64, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function"** %this.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launch_config_detail::util::zero_function"** %this.addr, align 8
  ret i64 0
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail29max_blocks_per_multiprocessorERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties) #9 comdat {
entry:
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %major = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %0, i32 0, i32 0
  %1 = load i32, i32* %major, align 8, !tbaa !144
  %cmp = icmp sle i32 %1, 2
  %cond = select i1 %cmp, i32 8, i32 16
  %conv = sext i32 %cond to i64
  ret i64 %conv
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail20smem_allocation_unitERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties) #9 comdat {
entry:
  %retval = alloca i64, align 8
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %major = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %0, i32 0, i32 0
  %1 = load i32, i32* %major, align 8, !tbaa !144
  switch i32 %1, label %sw.default [
    i32 1, label %sw.bb
    i32 2, label %sw.bb1
    i32 3, label %sw.bb2
  ]

sw.bb:                                            ; preds = %entry
  store i64 512, i64* %retval, align 8
  br label %return

sw.bb1:                                           ; preds = %entry
  store i64 128, i64* %retval, align 8
  br label %return

sw.bb2:                                           ; preds = %entry
  store i64 256, i64* %retval, align 8
  br label %return

sw.default:                                       ; preds = %entry
  store i64 256, i64* %retval, align 8
  br label %return

return:                                           ; preds = %sw.default, %sw.bb2, %sw.bb1, %sw.bb
  %2 = load i64, i64* %retval, align 8
  ret i64 %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iImmEET_S8_T0_(i64 %x, i64 %y) #8 comdat {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i64, align 8
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  %0 = load i64, i64* %y.addr, align 8, !tbaa !13
  %1 = load i64, i64* %x.addr, align 8, !tbaa !13
  %2 = load i64, i64* %y.addr, align 8, !tbaa !13
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riImmEET_S8_T0_(i64 %1, i64 %2)
  %mul = mul i64 %0, %call
  ret i64 %mul
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail19reg_allocation_unitERKNS4_19device_properties_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties, i64 %regsPerThread) #9 comdat {
entry:
  %retval = alloca i32, align 4
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %regsPerThread.addr = alloca i64, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  store i64 %regsPerThread, i64* %regsPerThread.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %major = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %0, i32 0, i32 0
  %1 = load i32, i32* %major, align 8, !tbaa !144
  switch i32 %1, label %sw.default4 [
    i32 1, label %sw.bb
    i32 2, label %sw.bb1
    i32 3, label %sw.bb3
  ]

sw.bb:                                            ; preds = %entry
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %minor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %2, i32 0, i32 4
  %3 = load i32, i32* %minor, align 8, !tbaa !146
  %cmp = icmp sle i32 %3, 1
  %cond = select i1 %cmp, i32 256, i32 512
  store i32 %cond, i32* %retval, align 4
  br label %return

sw.bb1:                                           ; preds = %entry
  %4 = load i64, i64* %regsPerThread.addr, align 8, !tbaa !13
  switch i64 %4, label %sw.default [
    i64 21, label %sw.bb2
    i64 22, label %sw.bb2
    i64 29, label %sw.bb2
    i64 30, label %sw.bb2
    i64 37, label %sw.bb2
    i64 38, label %sw.bb2
    i64 45, label %sw.bb2
    i64 46, label %sw.bb2
  ]

sw.bb2:                                           ; preds = %sw.bb1, %sw.bb1, %sw.bb1, %sw.bb1, %sw.bb1, %sw.bb1, %sw.bb1, %sw.bb1
  store i32 128, i32* %retval, align 4
  br label %return

sw.default:                                       ; preds = %sw.bb1
  store i32 64, i32* %retval, align 4
  br label %return

sw.bb3:                                           ; preds = %entry
  store i32 256, i32* %retval, align 4
  br label %return

sw.default4:                                      ; preds = %entry
  store i32 256, i32* %retval, align 4
  br label %return

return:                                           ; preds = %sw.default4, %sw.bb3, %sw.default, %sw.bb2, %sw.bb
  %5 = load i32, i32* %retval, align 4
  ret i32 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail24warp_allocation_multipleERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties) #9 comdat {
entry:
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %major = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %0, i32 0, i32 0
  %1 = load i32, i32* %major, align 8, !tbaa !144
  %cmp = icmp sle i32 %1, 1
  %cond = select i1 %cmp, i32 2, i32 1
  %conv = sext i32 %cond to i64
  ret i64 %conv
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riImiEET_S8_T0_(i64 %x, i32 %y) #9 comdat {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i32, align 4
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i32 %y, i32* %y.addr, align 4, !tbaa !11
  %0 = load i64, i64* %x.addr, align 8, !tbaa !13
  %1 = load i32, i32* %y.addr, align 4, !tbaa !11
  %sub = sub nsw i32 %1, 1
  %conv = sext i32 %sub to i64
  %add = add i64 %0, %conv
  %2 = load i32, i32* %y.addr, align 4, !tbaa !11
  %conv1 = sext i32 %2 to i64
  %div = udiv i64 %add, %conv1
  ret i64 %div
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iImiEET_S8_T0_(i64 %x, i32 %y) #9 comdat {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i32, align 4
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i32 %y, i32* %y.addr, align 4, !tbaa !11
  %0 = load i32, i32* %y.addr, align 4, !tbaa !11
  %conv = sext i32 %0 to i64
  %1 = load i64, i64* %x.addr, align 8, !tbaa !13
  %2 = load i32, i32* %y.addr, align 4, !tbaa !11
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riImiEET_S8_T0_(i64 %1, i32 %2)
  %mul = mul i64 %conv, %call
  ret i64 %mul
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_iIiiEET_S8_T0_(i32 %x, i32 %y) #8 comdat {
entry:
  %x.addr = alloca i32, align 4
  %y.addr = alloca i32, align 4
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  store i32 %y, i32* %y.addr, align 4, !tbaa !11
  %0 = load i32, i32* %y.addr, align 4, !tbaa !11
  %1 = load i32, i32* %x.addr, align 4, !tbaa !11
  %2 = load i32, i32* %y.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riIiiEET_S8_T0_(i32 %1, i32 %2)
  %mul = mul nsw i32 %0, %call
  ret i32 %mul
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail28num_sides_per_multiprocessorERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties) #9 comdat {
entry:
  %retval = alloca i64, align 8
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %major = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %0, i32 0, i32 0
  %1 = load i32, i32* %major, align 8, !tbaa !144
  switch i32 %1, label %sw.default [
    i32 1, label %sw.bb
    i32 2, label %sw.bb1
    i32 3, label %sw.bb2
  ]

sw.bb:                                            ; preds = %entry
  store i64 1, i64* %retval, align 8
  br label %return

sw.bb1:                                           ; preds = %entry
  store i64 2, i64* %retval, align 8
  br label %return

sw.bb2:                                           ; preds = %entry
  store i64 4, i64* %retval, align 8
  br label %return

sw.default:                                       ; preds = %entry
  store i64 4, i64* %retval, align 8
  br label %return

return:                                           ; preds = %sw.default, %sw.bb2, %sw.bb1, %sw.bb
  %2 = load i64, i64* %retval, align 8
  ret i64 %2
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util4min_ImEET_RKS8_SA_(i64* dereferenceable(8) %lhs, i64* dereferenceable(8) %rhs) #9 comdat {
entry:
  %lhs.addr = alloca i64*, align 8
  %rhs.addr = alloca i64*, align 8
  store i64* %lhs, i64** %lhs.addr, align 8, !tbaa !7
  store i64* %rhs, i64** %rhs.addr, align 8, !tbaa !7
  %0 = load i64*, i64** %rhs.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  %2 = load i64*, i64** %lhs.addr, align 8
  %3 = load i64, i64* %2, align 8, !tbaa !13
  %cmp = icmp ult i64 %1, %3
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %4 = load i64*, i64** %rhs.addr, align 8
  %5 = load i64, i64* %4, align 8, !tbaa !13
  br label %cond.end

cond.false:                                       ; preds = %entry
  %6 = load i64*, i64** %lhs.addr, align 8
  %7 = load i64, i64* %6, align 8, !tbaa !13
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i64 [ %5, %cond.true ], [ %7, %cond.false ]
  ret i64 %cond
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riImmEET_S8_T0_(i64 %x, i64 %y) #9 comdat {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i64, align 8
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  %0 = load i64, i64* %x.addr, align 8, !tbaa !13
  %1 = load i64, i64* %y.addr, align 8, !tbaa !13
  %sub = sub i64 %1, 1
  %add = add i64 %0, %sub
  %2 = load i64, i64* %y.addr, align 8, !tbaa !13
  %div = udiv i64 %add, %2
  ret i64 %div
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_riIiiEET_S8_T0_(i32 %x, i32 %y) #9 comdat {
entry:
  %x.addr = alloca i32, align 4
  %y.addr = alloca i32, align 4
  store i32 %x, i32* %x.addr, align 4, !tbaa !11
  store i32 %y, i32* %y.addr, align 4, !tbaa !11
  %0 = load i32, i32* %x.addr, align 4, !tbaa !11
  %1 = load i32, i32* %y.addr, align 4, !tbaa !11
  %sub = sub nsw i32 %1, 1
  %add = add nsw i32 %0, %sub
  %2 = load i32, i32* %y.addr, align 4, !tbaa !11
  %div = sdiv i32 %add, %2
  ret i32 %div
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %lhs, i32* dereferenceable(4) %rhs) #1 comdat {
entry:
  %lhs.addr = alloca i32*, align 8
  %rhs.addr = alloca i32*, align 8
  store i32* %lhs, i32** %lhs.addr, align 8, !tbaa !7
  store i32* %rhs, i32** %rhs.addr, align 8, !tbaa !7
  %0 = load i32*, i32** %rhs.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  %2 = load i32*, i32** %lhs.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  %cmp = icmp slt i32 %1, %3
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %4 = load i32*, i32** %rhs.addr, align 8
  %5 = load i32, i32* %4, align 4, !tbaa !11
  br label %cond.end

cond.false:                                       ; preds = %entry
  %6 = load i32*, i32** %lhs.addr, align 8
  %7 = load i32, i32* %6, align 4, !tbaa !11
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %5, %cond.true ], [ %7, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.155"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.69"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %t1, %"class.thrust::device_ptr.69"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj(%"class.thrust::tuple.155"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure"* %this, %"class.thrust::tuple.155"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure"*, align 8
  %args.addr = alloca %"class.thrust::tuple.155"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.155"* %args, %"class.thrust::tuple.155"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure", %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure", %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.155"*, %"class.thrust::tuple.155"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.155"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.155"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj(%"class.thrust::tuple.155"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.69"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.155"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.155"* %this, %"class.thrust::tuple.155"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %t1, %"class.thrust::device_ptr.69"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.155"*, %"class.thrust::tuple.155"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.155"* %this1 to %"struct.thrust::detail::cons.156"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.156"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::device_ptr.69"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.156"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::device_ptr.69"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.156"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.156"* %this, %"struct.thrust::detail::cons.156"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %t2, %"class.thrust::device_ptr.69"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.156"*, %"struct.thrust::detail::cons.156"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.156", %"struct.thrust::detail::cons.156"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.156", %"struct.thrust::detail::cons.156"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.157"* %tail, %"class.thrust::device_ptr.69"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.157"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.157"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.157"* %this, %"struct.thrust::detail::cons.157"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %t1, %"class.thrust::device_ptr.69"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.157"*, %"struct.thrust::detail::cons.157"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.157", %"struct.thrust::detail::cons.157"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %head to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.157", %"struct.thrust::detail::cons.157"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %this, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.158"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.158"* %this, %"struct.thrust::detail::cons.158"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.146"* %t1, %"struct.thrust::detail::wrapped_function.146"** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.158"*, %"struct.thrust::detail::cons.158"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.158", %"struct.thrust::detail::cons.158"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.146"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.158", %"struct.thrust::detail::cons.158"* %this1, i32 0, i32 1
  %3 = load i32*, i32** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %tail, i32* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %this, i32* dereferenceable(4) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.159"*, align 8
  %t1.addr = alloca i32*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.159"* %this, %"struct.thrust::detail::cons.159"** %this.addr, align 8, !tbaa !1
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.159"*, %"struct.thrust::detail::cons.159"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.159", %"struct.thrust::detail::cons.159"* %this9, i32 0, i32 0
  %9 = load i32*, i32** %t1.addr, align 8
  %10 = load i32, i32* %9, align 4, !tbaa !11
  store i32 %10, i32* %head, align 4, !tbaa !147
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, i64 %exec.coerce0, i64 %exec.coerce1, i64 %size) #0 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to { i64, i64 }*
  %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0
  store i64 %exec.coerce0, i64* %1, align 4
  %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1
  store i64 %exec.coerce1, i64* %2, align 4
  store i64 %size, i64* %size.addr, align 8, !tbaa !13
  %3 = load i64, i64* %size.addr, align 8, !tbaa !13
  %conv = trunc i64 %3 to i32
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %7 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
  %8 = load i64, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
  %10 = load i64, i64* %9, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.result, i32 %conv, i64 %8, i64 %10, i32 2147483647)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_3conEmm(i64 %size, i64 %heap_size) #8 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %size.addr = alloca i64, align 8
  %heap_size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store i64 %size, i64* %size.addr, align 8, !tbaa !13
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  %0 = load i64, i64* %size.addr, align 8, !tbaa !13
  %conv = trunc i64 %0 to i32
  %1 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %conv1 = trunc i64 %1 to i32
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp, i32 0, i32 0
  %2 = load i32, i32* %coerce.dive, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EEC2EiiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %retval, i32 %conv, i32 %conv1, i32 %2, i32 2147483647)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %retval to { i64, i64 }*
  %4 = load { i64, i64 }, { i64, i64 }* %3, align 4
  ret { i64, i64 } %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* %this, i32 %size, i64 %exec.coerce0, i64 %exec.coerce1, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group"*, align 8
  %size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to { i64, i64 }*
  %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0
  store i64 %exec.coerce0, i64* %1, align 4
  %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1
  store i64 %exec.coerce1, i64* %2, align 4
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"** %this.addr, align 8, !tbaa !1
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group"** %this.addr, align 8
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 16, i32 4, i1 false)
  %7 = load i32, i32* %i.addr, align 4, !tbaa !11
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %9 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %8, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 %4, i64 %10, i64 %12, i32 %7)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this, i32 %sz, i64 %exec.coerce0, i64 %exec.coerce1, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*, align 8
  %sz.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to { i64, i64 }*
  %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0
  store i64 %exec.coerce0, i64* %1, align 4
  %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1
  store i64 %exec.coerce1, i64* %2, align 4
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"** %this.addr, align 8, !tbaa !1
  store i32 %sz, i32* %sz.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this1, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 4, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this1, i32 0, i32 1
  %5 = load i32, i32* %sz.addr, align 4, !tbaa !11
  store i32 %5, i32* %m_size, align 4, !tbaa !117
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %this1, i32 0, i32 2
  %6 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %6, i32* %m_index, align 4, !tbaa !149
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %this, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::agent"*, align 8
  %i.addr = alloca i32, align 4
  store %"class.thrust::system::cuda::detail::bulk_::agent"* %this, %"class.thrust::system::cuda::detail::bulk_::agent"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::agent"*, %"class.thrust::system::cuda::detail::bulk_::agent"** %this.addr, align 8
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %this1, i32 0, i32 0
  %0 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %0, i32* %m_index, align 4, !tbaa !150
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EEC2EiiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this, i32 %size, i32 %heap_size, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group"*, align 8
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group"** %this.addr, align 8, !tbaa !1
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this1 to %"class.thrust::system::cuda::detail::bulk_::parallel_group.150"*
  %1 = load i32, i32* %size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm1EEELm0EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.150"* %0, i32 %1, i32 %5, i32 %4)
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group", %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this1, i32 0, i32 1
  %6 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %6, i32* %m_heap_size, align 4, !tbaa !152
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm1EEELm0EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.150"* %this, i32 %size, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.150"*, align 8
  %size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.150"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.150"** %this.addr, align 8, !tbaa !1
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.150"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.150"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.150"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %1 = load i32, i32* %size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %0, i32 %1, i32 %5, i32 %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this, i32 %sz, i32 %exec.coerce, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*, align 8
  %sz.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"** %this.addr, align 8, !tbaa !1
  store i32 %sz, i32* %sz.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %this_exec to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 4, i32 4, i1 false), !tbaa.struct !151
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this1, i32 0, i32 1
  %2 = load i32, i32* %sz.addr, align 4, !tbaa !11
  store i32 %2, i32* %m_size, align 4, !tbaa !120
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %this1, i32 0, i32 2
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %3, i32* %m_index, align 4, !tbaa !153
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_(%"class.thrust::tuple.152"* %this, i64* dereferenceable(8) %t0, i64* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.152"*, align 8
  %t0.addr = alloca i64*, align 8
  %t1.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.152"* %this, %"class.thrust::tuple.152"** %this.addr, align 8, !tbaa !1
  store i64* %t0, i64** %t0.addr, align 8, !tbaa !7
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.152"*, %"class.thrust::tuple.152"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.152"* %this1 to %"struct.thrust::detail::cons.153"*
  %1 = load i64*, i64** %t0.addr, align 8
  %2 = load i64*, i64** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRlNS1_IS2_NS_9null_typeEEEEC2IllKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.153"* %0, i64* dereferenceable(8) %1, i64* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRlNS1_IS2_NS_9null_typeEEEEC2IllKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.153"* %this, i64* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.153"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.153"* %this, %"struct.thrust::detail::cons.153"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.153"*, %"struct.thrust::detail::cons.153"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.153", %"struct.thrust::detail::cons.153"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  store i64* %0, i64** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.153", %"struct.thrust::detail::cons.153"* %this1, i32 0, i32 1
  %1 = load i64*, i64** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRlNS_9null_typeEEC2IlEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.154"* %tail, i64* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRlNS_9null_typeEEC2IlEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.154"* %this, i64* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.154"*, align 8
  %t1.addr = alloca i64*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.154"* %this, %"struct.thrust::detail::cons.154"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.154"*, %"struct.thrust::detail::cons.154"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.154", %"struct.thrust::detail::cons.154"* %this9, i32 0, i32 0
  %9 = load i64*, i64** %t1.addr, align 8
  store i64* %9, i64** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::device_ptr.69"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.161", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %a2, %"class.thrust::device_ptr.69"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.161"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %agg.result, %"class.thrust::tuple.161"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.161"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.69"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %t1, %"class.thrust::device_ptr.69"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl(%"class.thrust::tuple.161"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %this, %"class.thrust::tuple.161"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"*, align 8
  %args.addr = alloca %"class.thrust::tuple.161"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.161"* %args, %"class.thrust::tuple.161"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.161"*, %"class.thrust::tuple.161"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.161"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.161"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl(%"class.thrust::tuple.161"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.69"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.161"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.161"* %this, %"class.thrust::tuple.161"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %t1, %"class.thrust::device_ptr.69"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.161"*, %"class.thrust::tuple.161"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.161"* %this1 to %"struct.thrust::detail::cons.162"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.162"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::device_ptr.69"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.162"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::device_ptr.69"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.162"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.162"* %this, %"struct.thrust::detail::cons.162"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %t2, %"class.thrust::device_ptr.69"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.162"*, %"struct.thrust::detail::cons.162"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.162", %"struct.thrust::detail::cons.162"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.162", %"struct.thrust::detail::cons.162"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.163"* %tail, %"class.thrust::device_ptr.69"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIaaEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.163"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.163"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.163"* %this, %"struct.thrust::detail::cons.163"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %t1, %"class.thrust::device_ptr.69"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.163"*, %"struct.thrust::detail::cons.163"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.163", %"struct.thrust::detail::cons.163"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.69"* %head to i8*
  %2 = bitcast %"class.thrust::device_ptr.69"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.163", %"struct.thrust::detail::cons.163"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %this, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.164"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.164"* %this, %"struct.thrust::detail::cons.164"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.146"* %t1, %"struct.thrust::detail::wrapped_function.146"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.164"*, %"struct.thrust::detail::cons.164"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.164", %"struct.thrust::detail::cons.164"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.146"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.164", %"struct.thrust::detail::cons.164"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %tail, i64* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %this, i64* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.165"*, align 8
  %t1.addr = alloca i64*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.165"* %this, %"struct.thrust::detail::cons.165"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.165"*, %"struct.thrust::detail::cons.165"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.165", %"struct.thrust::detail::cons.165"* %this9, i32 0, i32 0
  %9 = load i64*, i64** %t1.addr, align 8
  %10 = load i64, i64* %9, align 8, !tbaa !13
  store i64 %10, i64* %head, align 8, !tbaa !154
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch"*, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 0
  %0 = load i8, i8* %stream_valid, align 8, !tbaa !156, !range !77
  %tobool = trunc i8 %0 to i1
  ret i1 %tobool
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch"*, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.result to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %e to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch"*, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8
  %s = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 2
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !159
  ret %struct.CUstream_st* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch"*, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8
  %be = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 3
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %be, align 8, !tbaa !160
  ret %struct.CUevent_st* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

declare i32 @cudaStreamWaitEvent(%struct.CUstream_st*, %struct.CUevent_st*, i32) #3

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %struct.CUstream_st* %s, i1 zeroext %owns_stream) #8 comdat align 2 {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %owns_stream.addr = alloca i8, align 1
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %frombool = zext i1 %owns_stream to i8
  store i8 %frombool, i8* %owns_stream.addr, align 1, !tbaa !75
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %1 = load i8, i8* %owns_stream.addr, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %1 to i1
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvEC2EP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.result, %struct.CUstream_st* %0, i1 zeroext %tobool)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.166"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group"** %this.addr, align 8
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group", %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_heap_size, align 4, !tbaa !152
  ret i32 %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.160", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !161
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.167"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i64 %block.coerce1, i32 %index) #0 comdat {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %block to { i64, i64 }*
  %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0
  store i64 %block.coerce0, i64* %1, align 4
  %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1
  store i64 %block.coerce1, i64* %2, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %3 = load i32, i32* %size.addr, align 4, !tbaa !11
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 4, i1 false)
  %6 = load i32, i32* %index.addr, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %8 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
  %9 = load i64, i64* %8, align 4
  %10 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
  %11 = load i64, i64* %10, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %3, i64 %9, i64 %11, i32 %6)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %size.addr, align 4, !tbaa !11
  %1 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive1, align 4
  %call = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEE4makeEiiS8_i(i32 %0, i32 %1, i32 %5, i32 %4)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %retval to { i64, i64 }*
  %7 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
  %8 = extractvalue { i64, i64 } %call, 0
  store i64 %8, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
  %10 = extractvalue { i64, i64 } %call, 1
  store i64 %10, i64* %9, align 4
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %retval to { i64, i64 }*
  %12 = load { i64, i64 }, { i64, i64 }* %11, align 4
  ret { i64, i64 } %12
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %t0, i32* dereferenceable(4) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.173", align 8
  %t0.addr = alloca i32*, align 8
  %t1.addr = alloca i32*, align 8
  store i32* %t0, i32** %t0.addr, align 8, !tbaa !7
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  %0 = load i32*, i32** %t0.addr, align 8
  %1 = load i32*, i32** %t1.addr, align 8
  call void @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_(%"class.thrust::tuple.173"* %retval, i32* dereferenceable(4) %0, i32* dereferenceable(4) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %3 = load { i32*, i32* }, { i32*, i32* }* %2, align 8
  ret { i32*, i32* } %3
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %k) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.173"*, align 8
  %k.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::tuple.173"* %this, %"class.thrust::tuple.173"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %k, %"struct.thrust::pair.82"** %k.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.173"*, %"class.thrust::tuple.173"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %k.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 0, i32 0
  %1 = load i32, i32* %first, align 4, !tbaa !24
  %2 = bitcast %"class.thrust::tuple.173"* %this1 to %"struct.thrust::detail::cons.174"*
  %head = getelementptr inbounds %"struct.thrust::detail::cons.174", %"struct.thrust::detail::cons.174"* %2, i32 0, i32 0
  %ref = load i32*, i32** %head, align 8, !tbaa !7
  store i32 %1, i32* %ref, align 4, !tbaa !11
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %k.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %3, i32 0, i32 1
  %4 = load i32, i32* %second, align 4, !tbaa !28
  %5 = bitcast %"class.thrust::tuple.173"* %this1 to %"struct.thrust::detail::cons.174"*
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.174", %"struct.thrust::detail::cons.174"* %5, i32 0, i32 1
  %head2 = getelementptr inbounds %"struct.thrust::detail::cons.175", %"struct.thrust::detail::cons.175"* %tail, i32 0, i32 0
  %ref3 = load i32*, i32** %head2, align 8, !tbaa !7
  store i32 %4, i32* %ref3, align 4, !tbaa !11
  ret %"class.thrust::tuple.173"* %this1
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ES1_S1_(%"class.thrust::tuple.173"* %this, i32* dereferenceable(4) %t0, i32* dereferenceable(4) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.173"*, align 8
  %t0.addr = alloca i32*, align 8
  %t1.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.173"* %this, %"class.thrust::tuple.173"** %this.addr, align 8, !tbaa !1
  store i32* %t0, i32** %t0.addr, align 8, !tbaa !7
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.173"*, %"class.thrust::tuple.173"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.173"* %this1 to %"struct.thrust::detail::cons.174"*
  %1 = load i32*, i32** %t0.addr, align 8
  %2 = load i32*, i32** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRiNS1_IS2_NS_9null_typeEEEEC2IiiKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.174"* %0, i32* dereferenceable(4) %1, i32* dereferenceable(4) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRiNS1_IS2_NS_9null_typeEEEEC2IiiKS3_S7_S7_S7_S7_S7_S7_S7_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.174"* %this, i32* dereferenceable(4) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.174"*, align 8
  %t1.addr = alloca i32*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.174"* %this, %"struct.thrust::detail::cons.174"** %this.addr, align 8, !tbaa !1
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.174"*, %"struct.thrust::detail::cons.174"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.174", %"struct.thrust::detail::cons.174"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %t1.addr, align 8
  store i32* %0, i32** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.174", %"struct.thrust::detail::cons.174"* %this1, i32 0, i32 1
  %1 = load i32*, i32** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRiNS_9null_typeEEC2IiEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.175"* %tail, i32* dereferenceable(4) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRiNS_9null_typeEEC2IiEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.175"* %this, i32* dereferenceable(4) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.175"*, align 8
  %t1.addr = alloca i32*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.175"* %this, %"struct.thrust::detail::cons.175"** %this.addr, align 8, !tbaa !1
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.175"*, %"struct.thrust::detail::cons.175"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.175", %"struct.thrust::detail::cons.175"* %this9, i32 0, i32 0
  %9 = load i32*, i32** %t1.addr, align 8
  store i32* %9, i32** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attributes, i64 %blocks_per_processor) #8 comdat {
entry:
  %properties.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attributes.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %blocks_per_processor.addr = alloca i64, align 8
  %smem_per_processor = alloca i64, align 8
  %smem_allocation_unit = alloca i64, align 8
  %total_smem_per_block = alloca i64, align 8
  %static_smem_per_block = alloca i64, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %properties, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attributes, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8, !tbaa !7
  store i64 %blocks_per_processor, i64* %blocks_per_processor.addr, align 8, !tbaa !13
  %0 = bitcast i64* %smem_per_processor to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %sharedMemPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %1, i32 0, i32 7
  %2 = load i64, i64* %sharedMemPerBlock, align 8, !tbaa !124
  store i64 %2, i64* %smem_per_processor, align 8, !tbaa !13
  %3 = bitcast i64* %smem_allocation_unit to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %properties.addr, align 8
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail20smem_allocation_unitERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %4)
  store i64 %call, i64* %smem_allocation_unit, align 8, !tbaa !13
  %5 = bitcast i64* %total_smem_per_block to i8*
  call void @llvm.lifetime.start(i64 8, i8* %5) #5
  %6 = load i64, i64* %smem_per_processor, align 8, !tbaa !13
  %7 = load i64, i64* %blocks_per_processor.addr, align 8, !tbaa !13
  %div = udiv i64 %6, %7
  %8 = load i64, i64* %smem_allocation_unit, align 8, !tbaa !13
  %call1 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_zImmEET_S8_T0_(i64 %div, i64 %8)
  store i64 %call1, i64* %total_smem_per_block, align 8, !tbaa !13
  %9 = bitcast i64* %static_smem_per_block to i8*
  call void @llvm.lifetime.start(i64 8, i8* %9) #5
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attributes.addr, align 8
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %10, i32 0, i32 5
  %11 = load i64, i64* %sharedSizeBytes, align 8, !tbaa !140
  store i64 %11, i64* %static_smem_per_block, align 8, !tbaa !13
  %12 = load i64, i64* %total_smem_per_block, align 8, !tbaa !13
  %13 = load i64, i64* %static_smem_per_block, align 8, !tbaa !13
  %sub = sub i64 %12, %13
  %14 = bitcast i64* %static_smem_per_block to i8*
  call void @llvm.lifetime.end(i64 8, i8* %14) #5
  %15 = bitcast i64* %total_smem_per_block to i8*
  call void @llvm.lifetime.end(i64 8, i8* %15) #5
  %16 = bitcast i64* %smem_allocation_unit to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  %17 = bitcast i64* %smem_per_processor to i8*
  call void @llvm.lifetime.end(i64 8, i8* %17) #5
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util7round_zImmEET_S8_T0_(i64 %x, i64 %y) #8 comdat {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i64, align 8
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  %0 = load i64, i64* %y.addr, align 8, !tbaa !13
  %1 = load i64, i64* %x.addr, align 8, !tbaa !13
  %2 = load i64, i64* %y.addr, align 8, !tbaa !13
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_rzImmEET_S8_T0_(i64 %1, i64 %2)
  %mul = mul i64 %0, %call
  ret i64 %mul
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail4util9divide_rzImmEET_S8_T0_(i64 %x, i64 %y) #9 comdat {
entry:
  %x.addr = alloca i64, align 8
  %y.addr = alloca i64, align 8
  store i64 %x, i64* %x.addr, align 8, !tbaa !13
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  %0 = load i64, i64* %x.addr, align 8, !tbaa !13
  %1 = load i64, i64* %y.addr, align 8, !tbaa !13
  %div = udiv i64 %0, %1
  ret i64 %div
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i64 %block.coerce1, i32 %index) #0 comdat align 2 {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %block to { i64, i64 }*
  %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0
  store i64 %block.coerce0, i64* %1, align 4
  %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1
  store i64 %block.coerce1, i64* %2, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %3 = load i32, i32* %size.addr, align 4, !tbaa !11
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 4, i1 false)
  %6 = load i32, i32* %index.addr, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %8 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 0
  %9 = load i64, i64* %8, align 4
  %10 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %7, i32 0, i32 1
  %11 = load i64, i64* %10, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.result, i32 %3, i64 %9, i64 %11, i32 %6)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEE4makeEiiS8_i(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %size.addr, align 4, !tbaa !11
  %1 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive1, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EEC2EiiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %retval, i32 %0, i32 %1, i32 %5, i32 %4)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %retval to { i64, i64 }*
  %7 = load { i64, i64 }, { i64, i64 }* %6, align 4
  ret { i64, i64 } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.160"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.171"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.168"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* %message) #9 comdat {
entry:
  %message.addr = alloca i8*, align 8
  store i8* %message, i8** %message.addr, align 8, !tbaa !1
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

declare i32 @cudaConfigureCall(i64, i32, i64, i32, i64, %struct.CUstream_st*) #3

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN4dim3C2Ejjj(%struct.dim3* %this, i32 %vx, i32 %vy, i32 %vz) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %struct.dim3*, align 8
  %vx.addr = alloca i32, align 4
  %vy.addr = alloca i32, align 4
  %vz.addr = alloca i32, align 4
  store %struct.dim3* %this, %struct.dim3** %this.addr, align 8, !tbaa !1
  store i32 %vx, i32* %vx.addr, align 4, !tbaa !11
  store i32 %vy, i32* %vy.addr, align 4, !tbaa !11
  store i32 %vz, i32* %vz.addr, align 4, !tbaa !11
  %this1 = load %struct.dim3*, %struct.dim3** %this.addr, align 8
  %x = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 0
  %0 = load i32, i32* %vx.addr, align 4, !tbaa !11
  store i32 %0, i32* %x, align 4, !tbaa !163
  %y = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 1
  %1 = load i32, i32* %vy.addr, align 4, !tbaa !11
  store i32 %1, i32* %y, align 4, !tbaa !165
  %z = getelementptr inbounds %struct.dim3, %struct.dim3* %this1, i32 0, i32 2
  %2 = load i32, i32* %vz.addr, align 4, !tbaa !11
  store i32 %2, i32* %z, align 4, !tbaa !166
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.170"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6futureIvEC2EP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* %this, %struct.CUstream_st* %s, i1 zeroext %owns_stream) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::future"*, align 8
  %s.addr = alloca %struct.CUstream_st*, align 8
  %owns_stream.addr = alloca i8, align 1
  store %"class.thrust::system::cuda::detail::bulk_::future"* %this, %"class.thrust::system::cuda::detail::bulk_::future"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %frombool = zext i1 %owns_stream to i8
  store i8 %frombool, i8* %owns_stream.addr, align 1, !tbaa !75
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::future"*, %"class.thrust::system::cuda::detail::bulk_::future"** %this.addr, align 8
  %m_stream = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 0
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %0, %struct.CUstream_st** %m_stream, align 8, !tbaa !116
  %m_owns_stream = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 2
  %1 = load i8, i8* %owns_stream.addr, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %1 to i1
  %frombool2 = zext i1 %tobool to i8
  store i8 %frombool2, i8* %m_owns_stream, align 8, !tbaa !115
  %m_event = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 1
  %call = call i32 @cudaEventCreateWithFlags(%struct.CUevent_st** %m_event, i32 2)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.38, i32 0, i32 0))
  %m_event3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %m_event3, align 8, !tbaa !113
  %m_stream4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 0
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %m_stream4, align 8, !tbaa !116
  %call5 = call i32 @cudaEventRecord(%struct.CUevent_st* %2, %struct.CUstream_st* %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.39, i32 0, i32 0))
  ret void
}

declare i32 @cudaEventCreateWithFlags(%struct.CUevent_st**, i32) #3

declare i32 @cudaEventRecord(%struct.CUevent_st*, %struct.CUstream_st*) #3

declare i32 @cudaStreamCreate(%struct.CUstream_st**) #3

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch"* noalias sret %agg.result, %struct.CUstream_st* %s, i64 %exec.coerce0, i64 %exec.coerce1, i64 %num_groups) #8 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %s.addr = alloca %struct.CUstream_st*, align 8
  %num_groups.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to { i64, i64 }*
  %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0
  store i64 %exec.coerce0, i64* %1, align 4
  %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1
  store i64 %exec.coerce1, i64* %2, align 4
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp1 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 4, i1 false)
  %5 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp1 to { i64, i64 }*
  %7 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 0
  %8 = load i64, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %6, i32 0, i32 1
  %10 = load i64, i64* %9, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 %8, i64 %10, i64 %5)
  %11 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %struct.CUstream_st* %11, %struct.CUevent_st* null)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %exec, %struct.CUstream_st* %s, %struct.CUevent_st* %be) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch"*, align 8
  %s.addr = alloca %struct.CUstream_st*, align 8
  %be.addr = alloca %struct.CUevent_st*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %be, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch"*, %"class.thrust::system::cuda::detail::bulk_::async_launch"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 0
  store i8 1, i8* %stream_valid, align 8, !tbaa !156
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %e to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  %s2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 2
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %2, %struct.CUstream_st** %s2, align 8, !tbaa !159
  %be3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch", %"class.thrust::system::cuda::detail::bulk_::async_launch"* %this1, i32 0, i32 3
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %3, %struct.CUevent_st** %be3, align 8, !tbaa !160
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_6futureIvE5validEv(%"class.thrust::system::cuda::detail::bulk_::future"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::future"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::future"* %this, %"class.thrust::system::cuda::detail::bulk_::future"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::future"*, %"class.thrust::system::cuda::detail::bulk_::future"** %this.addr, align 8
  %m_event = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::future", %"class.thrust::system::cuda::detail::bulk_::future"* %this1, i32 0, i32 1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %m_event, align 8, !tbaa !113
  %cmp = icmp ne %struct.CUevent_st* %0, null
  ret i1 %cmp
}

declare i32 @cudaEventDestroy(%struct.CUevent_st*) #3

declare i32 @printf(i8*, ...) #3

declare i32 @cudaStreamDestroy(%struct.CUstream_st*) #3

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !167
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base", %"class.thrust::system::cuda::detail::bulk_::detail::task_base"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base", %"class.thrust::system::cuda::detail::bulk_::detail::task_base"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIaaEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.66"* %f1, %"class.thrust::detail::normal_iterator.66"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.66"* %f2, %"class.thrust::detail::normal_iterator.66"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  store %"class.thrust::detail::normal_iterator.66"* %f1, %"class.thrust::detail::normal_iterator.66"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.66"* %f2, %"class.thrust::detail::normal_iterator.66"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.66"* %1 to %"class.thrust::iterator_adaptor.67"*
  %3 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.66"* %3 to %"class.thrust::iterator_adaptor.67"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.67"* %2, %"class.thrust::iterator_adaptor.67"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.67"* %this, %"class.thrust::iterator_adaptor.67"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.67"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.67"*, align 8
  store %"class.thrust::iterator_adaptor.67"* %this, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.67"* %y, %"class.thrust::iterator_adaptor.67"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.67"*, %"class.thrust::iterator_adaptor.67"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.67"*, %"class.thrust::iterator_adaptor.67"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.67"* %0)
  %1 = bitcast %"class.thrust::device_ptr.69"* %call to %"class.thrust::iterator_facade.72"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.69"* %m_iterator to %"class.thrust::iterator_facade.72"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.72"* dereferenceable(1) %1, %"class.thrust::iterator_facade.72"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrINS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.72"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.72"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.72"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.72"*, align 8
  store %"class.thrust::iterator_facade.72"* %lhs, %"class.thrust::iterator_facade.72"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.72"* %rhs, %"class.thrust::iterator_facade.72"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.72"*, %"class.thrust::iterator_facade.72"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.72"* %0 to %"class.thrust::device_ptr.69"*
  %2 = load %"class.thrust::iterator_facade.72"*, %"class.thrust::iterator_facade.72"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.72"* %2 to %"class.thrust::device_ptr.69"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIaaEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::device_ptr.69"* dereferenceable(8) %1, %"class.thrust::device_ptr.69"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIaaEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::device_ptr.69"* dereferenceable(8) %f1, %"class.thrust::device_ptr.69"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.69"* %f1, %"class.thrust::device_ptr.69"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %f2, %"class.thrust::device_ptr.69"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIaaEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.69"* dereferenceable(8) %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIaaEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.69"* dereferenceable(8) %f1, %"class.thrust::device_ptr.69"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  store %"class.thrust::device_ptr.69"* %f1, %"class.thrust::device_ptr.69"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.69"* %f2, %"class.thrust::device_ptr.69"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.69"* %1 to %"class.thrust::iterator_adaptor.71"*
  %3 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.69"* %3 to %"class.thrust::iterator_adaptor.71"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.71"* %2, %"class.thrust::iterator_adaptor.71"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.71"* %this, %"class.thrust::iterator_adaptor.71"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.71"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.71"*, align 8
  store %"class.thrust::iterator_adaptor.71"* %this, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.71"* %y, %"class.thrust::iterator_adaptor.71"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.71"*, %"class.thrust::iterator_adaptor.71"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.71"*, %"class.thrust::iterator_adaptor.71"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.71"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !105
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.47"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPKNS_4pairIaaEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE(%"class.thrust::detail::normal_iterator.134"* %retval, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPKNS_4pairIaaEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE(%"class.thrust::detail::normal_iterator.134"* %this, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::detail::normal_iterator.134"* %this, %"class.thrust::detail::normal_iterator.134"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.51"* %other, %"class.thrust::detail::normal_iterator.51"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %this1 to %"class.thrust::iterator_adaptor.135"*
  %2 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.51"* %2 to %"class.thrust::iterator_adaptor.52"*
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.52"* %3)
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  store %"struct.thrust::pair"* %4, %"struct.thrust::pair"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.135"* %1, %"struct.thrust::pair"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.135"* %this, %"struct.thrust::pair"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  %iter.addr = alloca %"struct.thrust::pair"**, align 8
  store %"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"** %iter, %"struct.thrust::pair"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.135"* %this1 to %"class.thrust::iterator_facade.136"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.134"* %i, %"class.thrust::detail::normal_iterator.134"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.134"* %i, %"class.thrust::detail::normal_iterator.134"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.134"* %i, %"class.thrust::detail::normal_iterator.134"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %1 to %"class.thrust::iterator_facade.136"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl(%"class.thrust::iterator_facade.136"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl(%"class.thrust::iterator_facade.136"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.136"* %this, %"class.thrust::iterator_facade.136"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.136"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.136"* %this1)
  ret %"class.thrust::detail::normal_iterator.134"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.134"* %f, %"class.thrust::detail::normal_iterator.134"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %0 to %"class.thrust::iterator_adaptor.135"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.135"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.136"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  store %"class.thrust::iterator_facade.136"* %this, %"class.thrust::iterator_facade.136"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.136"* %this1 to %"class.thrust::detail::normal_iterator.134"*
  ret %"class.thrust::detail::normal_iterator.134"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.135"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  %add.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %1, i64 %0
  store %"struct.thrust::pair"* %add.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorIbSaIbEEC2Em(%"class.thrust::host_vector.73"* %this, i64 %n) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.73"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::host_vector.73"* %this, %"class.thrust::host_vector.73"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::host_vector.73"*, %"class.thrust::host_vector.73"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.73"* %this1 to %"class.thrust::detail::vector_base.74"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail11vector_baseIbSaIbEEC2Em(%"class.thrust::detail::vector_base.74"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %op = alloca %"struct.unittest::random_integer.176", align 1
  %system1 = alloca %"struct.thrust::any_system_tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp2 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %agg.tmp4 = alloca %"struct.unittest::random_integer.176", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive1, align 8
  %0 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::any_system_tag"* %system1 to %"struct.thrust::execution_policy.89"*
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS_14any_system_tagENS0_3cpp6detail3tagEEERNS_6detail17enable_if_definedINS8_14minimum_systemIT_T0_NS8_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyISB_EERNSJ_ISC_EE(%"struct.thrust::execution_policy.89"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %5 = bitcast %"class.thrust::detail::normal_iterator.79"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.79"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp3, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive5, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive6, align 8
  %call7 = call i8* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp2, i8* %7)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive8, i32 0, i32 0
  store i8* %call7, i8** %coerce.dive9, align 8
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %8) #5
  %9 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %9) #5
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive10, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive11, align 8
  ret i8* %10
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  %call = call i8* @_ZN6thrust6detail18contiguous_storageIbSaIbEE5beginEv(%"class.thrust::detail::contiguous_storage.75"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive3, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIbSaIbEEC2Em(%"class.thrust::detail::vector_base.74"* %this, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.std::allocator.76", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  call void @_ZNSaIbEC2Ev(%"class.std::allocator.76"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageIbSaIbEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.75"* %m_storage, %"class.std::allocator.76"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.77"*)* @_ZN9__gnu_cxx13new_allocatorIbED2Ev to void (%"class.std::allocator.76"*)*)(%"class.std::allocator.76"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !169
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail11vector_baseIbSaIbEE12default_initEm(%"class.thrust::detail::vector_base.74"* %this1, i64 %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.77"*)* @_ZN9__gnu_cxx13new_allocatorIbED2Ev to void (%"class.std::allocator.76"*)*)(%"class.std::allocator.76"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIbSaIbEED2Ev(%"class.thrust::detail::contiguous_storage.75"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIbEC2Ev(%"class.std::allocator.76"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.76"*, align 8
  store %"class.std::allocator.76"* %this, %"class.std::allocator.76"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.76"* %this1 to %"class.__gnu_cxx::new_allocator.77"*
  call void @_ZN9__gnu_cxx13new_allocatorIbEC2Ev(%"class.__gnu_cxx::new_allocator.77"* %0) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIbSaIbEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.75"* %this, %"class.std::allocator.76"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  %alloc.addr = alloca %"class.std::allocator.76"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.76"* %alloc, %"class.std::allocator.76"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %alloc.addr, align 8
  call void @_ZNSaIbEC2ERKS_(%"class.std::allocator.76"* %m_allocator, %"class.std::allocator.76"* dereferenceable(1) %0) #5
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust6detail15normal_iteratorIPbEC2ES2_(%"class.thrust::detail::normal_iterator.79"* %m_begin, i8* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !174
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.77"*)* @_ZN9__gnu_cxx13new_allocatorIbED2Ev to void (%"class.std::allocator.76"*)*)(%"class.std::allocator.76"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIbED2Ev(%"class.__gnu_cxx::new_allocator.77"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.77"*, align 8
  store %"class.__gnu_cxx::new_allocator.77"* %this, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.77"*, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIbSaIbEE12default_initEm(%"class.thrust::detail::vector_base.74"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.79", align 8
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIbSaIbEE8allocateEm(%"class.thrust::detail::contiguous_storage.75"* %m_storage, i64 %1)
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 1
  store i64 %2, i64* %m_size, align 8, !tbaa !169
  %m_storage2 = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  %call = call i8* @_ZN6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive3, align 8
  %call4 = call i64 @_ZNK6thrust6detail11vector_baseIbSaIbEE4sizeEv(%"class.thrust::detail::vector_base.74"* %this1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive5, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust6detail18contiguous_storageIbSaIbEE19default_construct_nENS0_15normal_iteratorIPbEEm(%"class.thrust::detail::contiguous_storage.75"* %m_storage2, i8* %3, i64 %call4)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIbSaIbEED2Ev(%"class.thrust::detail::contiguous_storage.75"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIbSaIbEE10deallocateEv(%"class.thrust::detail::contiguous_storage.75"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.77"*)* @_ZN9__gnu_cxx13new_allocatorIbED2Ev to void (%"class.std::allocator.76"*)*)(%"class.std::allocator.76"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.77"*)* @_ZN9__gnu_cxx13new_allocatorIbED2Ev to void (%"class.std::allocator.76"*)*)(%"class.std::allocator.76"* %m_allocator2) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIbEC2Ev(%"class.__gnu_cxx::new_allocator.77"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.77"*, align 8
  store %"class.__gnu_cxx::new_allocator.77"* %this, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.77"*, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIbEC2ERKS_(%"class.std::allocator.76"* %this, %"class.std::allocator.76"* dereferenceable(1) %__a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.76"*, align 8
  %__a.addr = alloca %"class.std::allocator.76"*, align 8
  store %"class.std::allocator.76"* %this, %"class.std::allocator.76"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.76"* %__a, %"class.std::allocator.76"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.76"* %this1 to %"class.__gnu_cxx::new_allocator.77"*
  %1 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator.76"* %1 to %"class.__gnu_cxx::new_allocator.77"*
  call void @_ZN9__gnu_cxx13new_allocatorIbEC2ERKS1_(%"class.__gnu_cxx::new_allocator.77"* %0, %"class.__gnu_cxx::new_allocator.77"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPbEC2ES2_(%"class.thrust::detail::normal_iterator.79"* %this, i8* %p) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %p.addr = alloca i8*, align 8
  store %"class.thrust::detail::normal_iterator.79"* %this, %"class.thrust::detail::normal_iterator.79"** %this.addr, align 8, !tbaa !1
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.79"* %this1 to %"class.thrust::iterator_adaptor.80"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor.80"* %0, i8** dereferenceable(8) %p.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIbEC2ERKS1_(%"class.__gnu_cxx::new_allocator.77"* %this, %"class.__gnu_cxx::new_allocator.77"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.77"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator.77"*, align 8
  store %"class.__gnu_cxx::new_allocator.77"* %this, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator.77"* %0, %"class.__gnu_cxx::new_allocator.77"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator.77"*, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor.80"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.80"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.80"* %this, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.80"*, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.80"* %this1 to %"class.thrust::iterator_facade.81"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !175
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIbSaIbEE8allocateEm(%"class.thrust::detail::contiguous_storage.75"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %ref.tmp3 = alloca %"class.thrust::detail::normal_iterator.79", align 8
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZN6thrust6detail16allocator_traitsISaIbEE8allocateERS2_m(%"class.std::allocator.76"* dereferenceable(1) %m_allocator, i64 %1)
  call void @_ZN6thrust6detail15normal_iteratorIPbEC2ES2_(%"class.thrust::detail::normal_iterator.79"* %ref.tmp, i8* %call)
  %2 = bitcast %"class.thrust::detail::normal_iterator.79"* %m_begin to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.79"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 2
  store i64 %4, i64* %m_size, align 8, !tbaa !174
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPbEC2ES2_(%"class.thrust::detail::normal_iterator.79"* %ref.tmp3, i8* null)
  %5 = bitcast %"class.thrust::detail::normal_iterator.79"* %m_begin2 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.79"* %ref.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size4, align 8, !tbaa !174
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIbSaIbEE19default_construct_nENS0_15normal_iteratorIPbEEm(%"class.thrust::detail::contiguous_storage.75"* %this, i8* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  %n.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this2, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.79"* %first to %"class.thrust::iterator_adaptor.80"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.80"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23default_construct_rangeISaIbEPbmEEvRT_T0_T1_(%"class.std::allocator.76"* dereferenceable(1) %m_allocator, i8* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIbSaIbEE4sizeEv(%"class.thrust::detail::vector_base.74"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !169
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust6detail16allocator_traitsISaIbEE8allocateERS2_m(%"class.std::allocator.76"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZZN6thrust6detail16allocator_traitsISaIbEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.76"* dereferenceable(1) %0, i64 %1)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZZN6thrust6detail16allocator_traitsISaIbEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.76"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.76"* %0 to %"class.__gnu_cxx::new_allocator.77"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i8* @_ZN9__gnu_cxx13new_allocatorIbE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.77"* %1, i64 %2, i8* null)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN9__gnu_cxx13new_allocatorIbE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.77"* %this, i64 %__n, i8*) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.77"*, align 8
  %__n.addr = alloca i64, align 8
  %.addr = alloca i8*, align 8
  store %"class.__gnu_cxx::new_allocator.77"* %this, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.77"*, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8
  %1 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK9__gnu_cxx13new_allocatorIbE8max_sizeEv(%"class.__gnu_cxx::new_allocator.77"* %this1) #5
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZSt17__throw_bad_allocv() #15
  unreachable

if.end:                                           ; preds = %entry
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %mul = mul i64 %2, 1
  %call2 = call i8* @_Znwm(i64 %mul)
  ret i8* %call2
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK9__gnu_cxx13new_allocatorIbE8max_sizeEv(%"class.__gnu_cxx::new_allocator.77"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.77"*, align 8
  store %"class.__gnu_cxx::new_allocator.77"* %this, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.77"*, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8
  ret i64 -1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23default_construct_rangeISaIbEPbmEEvRT_T0_T1_(%"class.std::allocator.76"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  %1 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIbEPbmEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.76"* dereferenceable(1) %0, i8* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.80"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.80"*, align 8
  store %"class.thrust::iterator_adaptor.80"* %this, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.80"*, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIbEPbmEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.76"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %ref.tmp1 = alloca i8, align 1
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaIbEE3getERS2_(%"class.std::allocator.76"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  store i8 0, i8* %ref.tmp1, align 1, !tbaa !75
  %call = call i8* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPbmbEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i8* %2, i64 %3, i8* dereferenceable(1) %ref.tmp1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPbmbEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i8*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i8*, i8** %x.addr, align 8
  %call2 = call i8* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i8* %2, i64 %3, i8* dereferenceable(1) %4)
  ret i8* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemISaIbEE3getERS2_(%"class.std::allocator.76"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemISaIbEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.76"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i8*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  %ref.tmp = alloca %"struct.thrust::detail::has_trivial_copy_constructor.177", align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %3 = load i8*, i8** %x.addr, align 8
  %4 = bitcast %"struct.thrust::detail::has_trivial_copy_constructor.177"* %ref.tmp to %"struct.thrust::detail::integral_constant"*
  %call = call i8* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, i8* %1, i64 %2, i8* dereferenceable(1) %3)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %x) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i8*, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %5 = load i8*, i8** %x.addr, align 8
  %call = call i8* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPbmbEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i8* %3, i64 %4, i8* dereferenceable(1) %5)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPbmbEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i8*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %value, i8** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i8*, i8** %value.addr, align 8
  %call2 = call i8* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i8* %2, i64 %3, i8* dereferenceable(1) %4)
  ret i8* %call2
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPbmbEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8* dereferenceable(1) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i8*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor.178", align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i8* %value, i8** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i8*, i8** %value.addr, align 8
  call void @_ZN6thrust6detail12fill_functorIbEC2ERKb(%"struct.thrust::detail::fill_functor.178"* %agg.tmp, i8* dereferenceable(1) %4)
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %agg.tmp, i32 0, i32 0
  %5 = load i8, i8* %coerce.dive, align 1
  %call = call i8* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPbmNS_6detail12fill_functorIbEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %5)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPbmNS_6detail12fill_functorIbEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor.178", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor.178", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %gen, i32 0, i32 0
  store i8 %gen.coerce, i8* %coerce.dive, align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor.178"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor.178"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !177
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %agg.tmp, i32 0, i32 0
  %6 = load i8, i8* %coerce.dive2, align 1
  %call3 = call i8* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPbmNS_6detail12fill_functorIbEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %6)
  ret i8* %call3
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail12fill_functorIbEC2ERKb(%"struct.thrust::detail::fill_functor.178"* %this, i8* dereferenceable(1) %_exemplar) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor.178"*, align 8
  %_exemplar.addr = alloca i8*, align 8
  store %"struct.thrust::detail::fill_functor.178"* %this, %"struct.thrust::detail::fill_functor.178"** %this.addr, align 8, !tbaa !1
  store i8* %_exemplar, i8** %_exemplar.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::fill_functor.178"*, %"struct.thrust::detail::fill_functor.178"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %_exemplar.addr, align 8
  %1 = load i8, i8* %0, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %1 to i1
  %frombool = zext i1 %tobool to i8
  store i8 %frombool, i8* %exemplar, align 1, !tbaa !178
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPbmNS_6detail12fill_functorIbEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i8* %first, i64 %n, i8 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor.178", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor.179", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::fill_functor.178", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %gen, i32 0, i32 0
  store i8 %gen.coerce, i8* %coerce.dive, align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor.178"* %agg.tmp1 to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor.178"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !177
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %agg.tmp1, i32 0, i32 0
  %6 = load i8, i8* %coerce.dive2, align 1
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIbEEEC2ES3_(%"struct.thrust::detail::host_generate_functor.179"* %agg.tmp, i8 %6)
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.179", %"struct.thrust::detail::host_generate_functor.179"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %coerce.dive3, i32 0, i32 0
  %7 = load i8, i8* %coerce.dive4, align 1
  %call = call i8* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPbmNS_6detail21host_generate_functorINS6_12fill_functorIbEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %7)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPbmNS_6detail21host_generate_functorINS6_12fill_functorIbEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first, i64 %n, i8 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor.179", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor.179", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.179", %"struct.thrust::detail::host_generate_functor.179"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %coerce.dive, i32 0, i32 0
  store i8 %f.coerce, i8* %coerce.dive1, align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::host_generate_functor.179"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::host_generate_functor.179"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !177
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.179", %"struct.thrust::detail::host_generate_functor.179"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %coerce.dive3, i32 0, i32 0
  %6 = load i8, i8* %coerce.dive4, align 1
  %call5 = call i8* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPbmNS_6detail21host_generate_functorINS8_12fill_functorIbEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, i8* %2, i64 %3, i8 %6)
  ret i8* %call5
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIbEEEC2ES3_(%"struct.thrust::detail::host_generate_functor.179"* %this, i8 %g.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %g = alloca %"struct.thrust::detail::fill_functor.178", align 1
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor.179"*, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %g, i32 0, i32 0
  store i8 %g.coerce, i8* %coerce.dive, align 1
  store %"struct.thrust::detail::host_generate_functor.179"* %this, %"struct.thrust::detail::host_generate_functor.179"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::host_generate_functor.179"*, %"struct.thrust::detail::host_generate_functor.179"** %this.addr, align 8
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.179", %"struct.thrust::detail::host_generate_functor.179"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::fill_functor.178"* %gen to i8*
  %1 = bitcast %"struct.thrust::detail::fill_functor.178"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 1, i32 1, i1 false), !tbaa.struct !177
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPbmNS_6detail21host_generate_functorINS8_12fill_functorIbEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i8* %first, i64 %n, i8 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor.179", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.180", align 1
  %i = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.179", %"struct.thrust::detail::host_generate_functor.179"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %coerce.dive, i32 0, i32 0
  store i8 %f.coerce, i8* %coerce.dive1, align 1
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i8* %first, i8** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.180"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIbEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function.180"* %wrapped_f, %"struct.thrust::detail::host_generate_functor.179"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load i8*, i8** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIbEEEEvEclIbEEvRT_(%"struct.thrust::detail::wrapped_function.180"* %wrapped_f, i8* dereferenceable(1) %6)
  %7 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds i8, i8* %7, i32 1
  store i8* %incdec.ptr, i8** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load i8*, i8** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.180"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  ret i8* %9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIbEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function.180"* %this, %"struct.thrust::detail::host_generate_functor.179"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.180"*, align 8
  %f.addr = alloca %"struct.thrust::detail::host_generate_functor.179"*, align 8
  store %"struct.thrust::detail::wrapped_function.180"* %this, %"struct.thrust::detail::wrapped_function.180"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::host_generate_functor.179"* %f, %"struct.thrust::detail::host_generate_functor.179"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.180"*, %"struct.thrust::detail::wrapped_function.180"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.180", %"struct.thrust::detail::wrapped_function.180"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::host_generate_functor.179"*, %"struct.thrust::detail::host_generate_functor.179"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::host_generate_functor.179"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::host_generate_functor.179"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !177
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIbEEEEvEclIbEEvRT_(%"struct.thrust::detail::wrapped_function.180"* %this, i8* dereferenceable(1) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.180"*, align 8
  %x.addr = alloca i8*, align 8
  store %"struct.thrust::detail::wrapped_function.180"* %this, %"struct.thrust::detail::wrapped_function.180"** %this.addr, align 8, !tbaa !1
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.180"*, %"struct.thrust::detail::wrapped_function.180"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.180", %"struct.thrust::detail::wrapped_function.180"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %x.addr, align 8
  %call = call dereferenceable(1) i8* @_ZN6thrust18raw_reference_castIbEENS_6detail13raw_referenceIT_E4typeERS3_(i8* dereferenceable(1) %0)
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIbEEEclIbEEvRKT_(%"struct.thrust::detail::host_generate_functor.179"* %m_f, i8* dereferenceable(1) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIbEEEclIbEEvRKT_(%"struct.thrust::detail::host_generate_functor.179"* %this, i8* dereferenceable(1) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor.179"*, align 8
  %x.addr = alloca i8*, align 8
  %lvalue = alloca i8*, align 8
  store %"struct.thrust::detail::host_generate_functor.179"* %this, %"struct.thrust::detail::host_generate_functor.179"** %this.addr, align 8, !tbaa !1
  store i8* %x, i8** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::host_generate_functor.179"*, %"struct.thrust::detail::host_generate_functor.179"** %this.addr, align 8
  %0 = bitcast i8** %lvalue to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load i8*, i8** %x.addr, align 8
  store i8* %1, i8** %lvalue, align 8, !tbaa !7
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.179", %"struct.thrust::detail::host_generate_functor.179"* %this1, i32 0, i32 0
  %call = call zeroext i1 @_ZNK6thrust6detail12fill_functorIbEclEv(%"struct.thrust::detail::fill_functor.178"* %gen)
  %2 = load i8*, i8** %lvalue, align 8
  %frombool = zext i1 %call to i8
  store i8 %frombool, i8* %2, align 1, !tbaa !75
  %3 = bitcast i8** %lvalue to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust18raw_reference_castIbEENS_6detail13raw_referenceIT_E4typeERS3_(i8* dereferenceable(1) %ref) #8 comdat {
entry:
  %ref.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  store i8* %ref, i8** %ref.addr, align 8, !tbaa !7
  %0 = load i8*, i8** %ref.addr, align 8
  store i8* %0, i8** %ref.tmp, align 8, !tbaa !1
  %call = call i8* @_ZN6thrust16raw_pointer_castIPbEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i8** dereferenceable(8) %ref.tmp)
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail12fill_functorIbEclEv(%"struct.thrust::detail::fill_functor.178"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor.178"*, align 8
  store %"struct.thrust::detail::fill_functor.178"* %this, %"struct.thrust::detail::fill_functor.178"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::fill_functor.178"*, %"struct.thrust::detail::fill_functor.178"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor.178", %"struct.thrust::detail::fill_functor.178"* %this1, i32 0, i32 0
  %0 = load i8, i8* %exemplar, align 1, !tbaa !178, !range !77
  %tobool = trunc i8 %0 to i1
  ret i1 %tobool
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrust16raw_pointer_castIPbEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i8** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i8**, align 8
  store i8** %ptr, i8*** %ptr.addr, align 8, !tbaa !7
  %0 = load i8**, i8*** %ptr.addr, align 8
  %1 = load i8*, i8** %0, align 8, !tbaa !1
  %call = call i8* @_ZN6thrust6detail14pointer_traitsIPbE3getES2_(i8* %1)
  ret i8* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail14pointer_traitsIPbE3getES2_(i8* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i8*, align 8
  store i8* %ptr, i8** %ptr.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %ptr.addr, align 8, !tbaa !1
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemISaIbEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.76"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIbSaIbEE10deallocateEv(%"class.thrust::detail::contiguous_storage.75"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.79", align 8
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIbSaIbEE4sizeEv(%"class.thrust::detail::contiguous_storage.75"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.79"* %m_begin to %"class.thrust::iterator_adaptor.80"*
  %call2 = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.80"* %0)
  %1 = load i8*, i8** %call2, align 8, !tbaa !1
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIbSaIbEE4sizeEv(%"class.thrust::detail::contiguous_storage.75"* %this1)
  call void @_ZN6thrust6detail16allocator_traitsISaIbEE10deallocateERS2_Pbm(%"class.std::allocator.76"* dereferenceable(1) %m_allocator, i8* %1, i64 %call3)
  %m_begin4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPbEC2ES2_(%"class.thrust::detail::normal_iterator.79"* %ref.tmp, i8* null)
  %2 = bitcast %"class.thrust::detail::normal_iterator.79"* %m_begin4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.79"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !174
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIbSaIbEE4sizeEv(%"class.thrust::detail::contiguous_storage.75"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !174
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaIbEE10deallocateERS2_Pbm(%"class.std::allocator.76"* dereferenceable(1) %a, i8* %p, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  %1 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZZN6thrust6detail16allocator_traitsISaIbEE10deallocateERS2_PbmEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.76"* dereferenceable(1) %0, i8* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsISaIbEE10deallocateERS2_PbmEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.76"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.76"* %0 to %"class.__gnu_cxx::new_allocator.77"*
  %2 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorIbE10deallocateEPbm(%"class.__gnu_cxx::new_allocator.77"* %1, i8* %2, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIbE10deallocateEPbm(%"class.__gnu_cxx::new_allocator.77"* %this, i8* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.77"*, align 8
  %__p.addr = alloca i8*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.77"* %this, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8, !tbaa !1
  store i8* %__p, i8** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.77"*, %"class.__gnu_cxx::new_allocator.77"** %this.addr, align 8
  %1 = load i8*, i8** %__p.addr, align 8, !tbaa !1
  call void @_ZdlPv(i8* %1) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %op = alloca %"struct.unittest::random_integer.176", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %agg.tmp5 = alloca %"struct.unittest::random_integer.176", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::execution_policy.88"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp3, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %2 = bitcast %"class.thrust::detail::normal_iterator.79"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.79"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %agg.tmp4, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive6, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive7, align 8
  %call8 = call i8* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp3, i8* %4)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive9, i32 0, i32 0
  store i8* %call8, i8** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive11, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive12, align 8
  ret i8* %5
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPbEEN8unittest14random_integerIbLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i8* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %op = alloca %"struct.unittest::random_integer.176", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.181", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.181", align 8
  %agg.tmp2 = alloca %"class.thrust::tuple.183", align 8
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.181", align 8
  %agg.tmp4 = alloca %"class.thrust::tuple.183", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::unary_transform_functor.186", align 1
  %agg.tmp6 = alloca %"struct.unittest::random_integer.176", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.181"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.183"* sret %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %first, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.181"* sret %agg.tmp, %"class.thrust::tuple.183"* %agg.tmp2)
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.183"* sret %agg.tmp4, %"class.thrust::counting_iterator"* dereferenceable(8) %last, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.181"* sret %agg.tmp3, %"class.thrust::tuple.183"* %agg.tmp4)
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIbLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor.186"* %agg.tmp5)
  call void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPbEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator.181"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, %"class.thrust::zip_iterator.181"* %agg.tmp, %"class.thrust::zip_iterator.181"* %agg.tmp3)
  %call = call dereferenceable(16) %"class.thrust::tuple.183"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.181"* %zipped_result)
  %3 = bitcast %"class.thrust::tuple.183"* %call to %"struct.thrust::detail::cons.184"*
  %call7 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.184"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.79"* %retval to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.79"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.181"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %6) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  ret i8* %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPbEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator.181"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.181"* %first, %"class.thrust::zip_iterator.181"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor.186", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.181", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.181", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::unary_transform_functor.186", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.181"* %agg.tmp, %"class.thrust::zip_iterator.181"* dereferenceable(16) %first)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.181"* %agg.tmp2, %"class.thrust::zip_iterator.181"* dereferenceable(16) %last)
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor.186"* %agg.tmp3 to i8*
  %3 = bitcast %"struct.thrust::detail::unary_transform_functor.186"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPbEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator.181"* sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"class.thrust::zip_iterator.181"* %agg.tmp, %"class.thrust::zip_iterator.181"* %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.181"* noalias sret %agg.result, %"class.thrust::tuple.183"* %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.183", align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.183"* %agg.tmp, %"class.thrust::tuple.183"* dereferenceable(16) %t)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator.181"* %agg.result, %"class.thrust::tuple.183"* %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.183"* noalias sret %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %t1) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.79"* %t1, %"class.thrust::detail::normal_iterator.79"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple.183"* %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIbLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor.186"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.unittest::random_integer.176", align 1
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor.186"*, align 8
  store %"struct.thrust::detail::unary_transform_functor.186"* %this, %"struct.thrust::detail::unary_transform_functor.186"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor.186"*, %"struct.thrust::detail::unary_transform_functor.186"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor.186", %"struct.thrust::detail::unary_transform_functor.186"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.184"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  store %"struct.thrust::detail::cons.184"* %c, %"struct.thrust::detail::cons.184"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPbEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.184"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.79"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.183"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.181"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.181", %"class.thrust::zip_iterator.181"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.183"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPbEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator.181"* noalias sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"class.thrust::zip_iterator.181"* %first, %"class.thrust::zip_iterator.181"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor.186", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.187", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.188", align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %1 = bitcast %"struct.thrust::detail::wrapped_function.187"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.187"* %wrapped_f, %"struct.thrust::detail::unary_transform_functor.186"* dereferenceable(1) %f)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = bitcast %"class.thrust::zip_iterator.181"* %first to %"class.thrust::iterator_facade.182"*
  %3 = bitcast %"class.thrust::zip_iterator.181"* %last to %"class.thrust::iterator_facade.182"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.182"* dereferenceable(1) %2, %"class.thrust::iterator_facade.182"* dereferenceable(1) %3)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"class.thrust::zip_iterator.181"* %first to %"class.thrust::iterator_facade.182"*
  %call1 = call { i64, i8* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.182"* %4)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.188", %"class.thrust::detail::tuple_of_iterator_references.188"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %coerce.dive, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive2 to { i64, i8* }*
  %6 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %5, i32 0, i32 0
  %7 = extractvalue { i64, i8* } %call1, 0
  store i64 %7, i64* %6, align 8
  %8 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %5, i32 0, i32 1
  %9 = extractvalue { i64, i8* } %call1, 1
  store i8* %9, i8** %8, align 8
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRbNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.187"* %wrapped_f, %"class.thrust::detail::tuple_of_iterator_references.188"* dereferenceable(16) %ref.tmp)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %10 = bitcast %"class.thrust::zip_iterator.181"* %first to %"class.thrust::iterator_facade.182"*
  %call3 = call dereferenceable(16) %"class.thrust::zip_iterator.181"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.182"* %10)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator.181"* %agg.result, %"class.thrust::zip_iterator.181"* dereferenceable(16) %first)
  %11 = bitcast %"struct.thrust::detail::wrapped_function.187"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %11) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.181"* %0, %"class.thrust::zip_iterator.181"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.181"* %this1 to %"class.thrust::iterator_facade.182"*
  %2 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.181"* %2 to %"class.thrust::iterator_facade.182"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.181", %"class.thrust::zip_iterator.181"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator.181", %"class.thrust::zip_iterator.181"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.183"* %m_iterator_tuple, %"class.thrust::tuple.183"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.187"* %this, %"struct.thrust::detail::unary_transform_functor.186"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.187"*, align 8
  %f.addr = alloca %"struct.thrust::detail::unary_transform_functor.186"*, align 8
  store %"struct.thrust::detail::wrapped_function.187"* %this, %"struct.thrust::detail::wrapped_function.187"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::unary_transform_functor.186"* %f, %"struct.thrust::detail::unary_transform_functor.186"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.187"*, %"struct.thrust::detail::wrapped_function.187"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.187", %"struct.thrust::detail::wrapped_function.187"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::unary_transform_functor.186"*, %"struct.thrust::detail::unary_transform_functor.186"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::unary_transform_functor.186"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor.186"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.182"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.182"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.182"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.182"*, align 8
  store %"class.thrust::iterator_facade.182"* %lhs, %"class.thrust::iterator_facade.182"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.182"* %rhs, %"class.thrust::iterator_facade.182"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.182"*, %"class.thrust::iterator_facade.182"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.182"* %0 to %"class.thrust::zip_iterator.181"*
  %2 = load %"class.thrust::iterator_facade.182"*, %"class.thrust::iterator_facade.182"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.182"* %2 to %"class.thrust::zip_iterator.181"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator.181"* dereferenceable(16) %1, %"class.thrust::zip_iterator.181"* dereferenceable(16) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIbLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRbNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.187"* %this, %"class.thrust::detail::tuple_of_iterator_references.188"* dereferenceable(16) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.187"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.188"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.188", align 8
  store %"struct.thrust::detail::wrapped_function.187"* %this, %"struct.thrust::detail::wrapped_function.187"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.188"* %x, %"class.thrust::detail::tuple_of_iterator_references.188"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.187"*, %"struct.thrust::detail::wrapped_function.187"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.187", %"struct.thrust::detail::wrapped_function.187"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.188"*, %"class.thrust::detail::tuple_of_iterator_references.188"** %x.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references.188"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references.188"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.188"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.188"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.188"* %agg.tmp to { i64, i8* }*
  %4 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %3, i32 0, i32 0
  %5 = load i64, i64* %4, align 8
  %6 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %3, i32 0, i32 1
  %7 = load i8*, i8** %6, align 8
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIbLb0EEEEclINS0_28tuple_of_iterator_referencesImRbNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor.186"* %m_f, i64 %5, i8* %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.182"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.188", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.182"*, align 8
  store %"class.thrust::iterator_facade.182"* %this, %"class.thrust::iterator_facade.182"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.182"*, %"class.thrust::iterator_facade.182"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.181"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.182"* %this1)
  %call2 = call { i64, i8* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator.181"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.188", %"class.thrust::detail::tuple_of_iterator_references.188"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %coerce.dive, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive3 to { i64, i8* }*
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i8* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i8* } %call2, 1
  store i8* %4, i8** %3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.188", %"class.thrust::detail::tuple_of_iterator_references.188"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %coerce.dive4, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive5 to { i64, i8* }*
  %6 = load { i64, i8* }, { i64, i8* }* %5, align 8
  ret { i64, i8* } %6
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.181"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.182"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.182"*, align 8
  store %"class.thrust::iterator_facade.182"* %this, %"class.thrust::iterator_facade.182"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.182"*, %"class.thrust::iterator_facade.182"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.181"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.182"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator.181"* dereferenceable(16) %call)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.181"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.182"* %this1)
  ret %"class.thrust::zip_iterator.181"* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.181"* %0, %"class.thrust::zip_iterator.181"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.181"* %this1 to %"class.thrust::iterator_facade.182"*
  %2 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.181"* %2 to %"class.thrust::iterator_facade.182"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.181", %"class.thrust::zip_iterator.181"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator.181", %"class.thrust::zip_iterator.181"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple.183"* %m_iterator_tuple, %"class.thrust::tuple.183"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator.181"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.181"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %f1, %"class.thrust::zip_iterator.181"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.181"* %f2, %"class.thrust::zip_iterator.181"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.181"* %0, %"class.thrust::zip_iterator.181"* dereferenceable(16) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.181"* %other, %"class.thrust::zip_iterator.181"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.183"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.181"* %this1)
  %0 = bitcast %"class.thrust::tuple.183"* %call to %"struct.thrust::detail::cons.184"*
  %call2 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.184"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::counting_iterator"* %call2 to %"class.thrust::iterator_facade.84"*
  %2 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %other.addr, align 8
  %call3 = call dereferenceable(16) %"class.thrust::tuple.183"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.181"* %2)
  %3 = bitcast %"class.thrust::tuple.183"* %call3 to %"struct.thrust::detail::cons.184"*
  %call4 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.184"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::counting_iterator"* %call4 to %"class.thrust::iterator_facade.84"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxS3_mS4_S5_mxEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNS6_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.84"* dereferenceable(1) %1, %"class.thrust::iterator_facade.84"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.184"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  store %"struct.thrust::detail::cons.184"* %c, %"struct.thrust::detail::cons.184"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPbEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.184"* dereferenceable(16) %0)
  ret %"class.thrust::counting_iterator"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPbEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.184"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  store %"struct.thrust::detail::cons.184"* %t, %"struct.thrust::detail::cons.184"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %0, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIbLb0EEEEclINS0_28tuple_of_iterator_referencesImRbNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor.186"* %this, i64 %t.coerce0, i8* %t.coerce1) #8 comdat align 2 {
entry:
  %t = alloca %"class.thrust::detail::tuple_of_iterator_references.188", align 8
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor.186"*, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.188"* %t to { i64, i8* }*
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 0
  store i64 %t.coerce0, i64* %1, align 8
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 1
  store i8* %t.coerce1, i8** %2, align 8
  store %"struct.thrust::detail::unary_transform_functor.186"* %this, %"struct.thrust::detail::unary_transform_functor.186"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor.186"*, %"struct.thrust::detail::unary_transform_functor.186"** %this.addr, align 8
  %f = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor.186", %"struct.thrust::detail::unary_transform_functor.186"* %this1, i32 0, i32 0
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.188"* %t to %"struct.thrust::detail::cons.190"*
  %call = call dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRbNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.190"* dereferenceable(16) %3)
  %4 = load i64, i64* %call, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %call2 = call zeroext i1 @_ZNK8unittest14random_integerIbLb0EEclEj(%"struct.unittest::random_integer.176"* %f, i32 %conv)
  %5 = bitcast %"class.thrust::detail::tuple_of_iterator_references.188"* %t to %"struct.thrust::detail::cons.190"*
  %call3 = call dereferenceable(1) i8* @_ZN6thrust3getILi1EmNS_6detail4consIRbNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.190"* dereferenceable(16) %5)
  %frombool = zext i1 %call2 to i8
  store i8 %frombool, i8* %call3, align 1, !tbaa !75
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references.188"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references.188"* dereferenceable(16) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.188"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.188"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.188"* %ref, %"class.thrust::detail::tuple_of_iterator_references.188"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.188"*, %"class.thrust::detail::tuple_of_iterator_references.188"** %ref.addr, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.188"* %0, %"class.thrust::detail::tuple_of_iterator_references.188"** %ref.tmp, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.188"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references.188"** dereferenceable(8) %ref.tmp)
  ret %"class.thrust::detail::tuple_of_iterator_references.188"* %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK8unittest14random_integerIbLb0EEclEj(%"struct.unittest::random_integer.176"* %this, i32 %i) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::random_integer.176"*, align 8
  %i.addr = alloca i32, align 4
  %rng = alloca %"class.thrust::random::linear_congruential_engine", align 4
  %dist = alloca %"class.thrust::random::uniform_int_distribution.192", align 4
  store %"struct.unittest::random_integer.176"* %this, %"struct.unittest::random_integer.176"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"struct.unittest::random_integer.176"*, %"struct.unittest::random_integer.176"** %this.addr, align 8
  %0 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %i.addr, align 4, !tbaa !11
  %call = call i32 @_ZN8unittest4hashEj(i32 %1)
  call void @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEC2Ej(%"class.thrust::random::linear_congruential_engine"* %rng, i32 %call)
  %2 = bitcast %"class.thrust::random::uniform_int_distribution.192"* %dist to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  call void @_ZN6thrust6random24uniform_int_distributionIjEC2Ejj(%"class.thrust::random::uniform_int_distribution.192"* %dist, i32 0, i32 1)
  %call2 = call i32 @_ZN6thrust6random24uniform_int_distributionIjEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEjRT_(%"class.thrust::random::uniform_int_distribution.192"* %dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %rng)
  %cmp = icmp eq i32 %call2, 1
  %3 = bitcast %"class.thrust::random::uniform_int_distribution.192"* %dist to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  %4 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.end(i64 4, i8* %4) #5
  ret i1 %cmp
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRbNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.190"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.190"*, align 8
  store %"struct.thrust::detail::cons.190"* %c, %"struct.thrust::detail::cons.190"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.190"*, %"struct.thrust::detail::cons.190"** %c.addr, align 8
  %call = call dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRbNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.190"* dereferenceable(16) %0)
  ret i64* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust3getILi1EmNS_6detail4consIRbNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.190"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.190"*, align 8
  store %"struct.thrust::detail::cons.190"* %c, %"struct.thrust::detail::cons.190"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.190"*, %"struct.thrust::detail::cons.190"** %c.addr, align 8
  %call = call dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi1EE3getIRbmNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.190"* dereferenceable(16) %0)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6random24uniform_int_distributionIjEC2Ejj(%"class.thrust::random::uniform_int_distribution.192"* %this, i32 %a, i32 %b) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.192"*, align 8
  %a.addr = alloca i32, align 4
  %b.addr = alloca i32, align 4
  store %"class.thrust::random::uniform_int_distribution.192"* %this, %"class.thrust::random::uniform_int_distribution.192"** %this.addr, align 8, !tbaa !1
  store i32 %a, i32* %a.addr, align 4, !tbaa !11
  store i32 %b, i32* %b.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::random::uniform_int_distribution.192"*, %"class.thrust::random::uniform_int_distribution.192"** %this.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution.192", %"class.thrust::random::uniform_int_distribution.192"* %this1, i32 0, i32 0
  call void @_ZN6thrust4pairIjjEC2ERKjS3_(%"struct.thrust::pair.193"* %m_param, i32* dereferenceable(4) %a.addr, i32* dereferenceable(4) %b.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6random24uniform_int_distributionIjEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEjRT_(%"class.thrust::random::uniform_int_distribution.192"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.192"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  store %"class.thrust::random::uniform_int_distribution.192"* %this, %"class.thrust::random::uniform_int_distribution.192"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution.192"*, %"class.thrust::random::uniform_int_distribution.192"** %this.addr, align 8
  %0 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution.192", %"class.thrust::random::uniform_int_distribution.192"* %this1, i32 0, i32 0
  %call = call i32 @_ZN6thrust6random24uniform_int_distributionIjEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEjRT_RKNS_4pairIjjEE(%"class.thrust::random::uniform_int_distribution.192"* %this1, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %0, %"struct.thrust::pair.193"* dereferenceable(8) %m_param)
  ret i32 %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIjjEC2ERKjS3_(%"struct.thrust::pair.193"* %this, i32* dereferenceable(4) %x, i32* dereferenceable(4) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.193"*, align 8
  %x.addr = alloca i32*, align 8
  %y.addr = alloca i32*, align 8
  store %"struct.thrust::pair.193"* %this, %"struct.thrust::pair.193"** %this.addr, align 8, !tbaa !1
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  store i32* %y, i32** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.193"*, %"struct.thrust::pair.193"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.193", %"struct.thrust::pair.193"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %x.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  store i32 %1, i32* %first, align 4, !tbaa !180
  %second = getelementptr inbounds %"struct.thrust::pair.193", %"struct.thrust::pair.193"* %this1, i32 0, i32 1
  %2 = load i32*, i32** %y.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  store i32 %3, i32* %second, align 4, !tbaa !182
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6random24uniform_int_distributionIjEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEjRT_RKNS_4pairIjjEE(%"class.thrust::random::uniform_int_distribution.192"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng, %"struct.thrust::pair.193"* dereferenceable(8) %parm) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.192"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  %parm.addr = alloca %"struct.thrust::pair.193"*, align 8
  %real_min = alloca double, align 8
  %real_max = alloca double, align 8
  %real_dist = alloca %"class.thrust::random::uniform_real_distribution", align 8
  store %"class.thrust::random::uniform_int_distribution.192"* %this, %"class.thrust::random::uniform_int_distribution.192"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.193"* %parm, %"struct.thrust::pair.193"** %parm.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution.192"*, %"class.thrust::random::uniform_int_distribution.192"** %this.addr, align 8
  %0 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::pair.193"*, %"struct.thrust::pair.193"** %parm.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.193", %"struct.thrust::pair.193"* %1, i32 0, i32 0
  %2 = load i32, i32* %first, align 4, !tbaa !180
  %conv = uitofp i32 %2 to double
  store double %conv, double* %real_min, align 8, !tbaa !44
  %3 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::pair.193"*, %"struct.thrust::pair.193"** %parm.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.193", %"struct.thrust::pair.193"* %4, i32 0, i32 1
  %5 = load i32, i32* %second, align 4, !tbaa !182
  %conv2 = uitofp i32 %5 to double
  store double %conv2, double* %real_max, align 8, !tbaa !44
  %6 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.start(i64 16, i8* %6) #5
  %7 = load double, double* %real_min, align 8, !tbaa !44
  %8 = load double, double* %real_max, align 8, !tbaa !44
  %add = fadd double %8, 1.000000e+00
  call void @_ZN6thrust6random25uniform_real_distributionIdEC2Edd(%"class.thrust::random::uniform_real_distribution"* %real_dist, double %7, double %add)
  %9 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %call = call double @_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_(%"class.thrust::random::uniform_real_distribution"* %real_dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %9)
  %conv3 = fptoui double %call to i32
  %10 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.end(i64 16, i8* %10) #5
  %11 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.end(i64 8, i8* %11) #5
  %12 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret i32 %conv3
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRbNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.190"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.190"*, align 8
  store %"struct.thrust::detail::cons.190"* %t, %"struct.thrust::detail::cons.190"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.190"*, %"struct.thrust::detail::cons.190"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.190", %"struct.thrust::detail::cons.190"* %0, i32 0, i32 0
  ret i64* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi1EE3getIRbmNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.190"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.190"*, align 8
  store %"struct.thrust::detail::cons.190"* %t, %"struct.thrust::detail::cons.190"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.190"*, %"struct.thrust::detail::cons.190"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.190", %"struct.thrust::detail::cons.190"* %0, i32 0, i32 1
  %call = call dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRbS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.191"* dereferenceable(8) %tail)
  ret i8* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail9get_classILi0EE3getIRbS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.191"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.191"*, align 8
  store %"struct.thrust::detail::cons.191"* %t, %"struct.thrust::detail::cons.191"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.191"*, %"struct.thrust::detail::cons.191"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.191", %"struct.thrust::detail::cons.191"* %0, i32 0, i32 0
  %ref = load i8*, i8** %head, align 8, !tbaa !7
  ret i8* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.188"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references.188"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.188"**, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.188"** %ptr, %"class.thrust::detail::tuple_of_iterator_references.188"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.188"**, %"class.thrust::detail::tuple_of_iterator_references.188"*** %ptr.addr, align 8
  %1 = load %"class.thrust::detail::tuple_of_iterator_references.188"*, %"class.thrust::detail::tuple_of_iterator_references.188"** %0, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.188"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references.188"* %1)
  ret %"class.thrust::detail::tuple_of_iterator_references.188"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.188"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRbNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references.188"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.188"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.188"* %ptr, %"class.thrust::detail::tuple_of_iterator_references.188"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.188"*, %"class.thrust::detail::tuple_of_iterator_references.188"** %ptr.addr, align 8, !tbaa !1
  ret %"class.thrust::detail::tuple_of_iterator_references.188"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator.181"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.188", align 8
  %f.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %f, %"class.thrust::zip_iterator.181"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %f.addr, align 8
  %call = call { i64, i8* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator.181"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.188", %"class.thrust::detail::tuple_of_iterator_references.188"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %coerce.dive, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive1 to { i64, i8* }*
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i8* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i8* } %call, 1
  store i8* %5, i8** %4, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.188", %"class.thrust::detail::tuple_of_iterator_references.188"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %coerce.dive2, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive3 to { i64, i8* }*
  %7 = load { i64, i8* }, { i64, i8* }* %6, align 8
  ret { i64, i8* } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.181"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.182"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.182"*, align 8
  store %"class.thrust::iterator_facade.182"* %this, %"class.thrust::iterator_facade.182"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.182"*, %"class.thrust::iterator_facade.182"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.182"* %this1 to %"class.thrust::zip_iterator.181"*
  ret %"class.thrust::zip_iterator.181"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator.181"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.188", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.189", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.183"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.181"* %this1)
  %call2 = call { i64, i8* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple.183"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %ref.tmp, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive to { i64, i8* }*
  %1 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i8* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i8* } %call2, 1
  store i8* %4, i8** %3, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesImRbNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references.188"* %retval, %"class.thrust::tuple.189"* dereferenceable(16) %ref.tmp)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.188", %"class.thrust::detail::tuple_of_iterator_references.188"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %coerce.dive3, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive4 to { i64, i8* }*
  %6 = load { i64, i8* }, { i64, i8* }* %5, align 8
  ret { i64, i8* } %6
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple.183"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.189", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.183"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.183"* %t, %"class.thrust::tuple.183"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %t.addr, align 8
  %call = call { i64, i8* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple.183"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive to { i64, i8* }*
  %2 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i8* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i8* }, { i64, i8* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i8* } %call, 1
  store i8* %5, i8** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive1 to { i64, i8* }*
  %7 = load { i64, i8* }, { i64, i8* }* %6, align 8
  ret { i64, i8* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesImRbNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references.188"* %this, %"class.thrust::tuple.189"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.188"*, align 8
  %other.addr = alloca %"class.thrust::tuple.189"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.188"* %this, %"class.thrust::detail::tuple_of_iterator_references.188"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.189"* %other, %"class.thrust::tuple.189"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.188"*, %"class.thrust::detail::tuple_of_iterator_references.188"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.188"* %this1 to %"class.thrust::tuple.189"*
  %1 = load %"class.thrust::tuple.189"*, %"class.thrust::tuple.189"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.189"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.189"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i8* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple.183"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.189", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.183"*, align 8
  %ref.tmp = alloca i64, align 8
  store %"class.thrust::tuple.183"* %t, %"class.thrust::tuple.183"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.183"* %0 to %"struct.thrust::detail::cons.184"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.184"* dereferenceable(16) %1)
  %call1 = call i64 @_ZN6thrust6detail20dereference_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  store i64 %call1, i64* %ref.tmp, align 8, !tbaa !13
  %2 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.183"* %2 to %"struct.thrust::detail::cons.184"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPbEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.184"* dereferenceable(16) %3)
  %call3 = call dereferenceable(1) i8* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPbEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %call2)
  call void @_ZN6thrust5tupleImRbNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.189"* %retval, i64* dereferenceable(8) %ref.tmp, i8* dereferenceable(1) %call3)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.189", %"class.thrust::tuple.189"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.190"* %coerce.dive to { i64, i8* }*
  %5 = load { i64, i8* }, { i64, i8* }* %4, align 8
  ret { i64, i8* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPbEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.79"* %it, %"class.thrust::detail::normal_iterator.79"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.79"* %0 to %"class.thrust::iterator_facade.81"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEdeEv(%"class.thrust::iterator_facade.81"* %1)
  ret i8* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleImRbNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.189"* %this, i64* dereferenceable(8) %t0, i8* dereferenceable(1) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.189"*, align 8
  %t0.addr = alloca i64*, align 8
  %t1.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.189"* %this, %"class.thrust::tuple.189"** %this.addr, align 8, !tbaa !1
  store i64* %t0, i64** %t0.addr, align 8, !tbaa !7
  store i8* %t1, i8** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.189"*, %"class.thrust::tuple.189"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.189"* %this1 to %"struct.thrust::detail::cons.190"*
  %1 = load i64*, i64** %t0.addr, align 8
  %2 = load i8*, i8** %t1.addr, align 8
  call void @_ZN6thrust6detail4consImNS1_IRbNS_9null_typeEEEEC2IKmbKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.190"* %0, i64* dereferenceable(8) %1, i8* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEdeEv(%"class.thrust::iterator_facade.81"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.81"*, align 8
  store %"class.thrust::iterator_facade.81"* %this, %"class.thrust::iterator_facade.81"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.81"*, %"class.thrust::iterator_facade.81"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv(%"class.thrust::iterator_facade.81"* %this1)
  %call2 = call dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPbEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %call)
  ret i8* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPbEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  store %"class.thrust::detail::normal_iterator.79"* %f, %"class.thrust::detail::normal_iterator.79"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.79"* %0 to %"class.thrust::iterator_adaptor.80"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor.80"* %1)
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv(%"class.thrust::iterator_facade.81"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.81"*, align 8
  store %"class.thrust::iterator_facade.81"* %this, %"class.thrust::iterator_facade.81"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.81"*, %"class.thrust::iterator_facade.81"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.81"* %this1 to %"class.thrust::detail::normal_iterator.79"*
  ret %"class.thrust::detail::normal_iterator.79"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor.80"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.80"*, align 8
  store %"class.thrust::iterator_adaptor.80"* %this, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.80"*, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !175
  ret i8* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consImNS1_IRbNS_9null_typeEEEEC2IKmbKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.190"* %this, i64* dereferenceable(8) %t1, i8* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.190"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca i8*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.190"* %this, %"struct.thrust::detail::cons.190"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store i8* %t2, i8** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.190"*, %"struct.thrust::detail::cons.190"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.190", %"struct.thrust::detail::cons.190"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !183
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.190", %"struct.thrust::detail::cons.190"* %this1, i32 0, i32 1
  %2 = load i8*, i8** %t2.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRbNS_9null_typeEEC2IbEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.191"* %tail, i8* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRbNS_9null_typeEEC2IbEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.191"* %this, i8* dereferenceable(1) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.191"*, align 8
  %t1.addr = alloca i8*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.191"* %this, %"struct.thrust::detail::cons.191"** %this.addr, align 8, !tbaa !1
  store i8* %t1, i8** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.191"*, %"struct.thrust::detail::cons.191"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.191", %"struct.thrust::detail::cons.191"* %this9, i32 0, i32 0
  %9 = load i8*, i8** %t1.addr, align 8
  store i8* %9, i8** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPbEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator.181"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %f, %"class.thrust::zip_iterator.181"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator.181"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.181"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImbSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRbSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.182"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.182"*, align 8
  store %"class.thrust::iterator_facade.182"* %this, %"class.thrust::iterator_facade.182"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.182"*, %"class.thrust::iterator_facade.182"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.182"* %this1 to %"class.thrust::zip_iterator.181"*
  ret %"class.thrust::zip_iterator.181"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator.181"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.181", %"class.thrust::zip_iterator.181"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple.183"* dereferenceable(16) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPbEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple.183"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.183"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.183"* %t, %"class.thrust::tuple.183"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.183"* %0 to %"struct.thrust::detail::cons.184"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.184"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.183"* %2 to %"struct.thrust::detail::cons.184"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.185"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.184"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPbEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.185"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.184"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  store %"struct.thrust::detail::cons.184"* %this, %"struct.thrust::detail::cons.184"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %this1, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPbEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.185"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.185"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.185"* %t, %"struct.thrust::detail::cons.185"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.185"*, %"struct.thrust::detail::cons.185"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.185"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPbEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.185"*, %"struct.thrust::detail::cons.185"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.185"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.185"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.184"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  store %"struct.thrust::detail::cons.184"* %this, %"struct.thrust::detail::cons.184"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.185"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPbEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.79"* %it, %"class.thrust::detail::normal_iterator.79"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.79"* %0 to %"class.thrust::iterator_facade.81"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEppEv(%"class.thrust::iterator_facade.81"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.185"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.185"*, align 8
  store %"struct.thrust::detail::cons.185"* %this, %"struct.thrust::detail::cons.185"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.185"*, %"struct.thrust::detail::cons.185"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.185", %"struct.thrust::detail::cons.185"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.79"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.185"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.185"*, align 8
  store %"struct.thrust::detail::cons.185"* %this, %"struct.thrust::detail::cons.185"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.185"*, %"struct.thrust::detail::cons.185"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEppEv(%"class.thrust::iterator_facade.81"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.81"*, align 8
  store %"class.thrust::iterator_facade.81"* %this, %"class.thrust::iterator_facade.81"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.81"*, %"class.thrust::iterator_facade.81"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv(%"class.thrust::iterator_facade.81"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPbEEEEvRT_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv(%"class.thrust::iterator_facade.81"* %this1)
  ret %"class.thrust::detail::normal_iterator.79"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPbEEEEvRT_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  store %"class.thrust::detail::normal_iterator.79"* %f, %"class.thrust::detail::normal_iterator.79"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.79"* %0 to %"class.thrust::iterator_adaptor.80"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor.80"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv(%"class.thrust::iterator_facade.81"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.81"*, align 8
  store %"class.thrust::iterator_facade.81"* %this, %"class.thrust::iterator_facade.81"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.81"*, %"class.thrust::iterator_facade.81"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.81"* %this1 to %"class.thrust::detail::normal_iterator.79"*
  ret %"class.thrust::detail::normal_iterator.79"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor.80"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.80"*, align 8
  store %"class.thrust::iterator_adaptor.80"* %this, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.80"*, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !175
  %incdec.ptr = getelementptr inbounds i8, i8* %0, i32 1
  store i8* %incdec.ptr, i8** %m_iterator, align 8, !tbaa !175
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple.183"* %this, %"class.thrust::tuple.183"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.183"*, align 8
  %.addr = alloca %"class.thrust::tuple.183"*, align 8
  store %"class.thrust::tuple.183"* %this, %"class.thrust::tuple.183"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.183"* %0, %"class.thrust::tuple.183"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple.183"* %this1 to %"struct.thrust::detail::cons.184"*
  %2 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple.183"* %2 to %"struct.thrust::detail::cons.184"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.184"* %1, %"struct.thrust::detail::cons.184"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.184"* %this, %"struct.thrust::detail::cons.184"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  %.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  store %"struct.thrust::detail::cons.184"* %this, %"struct.thrust::detail::cons.184"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::cons.184"* %0, %"struct.thrust::detail::cons.184"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %.addr, align 8
  %head2 = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %1, i32 0, i32 0
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %head2)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %.addr, align 8
  %tail3 = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %2, i32 0, i32 1
  %3 = bitcast %"struct.thrust::detail::cons.185"* %tail to i8*
  %4 = bitcast %"struct.thrust::detail::cons.185"* %tail3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.183"* %this, %"class.thrust::tuple.183"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.183"*, align 8
  %.addr = alloca %"class.thrust::tuple.183"*, align 8
  store %"class.thrust::tuple.183"* %this, %"class.thrust::tuple.183"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.183"* %0, %"class.thrust::tuple.183"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple.183"* %this1 to %"struct.thrust::detail::cons.184"*
  %2 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple.183"* %2 to %"struct.thrust::detail::cons.184"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.184"* %1, %"struct.thrust::detail::cons.184"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPbEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator.181"* %this, %"class.thrust::tuple.183"* %iterator_tuple) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.181"*, align 8
  store %"class.thrust::zip_iterator.181"* %this, %"class.thrust::zip_iterator.181"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.181"*, %"class.thrust::zip_iterator.181"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.181"* %this1 to %"class.thrust::iterator_facade.182"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.181", %"class.thrust::zip_iterator.181"* %this1, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.183"* %m_iterator_tuple, %"class.thrust::tuple.183"* dereferenceable(16) %iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPbEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple.183"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.183"*, align 8
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.183"* %this, %"class.thrust::tuple.183"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.79"* %t1, %"class.thrust::detail::normal_iterator.79"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.183"*, %"class.thrust::tuple.183"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.183"* %this1 to %"struct.thrust::detail::cons.184"*
  %1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.184"* %0, %"class.thrust::counting_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPbEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.184"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  %t1.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.184"* %this, %"struct.thrust::detail::cons.184"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t1, %"class.thrust::counting_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.79"* %t2, %"class.thrust::detail::normal_iterator.79"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t1.addr, align 8
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %0)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.185"* %tail, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPbEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.185"* %this, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.185"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.185"* %this, %"struct.thrust::detail::cons.185"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.79"* %t1, %"class.thrust::detail::normal_iterator.79"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.185"*, %"struct.thrust::detail::cons.185"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.185", %"struct.thrust::detail::cons.185"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.79"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.79"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPbEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.184"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.184"*, align 8
  store %"struct.thrust::detail::cons.184"* %t, %"struct.thrust::detail::cons.184"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.184"*, %"struct.thrust::detail::cons.184"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.184", %"struct.thrust::detail::cons.184"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPbEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.185"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.79"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPbEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.185"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.185"*, align 8
  store %"struct.thrust::detail::cons.185"* %t, %"struct.thrust::detail::cons.185"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.185"*, %"struct.thrust::detail::cons.185"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.185", %"struct.thrust::detail::cons.185"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.79"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6detail18contiguous_storageIbSaIbEE5beginEv(%"class.thrust::detail::contiguous_storage.75"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.79"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.79"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive2, align 8
  ret i8* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaSaIaEEC2IbSaIbEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base.74"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  %ref.tmp = alloca %"class.std::allocator.42", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.74"* %v, %"class.thrust::detail::vector_base.74"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  call void @_ZNSaIaEC2Ev(%"class.std::allocator.42"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageIaSaIaEEC2ERKS2_(%"class.thrust::detail::contiguous_storage"* %m_storage, %"class.std::allocator.42"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.43"*)* @_ZN9__gnu_cxx13new_allocatorIaED2Ev to void (%"class.std::allocator.42"*)*)(%"class.std::allocator.42"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !30
  %0 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %v.addr, align 8
  %call = invoke i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %v.addr, align 8
  %call7 = invoke i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE3endEv(%"class.thrust::detail::vector_base.74"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  store i8* %call7, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive10, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive12, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseIaSaIaEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_(%"class.thrust::detail::vector_base"* %this1, i8* %2, i8* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.43"*)* @_ZN9__gnu_cxx13new_allocatorIaED2Ev to void (%"class.std::allocator.42"*)*)(%"class.std::allocator.42"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEED2Ev(%"class.thrust::detail::contiguous_storage"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaSaIaEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_(%"class.thrust::detail::vector_base"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive9, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseIaSaIaEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base"* %this4, i8* %4, i8* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.74", %"class.thrust::detail::vector_base.74"* %this1, i32 0, i32 0
  %call = call i8* @_ZNK6thrust6detail18contiguous_storageIbSaIbEE5beginEv(%"class.thrust::detail::contiguous_storage.75"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive3, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE3endEv(%"class.thrust::detail::vector_base.74"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %call = call i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIbSaIbEE4sizeEv(%"class.thrust::detail::vector_base.74"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive4, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaSaIaEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i8* %6, i8* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive12, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive14, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseIaSaIaEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIaS2_EE(%"class.thrust::detail::vector_base"* %this4, i64 %8, i8* %13, i8* %14, %"class.thrust::detail::contiguous_storage"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !30
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i8* %first.coerce, i8* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive8, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i8* %4, i8* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIaSaIaEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIaS2_EE(%"class.thrust::detail::vector_base"* %this, i64 %requested_size, i8* %first.coerce, i8* %last.coerce, %"class.thrust::detail::contiguous_storage"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp42 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp47 = alloca %"class.thrust::detail::normal_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage"* %new_storage, %"class.thrust::detail::contiguous_storage"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEE10deallocateEv(%"class.thrust::detail::contiguous_storage"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE8capacityEv(%"class.thrust::detail::vector_base"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE8max_sizeEv(%"class.thrust::detail::vector_base"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup57

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIaSaIaEE8allocateEm(%"class.thrust::detail::contiguous_storage"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %new_storage.addr, align 8
  %call21 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaSaIaEE5beginEv(%"class.thrust::detail::contiguous_storage"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive22, i32 0, i32 0
  store i8* %call21, i8** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive24, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive25, align 8
  %coerce.dive26 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp17, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive26, i32 0, i32 0
  %20 = load i8*, i8** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp18, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive28, i32 0, i32 0
  %21 = load i8*, i8** %coerce.dive29, align 8
  %call31 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaSaIaEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPaEET_SB_SA_(%"class.thrust::detail::contiguous_storage"* %m_storage, i8* %19, i8* %20, i8* %21)
          to label %invoke.cont30 unwind label %lpad19

invoke.cont30:                                    ; preds = %invoke.cont20
  %coerce.dive32 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %coerce, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive32, i32 0, i32 0
  store i8* %call31, i8** %coerce.dive33, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %new_storage.addr, align 8
  %call36 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaSaIaEE5beginEv(%"class.thrust::detail::contiguous_storage"* %27)
          to label %invoke.cont35 unwind label %lpad34

invoke.cont35:                                    ; preds = %catch
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %new_storage_end, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive37, i32 0, i32 0
  store i8* %call36, i8** %coerce.dive38, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPaEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont40 unwind label %lpad39

invoke.cont40:                                    ; preds = %invoke.cont35
  %m_storage41 = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %new_storage.addr, align 8
  %call44 = invoke i8* @_ZN6thrust6detail18contiguous_storageIaSaIaEE5beginEv(%"class.thrust::detail::contiguous_storage"* %29)
          to label %invoke.cont43 unwind label %lpad39

invoke.cont43:                                    ; preds = %invoke.cont40
  %coerce.dive45 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp42, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive45, i32 0, i32 0
  store i8* %call44, i8** %coerce.dive46, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp47 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp42, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive48, i32 0, i32 0
  %32 = load i8*, i8** %coerce.dive49, align 8
  %coerce.dive50 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp47, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive50, i32 0, i32 0
  %33 = load i8*, i8** %coerce.dive51, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaSaIaEE7destroyENS0_15normal_iteratorIPaEES6_(%"class.thrust::detail::contiguous_storage"* %m_storage41, i8* %32, i8* %33)
          to label %invoke.cont52 unwind label %lpad39

invoke.cont52:                                    ; preds = %invoke.cont43
  %34 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIaSaIaEE10deallocateEv(%"class.thrust::detail::contiguous_storage"* %34)
          to label %invoke.cont53 unwind label %lpad39

invoke.cont53:                                    ; preds = %invoke.cont52
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad39

lpad34:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup55

lpad39:                                           ; preds = %invoke.cont53, %invoke.cont52, %invoke.cont43, %invoke.cont40, %invoke.cont35
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup55

ehcleanup55:                                      ; preds = %lpad39, %lpad34
  invoke void @__cxa_end_catch()
          to label %invoke.cont56 unwind label %terminate.lpad

invoke.cont56:                                    ; preds = %ehcleanup55
  br label %ehcleanup57

try.cont:                                         ; preds = %invoke.cont30
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup57:                                      ; preds = %invoke.cont56, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup57
  %exn58 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn58, 0
  %lpad.val59 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val59

terminate.lpad:                                   ; preds = %ehcleanup55
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont53, %invoke.cont14
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i8* %first.coerce, i8* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i8* %4, i8* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i8* %first.coerce, i8* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to %"class.thrust::iterator_facade.196"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to %"class.thrust::iterator_facade.196"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.196"* dereferenceable(1) %1, %"class.thrust::iterator_facade.196"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.196"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.196"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  store %"class.thrust::iterator_facade.196"* %lhs, %"class.thrust::iterator_facade.196"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.196"* %rhs, %"class.thrust::iterator_facade.196"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.196"* %0 to %"class.thrust::detail::normal_iterator.194"*
  %2 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.196"* %2 to %"class.thrust::detail::normal_iterator.194"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKbEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKbEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.194"* %f1, %"class.thrust::detail::normal_iterator.194"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.194"* %f2, %"class.thrust::detail::normal_iterator.194"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKbEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKbEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  store %"class.thrust::detail::normal_iterator.194"* %f1, %"class.thrust::detail::normal_iterator.194"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.194"* %f2, %"class.thrust::detail::normal_iterator.194"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %1 to %"class.thrust::iterator_adaptor.195"*
  %3 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %3 to %"class.thrust::iterator_adaptor.195"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.195"* %2, %"class.thrust::iterator_adaptor.195"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  store %"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.195"* %y, %"class.thrust::iterator_adaptor.195"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %y.addr, align 8
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.195"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %this1, i32 0, i32 0
  %2 = load i8*, i8** %m_iterator, align 8, !tbaa !186
  %sub.ptr.lhs.cast = ptrtoint i8* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i8* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  ret i64 %sub.ptr.sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.195"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  store %"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE8capacityEv(%"class.thrust::detail::vector_base"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIaSaIaEE4sizeEv(%"class.thrust::detail::contiguous_storage"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIaSaIaEE8max_sizeEv(%"class.thrust::detail::vector_base"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base"*, align 8
  store %"class.thrust::detail::vector_base"* %this, %"class.thrust::detail::vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base"*, %"class.thrust::detail::vector_base"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base", %"class.thrust::detail::vector_base"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIaSaIaEE8max_sizeEv(%"class.thrust::detail::contiguous_storage"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail18contiguous_storageIaSaIaEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPaEET_SB_SA_(%"class.thrust::detail::contiguous_storage"* %this, i8* %first.coerce, i8* %last.coerce, i8* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %result = alloca %"class.thrust::detail::normal_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive4, i32 0, i32 0
  store i8* %result.coerce, i8** %coerce.dive5, align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this6 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this6, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator"* %result to %"class.thrust::iterator_adaptor"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %6)
  %7 = load i8*, i8** %call, align 8, !tbaa !1
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive10, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive11, align 8
  %call12 = call i8* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIaENS0_15normal_iteratorIPKbEEPaEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.std::allocator.42"* dereferenceable(1) %m_allocator, i8* %8, i8* %9, i8* %7)
  call void @_ZN6thrust6detail15normal_iteratorIPaEC2ES2_(%"class.thrust::detail::normal_iterator"* %retval, i8* %call12)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %retval, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive13, i32 0, i32 0
  %11 = load i8*, i8** %coerce.dive14, align 8
  ret i8* %11
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIaSaIaEE7destroyENS0_15normal_iteratorIPaEES6_(%"class.thrust::detail::contiguous_storage"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator", align 8
  %last = alloca %"class.thrust::detail::normal_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this4, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator"* %first to %"class.thrust::iterator_adaptor"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %last to %"class.thrust::iterator_facade"*
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %first to %"class.thrust::iterator_facade"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade"* dereferenceable(1) %2, %"class.thrust::iterator_facade"* dereferenceable(1) %3)
  call void @_ZN6thrust6detail13destroy_rangeISaIaEPalEEvRT_T0_T1_(%"class.std::allocator.42"* dereferenceable(1) %m_allocator, i8* %1, i64 %call5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIaSaIaEE8max_sizeEv(%"class.thrust::detail::contiguous_storage"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage"*, align 8
  store %"class.thrust::detail::contiguous_storage"* %this, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage"*, %"class.thrust::detail::contiguous_storage"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage", %"class.thrust::detail::contiguous_storage"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsISaIaEE8max_sizeERKS2_(%"class.std::allocator.42"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsISaIaEE8max_sizeERKS2_(%"class.std::allocator.42"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIaEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_(%"class.std::allocator.42"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIaEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_(%"class.std::allocator.42"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIaENS0_15normal_iteratorIPKbEEPaEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.std::allocator.42"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i8* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %result.addr = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i8* %result, i8** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive8, align 8
  %call = call i8* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIaENS0_15normal_iteratorIPKbEEPaEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.std::allocator.42"* dereferenceable(1) %1, i8* %7, i8* %8, i8* %6)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIaENS0_15normal_iteratorIPKbEEPaEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.std::allocator.42"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i8* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %result.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i8* %result, i8** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaIaEE3getERS2_(%"class.std::allocator.42"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive8, align 8
  %call = call i8* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPaEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, i8* %8, i8* %9, i8* %7)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPaEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2, i8* %first.coerce, i8* %last.coerce, i8* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %result.addr = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  store i8* %result, i8** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call4 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call4 to %"struct.thrust::execution_policy.88"*
  %3 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.88"* %3 to %"struct.thrust::detail::execution_policy_base.85"*
  %call5 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4)
  %call6 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call5)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call6 to %"struct.thrust::execution_policy.88"*
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::detail::execution_policy_base.85"*
  %7 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp8 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive9, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive11, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive12, align 8
  %call13 = call i8* @_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPaEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6, i8* %12, i8* %13, i8* %11)
  ret i8* %call13
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPaEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first.coerce, i8* %last.coerce, i8* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %result.addr = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i8* %result, i8** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call4 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call4 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive9, align 8
  %call10 = call i8* @_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPaEET1_RNS2_16execution_policyIT_EET0_SI_SD_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, i8* %7, i8* %8, i8* %6)
  ret i8* %call10
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPaEET1_RNS2_16execution_policyIT_EET0_SI_SD_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i8* %first.coerce, i8* %last.coerce, i8* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %result.addr = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i8* %result, i8** %result.addr, align 8, !tbaa !1
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  %call = call i8* @_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPaEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE(i8* %6, i8* %7, i8* %5)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPaEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE(i8* %first.coerce, i8* %last.coerce, i8* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %0 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %result.addr = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store i8* %result, i8** %result.addr, align 8, !tbaa !1
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive8, align 8
  %call = call i8* @_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPaEET0_T_SB_SA_(i8* %6, i8* %7, i8* %5)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPaEET0_T_SB_SA_(i8* %first.coerce, i8* %last.coerce, i8* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %result.addr = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store i8* %result, i8** %result.addr, align 8, !tbaa !1
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to %"class.thrust::iterator_facade.196"*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to %"class.thrust::iterator_facade.196"*
  %call = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSC_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.196"* dereferenceable(1) %0, %"class.thrust::iterator_facade.196"* dereferenceable(1) %1)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %2 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive4, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPaNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_(i8* %2, i8* %5)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %6 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to %"class.thrust::iterator_facade.196"*
  %call6 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEppEv(%"class.thrust::iterator_facade.196"* %6)
  %7 = load i8*, i8** %result.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds i8, i8* %7, i32 1
  store i8* %incdec.ptr, i8** %result.addr, align 8, !tbaa !1
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %8 = load i8*, i8** %result.addr, align 8, !tbaa !1
  ret i8* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSC_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.196"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.196"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  store %"class.thrust::iterator_facade.196"* %lhs, %"class.thrust::iterator_facade.196"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.196"* %rhs, %"class.thrust::iterator_facade.196"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.196"* %0 to %"class.thrust::detail::normal_iterator.194"*
  %2 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.196"* %2 to %"class.thrust::detail::normal_iterator.194"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKbEES6_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPaNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_(i8* %dst, i8* %src.coerce) #8 comdat {
entry:
  %src = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %dst.addr = alloca i8*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %src, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %src.coerce, i8** %coerce.dive1, align 8
  store i8* %dst, i8** %dst.addr, align 8, !tbaa !1
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %src to %"class.thrust::iterator_facade.196"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.196"* %0)
  %1 = load i8, i8* %call, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %1 to i1
  %conv = zext i1 %tobool to i8
  %2 = load i8*, i8** %dst.addr, align 8, !tbaa !1
  store i8 %conv, i8* %2, align 1, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEppEv(%"class.thrust::iterator_facade.196"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  store %"class.thrust::iterator_facade.196"* %this, %"class.thrust::iterator_facade.196"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.196"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKbEEEEvRT_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.196"* %this1)
  ret %"class.thrust::detail::normal_iterator.194"* %call2
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKbEES6_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  store %"class.thrust::detail::normal_iterator.194"* %f1, %"class.thrust::detail::normal_iterator.194"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.194"* %f2, %"class.thrust::detail::normal_iterator.194"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %0 to %"class.thrust::iterator_adaptor.195"*
  %2 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %2 to %"class.thrust::iterator_adaptor.195"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E5equalIS5_S4_S6_S6_S6_S6_S6_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.195"* %1, %"class.thrust::iterator_adaptor.195"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E5equalIS5_S4_S6_S6_S6_S6_S6_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"* dereferenceable(8) %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  store %"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.195"* %x, %"class.thrust::iterator_adaptor.195"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !186
  %1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %x.addr, align 8
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.195"* %1)
  %2 = load i8*, i8** %call, align 8, !tbaa !1
  %cmp = icmp eq i8* %0, %2
  ret i1 %cmp
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.196"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  store %"class.thrust::iterator_facade.196"* %this, %"class.thrust::iterator_facade.196"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.196"* %this1)
  %call2 = call dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKbEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %call)
  ret i8* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) i8* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKbEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  store %"class.thrust::detail::normal_iterator.194"* %f, %"class.thrust::detail::normal_iterator.194"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %0 to %"class.thrust::iterator_adaptor.195"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.195"* %1)
  ret i8* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.196"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  store %"class.thrust::iterator_facade.196"* %this, %"class.thrust::iterator_facade.196"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.196"* %this1 to %"class.thrust::detail::normal_iterator.194"*
  ret %"class.thrust::detail::normal_iterator.194"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) i8* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.195"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  store %"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !186
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKbEEEEvRT_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  store %"class.thrust::detail::normal_iterator.194"* %f, %"class.thrust::detail::normal_iterator.194"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %0 to %"class.thrust::iterator_adaptor.195"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E9incrementEv(%"class.thrust::iterator_adaptor.195"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.196"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  store %"class.thrust::iterator_facade.196"* %this, %"class.thrust::iterator_facade.196"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.196"* %this1 to %"class.thrust::detail::normal_iterator.194"*
  ret %"class.thrust::detail::normal_iterator.194"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E9incrementEv(%"class.thrust::iterator_adaptor.195"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  store %"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %m_iterator, align 8, !tbaa !186
  %incdec.ptr = getelementptr inbounds i8, i8* %0, i32 1
  store i8* %incdec.ptr, i8** %m_iterator, align 8, !tbaa !186
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeISaIaEPalEEvRT_T0_T1_(%"class.std::allocator.42"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.42"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.42"* %a, %"class.std::allocator.42"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.42"*, %"class.std::allocator.42"** %a.addr, align 8
  %1 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIaEPalEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.42"* dereferenceable(1) %0, i8* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade"*, align 8
  store %"class.thrust::iterator_facade"* %lhs, %"class.thrust::iterator_facade"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade"* %rhs, %"class.thrust::iterator_facade"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade"* %0 to %"class.thrust::detail::normal_iterator"*
  %2 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade"* %2 to %"class.thrust::detail::normal_iterator"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPaEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIaEPalEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.42"* dereferenceable(1), i8*, i64) #1 comdat {
entry:
  %.addr = alloca %"class.std::allocator.42"*, align 8
  %.addr1 = alloca i8*, align 8
  %.addr2 = alloca i64, align 8
  store %"class.std::allocator.42"* %0, %"class.std::allocator.42"** %.addr, align 8, !tbaa !7
  store i8* %1, i8** %.addr1, align 8, !tbaa !1
  store i64 %2, i64* %.addr2, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPaEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator"* %f1, %"class.thrust::detail::normal_iterator"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %f2, %"class.thrust::detail::normal_iterator"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPaEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPaEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator"*, align 8
  store %"class.thrust::detail::normal_iterator"* %f1, %"class.thrust::detail::normal_iterator"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator"* %f2, %"class.thrust::detail::normal_iterator"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %1 to %"class.thrust::iterator_adaptor"*
  %3 = load %"class.thrust::detail::normal_iterator"*, %"class.thrust::detail::normal_iterator"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator"* %3 to %"class.thrust::iterator_adaptor"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor"* %2, %"class.thrust::iterator_adaptor"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor"*, align 8
  store %"class.thrust::iterator_adaptor"* %this, %"class.thrust::iterator_adaptor"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor"* %y, %"class.thrust::iterator_adaptor"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor"*, %"class.thrust::iterator_adaptor"** %y.addr, align 8
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %this1, i32 0, i32 0
  %2 = load i8*, i8** %m_iterator, align 8, !tbaa !36
  %sub.ptr.lhs.cast = ptrtoint i8* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i8* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  ret i64 %sub.ptr.sub
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust6detail18contiguous_storageIbSaIbEE5beginEv(%"class.thrust::detail::contiguous_storage.75"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPKbEC2IPbEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.194"* %retval, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive2, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPKbEC2IPbEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.194"* %this, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  store %"class.thrust::detail::normal_iterator.194"* %this, %"class.thrust::detail::normal_iterator.194"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.79"* %other, %"class.thrust::detail::normal_iterator.79"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %this1 to %"class.thrust::iterator_adaptor.195"*
  %2 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.79"* %2 to %"class.thrust::iterator_adaptor.80"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.80"* %3)
  %4 = load i8*, i8** %call, align 8, !tbaa !1
  store i8* %4, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.195"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.195"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.195"* %this1 to %"class.thrust::iterator_facade.196"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !186
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.194"* %i, %"class.thrust::detail::normal_iterator.194"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.194"* %i, %"class.thrust::detail::normal_iterator.194"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKbEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.194"* %i, %"class.thrust::detail::normal_iterator.194"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %1 to %"class.thrust::iterator_facade.196"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.196"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.196"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.196"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.196"* %this, %"class.thrust::iterator_facade.196"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.196"*, %"class.thrust::iterator_facade.196"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.196"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKbEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.196"* %this1)
  ret %"class.thrust::detail::normal_iterator.194"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKbEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.194"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.194"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.194"* %f, %"class.thrust::detail::normal_iterator.194"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.194"*, %"class.thrust::detail::normal_iterator.194"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %0 to %"class.thrust::iterator_adaptor.195"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.195"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.195"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.195"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.195"* %this, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.195"*, %"class.thrust::iterator_adaptor.195"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %this1, i32 0, i32 0
  %1 = load i8*, i8** %m_iterator, align 8, !tbaa !186
  %add.ptr = getelementptr inbounds i8, i8* %1, i64 %0
  store i8* %add.ptr, i8** %m_iterator, align 8, !tbaa !186
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIbSaIbEE7destroyENS0_15normal_iteratorIPbEES6_(%"class.thrust::detail::contiguous_storage.75"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.75"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::contiguous_storage.75"* %this, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::contiguous_storage.75"*, %"class.thrust::detail::contiguous_storage.75"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.75", %"class.thrust::detail::contiguous_storage.75"* %this4, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.79"* %first to %"class.thrust::iterator_adaptor.80"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.80"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %2 = bitcast %"class.thrust::detail::normal_iterator.79"* %last to %"class.thrust::iterator_facade.81"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.79"* %first to %"class.thrust::iterator_facade.81"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblS4_bS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.81"* dereferenceable(1) %2, %"class.thrust::iterator_facade.81"* dereferenceable(1) %3)
  call void @_ZN6thrust6detail13destroy_rangeISaIbEPblEEvRT_T0_T1_(%"class.std::allocator.76"* dereferenceable(1) %m_allocator, i8* %1, i64 %call5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6detail11vector_baseIbSaIbEE3endEv(%"class.thrust::detail::vector_base.74"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.79", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  store %"class.thrust::detail::vector_base.74"* %this, %"class.thrust::detail::vector_base.74"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %this.addr, align 8
  %call = call i8* @_ZN6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIbSaIbEE4sizeEv(%"class.thrust::detail::vector_base.74"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.79", %"class.thrust::detail::normal_iterator.79"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %coerce.dive4, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive5, align 8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeISaIbEPblEEvRT_T0_T1_(%"class.std::allocator.76"* dereferenceable(1) %a, i8* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.76"*, align 8
  %p.addr = alloca i8*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.76"* %a, %"class.std::allocator.76"** %a.addr, align 8, !tbaa !7
  store i8* %p, i8** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.76"*, %"class.std::allocator.76"** %a.addr, align 8
  %1 = load i8*, i8** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIbEPblEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.76"* dereferenceable(1) %0, i8* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblS4_bS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.81"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.81"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.81"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.81"*, align 8
  store %"class.thrust::iterator_facade.81"* %lhs, %"class.thrust::iterator_facade.81"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.81"* %rhs, %"class.thrust::iterator_facade.81"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.81"*, %"class.thrust::iterator_facade.81"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.81"* %0 to %"class.thrust::detail::normal_iterator.79"*
  %2 = load %"class.thrust::iterator_facade.81"*, %"class.thrust::iterator_facade.81"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.81"* %2 to %"class.thrust::detail::normal_iterator.79"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPbEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIbEPblEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.76"* dereferenceable(1), i8*, i64) #1 comdat {
entry:
  %.addr = alloca %"class.std::allocator.76"*, align 8
  %.addr1 = alloca i8*, align 8
  %.addr2 = alloca i64, align 8
  store %"class.std::allocator.76"* %0, %"class.std::allocator.76"** %.addr, align 8, !tbaa !7
  store i8* %1, i8** %.addr1, align 8, !tbaa !1
  store i64 %2, i64* %.addr2, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPbEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.79"* %f1, %"class.thrust::detail::normal_iterator.79"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.79"* %f2, %"class.thrust::detail::normal_iterator.79"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPbEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPbEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  store %"class.thrust::detail::normal_iterator.79"* %f1, %"class.thrust::detail::normal_iterator.79"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.79"* %f2, %"class.thrust::detail::normal_iterator.79"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.79"* %1 to %"class.thrust::iterator_adaptor.80"*
  %3 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.79"* %3 to %"class.thrust::iterator_adaptor.80"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.80"* %2, %"class.thrust::iterator_adaptor.80"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.80"* %this, %"class.thrust::iterator_adaptor.80"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.80"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.80"*, align 8
  store %"class.thrust::iterator_adaptor.80"* %this, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.80"* %y, %"class.thrust::iterator_adaptor.80"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.80"*, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.80"*, %"class.thrust::iterator_adaptor.80"** %y.addr, align 8
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.80"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %this1, i32 0, i32 0
  %2 = load i8*, i8** %m_iterator, align 8, !tbaa !175
  %sub.ptr.lhs.cast = ptrtoint i8* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i8* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  ret i64 %sub.ptr.sub
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.79"* %i, %"class.thrust::detail::normal_iterator.79"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.79"* %i, %"class.thrust::detail::normal_iterator.79"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPbEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.79"* %i, %"class.thrust::detail::normal_iterator.79"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.79"* %1 to %"class.thrust::iterator_facade.81"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEpLEl(%"class.thrust::iterator_facade.81"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblEpLEl(%"class.thrust::iterator_facade.81"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.81"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.81"* %this, %"class.thrust::iterator_facade.81"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.81"*, %"class.thrust::iterator_facade.81"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv(%"class.thrust::iterator_facade.81"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPbEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.79"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERblE7derivedEv(%"class.thrust::iterator_facade.81"* %this1)
  ret %"class.thrust::detail::normal_iterator.79"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPbEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator.79"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.79"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.79"* %f, %"class.thrust::detail::normal_iterator.79"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.79"*, %"class.thrust::detail::normal_iterator.79"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.79"* %0 to %"class.thrust::iterator_adaptor.80"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor.80"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor.80"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.80"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.80"* %this, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.80"*, %"class.thrust::iterator_adaptor.80"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.80", %"class.thrust::iterator_adaptor.80"* %this1, i32 0, i32 0
  %1 = load i8*, i8** %m_iterator, align 8, !tbaa !175
  %add.ptr = getelementptr inbounds i8, i8* %1, i64 %0
  store i8* %add.ptr, i8** %m_iterator, align 8, !tbaa !175
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIiiEC2ERKiS3_(%"struct.thrust::pair.82"* %this, i32* dereferenceable(4) %x, i32* dereferenceable(4) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.82"*, align 8
  %x.addr = alloca i32*, align 8
  %y.addr = alloca i32*, align 8
  store %"struct.thrust::pair.82"* %this, %"struct.thrust::pair.82"** %this.addr, align 8, !tbaa !1
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  store i32* %y, i32** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %x.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  store i32 %1, i32* %first, align 4, !tbaa !24
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %this1, i32 0, i32 1
  %2 = load i32*, i32** %y.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  store i32 %3, i32* %second, align 4, !tbaa !28
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPaEENS6_IPNS_4pairIaaEEEESC_SA_NS_8equal_toIaEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first1.coerce, i8* %last1.coerce, %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i16 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %init = alloca %"struct.thrust::pair", align 1
  %binary_pred = alloca %"struct.thrust::equal_to", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %agg.tmp13 = alloca %"struct.thrust::pair", align 1
  %agg.tmp14 = alloca %"struct.thrust::equal_to", align 1
  %agg.tmp15 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive2, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::pair"* %init to i16*
  store i16 %init.coerce, i16* %0, align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call9 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator"* %agg.tmp10 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.51"* %agg.tmp11 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.51"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.51"* %agg.tmp12 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::pair"* %agg.tmp13 to i8*
  %12 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 2, i32 1, i1 false), !tbaa.struct !23
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive16, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive18, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp11, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive20, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %agg.tmp12, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive22, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  %17 = bitcast %"struct.thrust::pair"* %agg.tmp13 to i16*
  %18 = load i16, i16* %17, align 1
  %call24 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPaEENS8_IPNS_4pairIaaEEEESE_SC_NS_8equal_toIaEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %2, i8* %13, i8* %14, %"struct.thrust::pair"* %15, %"struct.thrust::pair"* %16, i16 %18)
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair"* %call24, %"struct.thrust::pair"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive27, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive28, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPaEENS8_IPNS_4pairIaaEEEESE_SC_NS_8equal_toIaEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i8* %first1.coerce, i8* %last1.coerce, %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i16 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %init = alloca %"struct.thrust::pair", align 1
  %binary_pred = alloca %"struct.thrust::equal_to", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %temp_key = alloca i8, align 1
  %temp_value = alloca %"struct.thrust::pair", align 1
  %next = alloca %"struct.thrust::pair", align 1
  %ref.tmp = alloca %"struct.thrust::pair", align 1
  %key = alloca i8, align 1
  %ref.tmp22 = alloca %"struct.thrust::pair", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator", %"class.thrust::detail::normal_iterator"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor", %"class.thrust::iterator_adaptor"* %coerce.dive2, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %1 = bitcast %"struct.thrust::pair"* %init to i16*
  store i16 %init.coerce, i16* %1, align 1
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %2 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to %"class.thrust::iterator_facade"*
  %3 = bitcast %"class.thrust::detail::normal_iterator"* %last1 to %"class.thrust::iterator_facade"*
  %call = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade"* dereferenceable(1) %2, %"class.thrust::iterator_facade"* dereferenceable(1) %3)
  br i1 %call, label %if.then, label %if.end27

if.then:                                          ; preds = %entry
  call void @llvm.lifetime.start(i64 1, i8* %temp_key) #5
  %4 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to %"class.thrust::iterator_facade"*
  %call9 = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEdeEv(%"class.thrust::iterator_facade"* %4)
  %5 = load i8, i8* %call9, align 1, !tbaa !7
  store i8 %5, i8* %temp_key, align 1, !tbaa !7
  %6 = bitcast %"struct.thrust::pair"* %temp_value to i8*
  call void @llvm.lifetime.start(i64 2, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.51"* %first2 to %"class.thrust::iterator_facade.53"*
  %call10 = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.53"* %7)
  %8 = bitcast %"struct.thrust::pair"* %temp_value to i8*
  %9 = bitcast %"struct.thrust::pair"* %call10 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 2, i32 1, i1 false), !tbaa.struct !23
  %10 = bitcast %"struct.thrust::pair"* %next to i8*
  call void @llvm.lifetime.start(i64 2, i8* %10) #5
  %11 = bitcast %"struct.thrust::pair"* %next to i8*
  %12 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 2, i32 1, i1 false), !tbaa.struct !23
  %13 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to %"class.thrust::iterator_facade.53"*
  %call11 = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.53"* %13)
  %14 = bitcast %"struct.thrust::pair"* %call11 to i8*
  %15 = bitcast %"struct.thrust::pair"* %next to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 2, i32 1, i1 false), !tbaa.struct !23
  %call12 = call i16 @_ZN9add_pairsclIN6thrust4pairIaaEES3_EET_RKS4_RKT0_(%struct.add_pairs* %binary_op, %"struct.thrust::pair"* dereferenceable(2) %next, %"struct.thrust::pair"* dereferenceable(2) %temp_value)
  %16 = bitcast %"struct.thrust::pair"* %ref.tmp to i16*
  store i16 %call12, i16* %16, align 1
  %17 = bitcast %"struct.thrust::pair"* %next to i8*
  %18 = bitcast %"struct.thrust::pair"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %17, i8* %18, i64 2, i32 1, i1 false), !tbaa.struct !23
  %19 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to %"class.thrust::iterator_facade"*
  %call13 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEppEv(%"class.thrust::iterator_facade"* %19)
  %20 = bitcast %"class.thrust::detail::normal_iterator.51"* %first2 to %"class.thrust::iterator_facade.53"*
  %call14 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.53"* %20)
  %21 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to %"class.thrust::iterator_facade.53"*
  %call15 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.53"* %21)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then
  %22 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to %"class.thrust::iterator_facade"*
  %23 = bitcast %"class.thrust::detail::normal_iterator"* %last1 to %"class.thrust::iterator_facade"*
  %call16 = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade"* dereferenceable(1) %22, %"class.thrust::iterator_facade"* dereferenceable(1) %23)
  br i1 %call16, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  call void @llvm.lifetime.start(i64 1, i8* %key) #5
  %24 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to %"class.thrust::iterator_facade"*
  %call17 = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEdeEv(%"class.thrust::iterator_facade"* %24)
  %25 = load i8, i8* %call17, align 1, !tbaa !7
  store i8 %25, i8* %key, align 1, !tbaa !7
  %26 = bitcast %"class.thrust::detail::normal_iterator.51"* %first2 to %"class.thrust::iterator_facade.53"*
  %call18 = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.53"* %26)
  %27 = bitcast %"struct.thrust::pair"* %temp_value to i8*
  %28 = bitcast %"struct.thrust::pair"* %call18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %27, i8* %28, i64 2, i32 1, i1 false), !tbaa.struct !23
  %call19 = call zeroext i1 @_ZNK6thrust8equal_toIaEclERKaS3_(%"struct.thrust::equal_to"* %binary_pred, i8* dereferenceable(1) %temp_key, i8* dereferenceable(1) %key)
  br i1 %call19, label %if.end, label %if.then20

if.then20:                                        ; preds = %for.body
  %29 = bitcast %"struct.thrust::pair"* %next to i8*
  %30 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 2, i32 1, i1 false), !tbaa.struct !23
  br label %if.end

if.end:                                           ; preds = %if.then20, %for.body
  %31 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to %"class.thrust::iterator_facade.53"*
  %call21 = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.53"* %31)
  %32 = bitcast %"struct.thrust::pair"* %call21 to i8*
  %33 = bitcast %"struct.thrust::pair"* %next to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %32, i8* %33, i64 2, i32 1, i1 false), !tbaa.struct !23
  %call23 = call i16 @_ZN9add_pairsclIN6thrust4pairIaaEES3_EET_RKS4_RKT0_(%struct.add_pairs* %binary_op, %"struct.thrust::pair"* dereferenceable(2) %next, %"struct.thrust::pair"* dereferenceable(2) %temp_value)
  %34 = bitcast %"struct.thrust::pair"* %ref.tmp22 to i16*
  store i16 %call23, i16* %34, align 1
  %35 = bitcast %"struct.thrust::pair"* %next to i8*
  %36 = bitcast %"struct.thrust::pair"* %ref.tmp22 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %35, i8* %36, i64 2, i32 1, i1 false), !tbaa.struct !23
  %37 = load i8, i8* %key, align 1, !tbaa !7
  store i8 %37, i8* %temp_key, align 1, !tbaa !7
  call void @llvm.lifetime.end(i64 1, i8* %key) #5
  br label %for.inc

for.inc:                                          ; preds = %if.end
  %38 = bitcast %"class.thrust::detail::normal_iterator"* %first1 to %"class.thrust::iterator_facade"*
  %call24 = call dereferenceable(8) %"class.thrust::detail::normal_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalEppEv(%"class.thrust::iterator_facade"* %38)
  %39 = bitcast %"class.thrust::detail::normal_iterator.51"* %first2 to %"class.thrust::iterator_facade.53"*
  %call25 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.53"* %39)
  %40 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to %"class.thrust::iterator_facade.53"*
  %call26 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.53"* %40)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %41 = bitcast %"struct.thrust::pair"* %next to i8*
  call void @llvm.lifetime.end(i64 2, i8* %41) #5
  %42 = bitcast %"struct.thrust::pair"* %temp_value to i8*
  call void @llvm.lifetime.end(i64 2, i8* %42) #5
  call void @llvm.lifetime.end(i64 1, i8* %temp_key) #5
  br label %if.end27

if.end27:                                         ; preds = %for.end, %entry
  %43 = bitcast %"class.thrust::detail::normal_iterator.51"* %retval to i8*
  %44 = bitcast %"class.thrust::detail::normal_iterator.51"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* %44, i64 8, i32 8, i1 false)
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive28, i32 0, i32 0
  %45 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive29, align 8
  ret %"struct.thrust::pair"* %45
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPaEEaNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERalS4_aS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade"*, align 8
  store %"class.thrust::iterator_facade"* %lhs, %"class.thrust::iterator_facade"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade"* %rhs, %"class.thrust::iterator_facade"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade"* %0 to %"class.thrust::detail::normal_iterator"*
  %2 = load %"class.thrust::iterator_facade"*, %"class.thrust::iterator_facade"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade"* %2 to %"class.thrust::detail::normal_iterator"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPaEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator"* dereferenceable(8) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: uwtable
define linkonce_odr i16 @_ZN9add_pairsclIN6thrust4pairIaaEES3_EET_RKS4_RKT0_(%struct.add_pairs* %this, %"struct.thrust::pair"* dereferenceable(2) %x, %"struct.thrust::pair"* dereferenceable(2) %y) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair", align 1
  %this.addr = alloca %struct.add_pairs*, align 8
  %x.addr = alloca %"struct.thrust::pair"*, align 8
  %y.addr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  store %struct.add_pairs* %this, %struct.add_pairs** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %x, %"struct.thrust::pair"** %x.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %y, %"struct.thrust::pair"** %y.addr, align 8, !tbaa !7
  %this1 = load %struct.add_pairs*, %struct.add_pairs** %this.addr, align 8
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %0, i32 0, i32 0
  %1 = load i8, i8* %first, align 1, !tbaa !26
  %conv = sext i8 %1 to i32
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %y.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %2, i32 0, i32 0
  %3 = load i8, i8* %first2, align 1, !tbaa !26
  %conv3 = sext i8 %3 to i32
  %add = add nsw i32 %conv, %conv3
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %4, i32 0, i32 1
  %5 = load i8, i8* %second, align 1, !tbaa !29
  %conv4 = sext i8 %5 to i32
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %y.addr, align 8
  %second5 = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %6, i32 0, i32 1
  %7 = load i8, i8* %second5, align 1, !tbaa !29
  %conv6 = sext i8 %7 to i32
  %add7 = add nsw i32 %conv4, %conv6
  %call = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %add, i32 %add7)
  %8 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call, i64* %8, align 4
  call void @_ZN6thrust4pairIaaEC2IiiEERKNS0_IT_T0_EE(%"struct.thrust::pair"* %retval, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %9 = bitcast %"struct.thrust::pair"* %retval to i16*
  %10 = load i16, i16* %9, align 1
  ret i16 %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust8equal_toIaEclERKaS3_(%"struct.thrust::equal_to"* %this, i8* dereferenceable(1) %lhs, i8* dereferenceable(1) %rhs) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::equal_to"*, align 8
  %lhs.addr = alloca i8*, align 8
  %rhs.addr = alloca i8*, align 8
  store %"struct.thrust::equal_to"* %this, %"struct.thrust::equal_to"** %this.addr, align 8, !tbaa !1
  store i8* %lhs, i8** %lhs.addr, align 8, !tbaa !7
  store i8* %rhs, i8** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::equal_to"*, %"struct.thrust::equal_to"** %this.addr, align 8
  %0 = load i8*, i8** %lhs.addr, align 8
  %1 = load i8, i8* %0, align 1, !tbaa !7
  %conv = sext i8 %1 to i32
  %2 = load i8*, i8** %rhs.addr, align 8
  %3 = load i8, i8* %2, align 1, !tbaa !7
  %conv2 = sext i8 %3 to i32
  %cmp = icmp eq i32 %conv, %conv2
  ret i1 %cmp
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS6_INS7_INS_4pairIaaEEEEEESD_SB_NS_8equal_toIaEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i8* %first1.coerce, i8* %last1.coerce, %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i16 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %init = alloca %"struct.thrust::pair", align 1
  %binary_pred = alloca %"struct.thrust::equal_to", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp23 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp24 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp25 = alloca %"struct.thrust::pair", align 1
  %agg.tmp26 = alloca %"struct.thrust::equal_to", align 1
  %agg.tmp27 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair"* %init to i16*
  store i16 %init.coerce, i16* %0, align 1
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call21 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call21 to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.56"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp22 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.56"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp23 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.66"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp24 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::pair"* %agg.tmp25 to i8*
  %12 = bitcast %"struct.thrust::pair"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 2, i32 1, i1 false), !tbaa.struct !23
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive31, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp22, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive36, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp23, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive41, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive42, align 8
  %coerce.dive43 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp24, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive46, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive47, align 8
  %17 = bitcast %"struct.thrust::pair"* %agg.tmp25 to i16*
  %18 = load i16, i16* %17, align 1
  %call48 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS8_INS9_INS_4pairIaaEEEEEESF_SD_NS_8equal_toIaEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i8* %13, i8* %14, %"struct.thrust::pair"* %15, %"struct.thrust::pair"* %16, i16 %18)
  %coerce.dive49 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive50, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive51, i32 0, i32 0
  %coerce.dive53 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive52, i32 0, i32 0
  store %"struct.thrust::pair"* %call48, %"struct.thrust::pair"** %coerce.dive53, align 8
  %coerce.dive54 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive56, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive57, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive58, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.120"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system3) #0 comdat {
entry:
  %system1.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %system3.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  store %"struct.thrust::execution_policy.120"* %system1, %"struct.thrust::execution_policy.120"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system3, %"struct.thrust::execution_policy.120"** %system3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1.addr, align 8
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::execution_policy.120"*
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system3.addr, align 8
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %3)
  ret %"struct.thrust::system::cuda::detail::tag"* %call1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS8_INS9_INS_4pairIaaEEEEEESF_SD_NS_8equal_toIaEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i8* %first1.coerce, i8* %last1.coerce, %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i16 %init.coerce) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %init = alloca %"struct.thrust::pair", align 1
  %binary_pred = alloca %"struct.thrust::equal_to", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n = alloca i64, align 8
  %last2 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %flags = alloca %"class.thrust::detail::temporary_array", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce = alloca %"class.thrust::reference.205", align 8
  %ref.tmp = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp33 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp41 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp49 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %ref.tmp50 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp63 = alloca %"struct.thrust::detail::binary_negate", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::binary_negate", align 1
  %coerce86 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %temp = alloca %"class.thrust::detail::temporary_array.206", align 8
  %agg.tmp92 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp93 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp102 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %ref.tmp103 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp116 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %ref.tmp117 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %agg.tmp130 = alloca %"struct.thrust::negate", align 1
  %coerce151 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %coerce158 = alloca %"class.thrust::reference.215", align 8
  %agg.tmp164 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp165 = alloca %"class.thrust::tuple.223", align 8
  %ref.tmp166 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %ref.tmp173 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp187 = alloca %"class.thrust::zip_iterator.221", align 8
  %ref.tmp188 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp189 = alloca %"class.thrust::tuple.223", align 8
  %ref.tmp190 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %ref.tmp197 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp215 = alloca %"class.thrust::zip_iterator.216", align 8
  %agg.tmp216 = alloca %"class.thrust::tuple.218", align 8
  %ref.tmp217 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp231 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %agg.tmp232 = alloca %struct.add_pairs, align 1
  %coerce236 = alloca %"class.thrust::zip_iterator.216", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair"* %init to i16*
  store i16 %init.coerce, i16* %0, align 1
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %1 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %last1 to %"class.thrust::iterator_facade.58"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.56"* %first1 to %"class.thrust::iterator_facade.58"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS5_aS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.58"* dereferenceable(1) %2, %"class.thrust::iterator_facade.58"* dereferenceable(1) %3)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %4 = load i64, i64* %n, align 8, !tbaa !13
  %cmp = icmp ne i64 %4, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %5 = bitcast %"class.thrust::detail::normal_iterator.66"* %last2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %5) #5
  %6 = bitcast %"class.thrust::detail::normal_iterator.66"* %first2 to %"class.thrust::iterator_facade.68"*
  %7 = load i64, i64* %n, align 8, !tbaa !13
  %call21 = call %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.68"* dereferenceable(1) %6, i64 %7)
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %last2, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair"* %call21, %"struct.thrust::pair"** %coerce.dive26, align 8
  %8 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.start(i64 24, i8* %8) #5
  %9 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %10 = load i64, i64* %n, align 8, !tbaa !13
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EEm(%"class.thrust::detail::temporary_array"* %flags, %"struct.thrust::execution_policy.120"* dereferenceable(1) %9, i64 %10)
  %11 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call27 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.198"* %11, i64 0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %coerce.dive28 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %coerce, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive29, i32 0, i32 0
  store i32* %call27, i32** %coerce.dive30, align 8
  store i32 1, i32* %ref.tmp, align 4, !tbaa !11
  %call32 = invoke dereferenceable(8) %"class.thrust::reference.205"* @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EaSERKj(%"class.thrust::reference.205"* %coerce, i32* dereferenceable(4) %ref.tmp)
          to label %invoke.cont31 unwind label %lpad

invoke.cont31:                                    ; preds = %invoke.cont
  %12 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %13 = bitcast %"struct.thrust::execution_policy.120"* %12 to %"struct.thrust::detail::execution_policy_base.121"*
  %14 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.56"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.56"* %last1 to %"class.thrust::iterator_facade.58"*
  %call35 = invoke i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEmiEl(%"class.thrust::iterator_facade.58"* %16, i64 1)
          to label %invoke.cont34 unwind label %lpad

invoke.cont34:                                    ; preds = %invoke.cont31
  %coerce.dive36 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp33, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive39, i32 0, i32 0
  store i8* %call35, i8** %coerce.dive40, align 8
  %17 = bitcast %"class.thrust::detail::normal_iterator.56"* %first1 to %"class.thrust::iterator_facade.58"*
  %call43 = invoke i8* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.58"* dereferenceable(1) %17, i64 1)
          to label %invoke.cont42 unwind label %lpad

invoke.cont42:                                    ; preds = %invoke.cont34
  %coerce.dive44 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp41, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive47, i32 0, i32 0
  store i8* %call43, i8** %coerce.dive48, align 8
  %18 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call52 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %18)
          to label %invoke.cont51 unwind label %lpad

invoke.cont51:                                    ; preds = %invoke.cont42
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp50, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive55, i32 0, i32 0
  store i32* %call52, i32** %coerce.dive56, align 8
  %19 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp50 to %"class.thrust::iterator_facade.201"*
  %call58 = invoke i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %19, i64 1)
          to label %invoke.cont57 unwind label %lpad

invoke.cont57:                                    ; preds = %invoke.cont51
  %coerce.dive59 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp49, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive60, i32 0, i32 0
  %coerce.dive62 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive61, i32 0, i32 0
  store i32* %call58, i32** %coerce.dive62, align 8
  invoke void @_ZN6thrust6detail4not2INS_8equal_toIaEEEENS0_13binary_negateIT_EERKS5_(%"struct.thrust::equal_to"* dereferenceable(1) %binary_pred)
          to label %invoke.cont64 unwind label %lpad

invoke.cont64:                                    ; preds = %invoke.cont57
  %coerce.dive65 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive66, i32 0, i32 0
  %coerce.dive68 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive67, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive68, i32 0, i32 0
  %20 = load i8*, i8** %coerce.dive69, align 8
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp33, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive71, i32 0, i32 0
  %coerce.dive73 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive72, i32 0, i32 0
  %coerce.dive74 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive73, i32 0, i32 0
  %21 = load i8*, i8** %coerce.dive74, align 8
  %coerce.dive75 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp41, i32 0, i32 0
  %coerce.dive76 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive75, i32 0, i32 0
  %coerce.dive77 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive76, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive77, i32 0, i32 0
  %coerce.dive79 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive78, i32 0, i32 0
  %22 = load i8*, i8** %coerce.dive79, align 8
  %coerce.dive80 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp49, i32 0, i32 0
  %coerce.dive81 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive80, i32 0, i32 0
  %coerce.dive82 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive81, i32 0, i32 0
  %coerce.dive83 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive82, i32 0, i32 0
  %23 = load i32*, i32** %coerce.dive83, align 8
  %call85 = invoke i32* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIaEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %13, i8* %20, i8* %21, i8* %22, i32* %23)
          to label %invoke.cont84 unwind label %lpad

invoke.cont84:                                    ; preds = %invoke.cont64
  %coerce.dive87 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %coerce86, i32 0, i32 0
  %coerce.dive88 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive87, i32 0, i32 0
  %coerce.dive89 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive88, i32 0, i32 0
  %coerce.dive90 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive89, i32 0, i32 0
  store i32* %call85, i32** %coerce.dive90, align 8
  %24 = bitcast %"class.thrust::detail::temporary_array.206"* %temp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %24) #5
  %25 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %26 = load i64, i64* %n, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm(%"class.thrust::detail::temporary_array.206"* %temp, %"struct.thrust::execution_policy.120"* dereferenceable(1) %25, i64 %26)
          to label %invoke.cont91 unwind label %lpad

invoke.cont91:                                    ; preds = %invoke.cont84
  %27 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %28 = bitcast %"struct.thrust::execution_policy.120"* %27 to %"struct.thrust::detail::execution_policy_base.121"*
  %29 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp92 to i8*
  %30 = bitcast %"class.thrust::detail::normal_iterator.66"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"class.thrust::detail::normal_iterator.66"* %last2 to %"class.thrust::iterator_facade.68"*
  %call96 = invoke %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl(%"class.thrust::iterator_facade.68"* %31, i64 1)
          to label %invoke.cont95 unwind label %lpad94

invoke.cont95:                                    ; preds = %invoke.cont91
  %coerce.dive97 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp93, i32 0, i32 0
  %coerce.dive98 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive97, i32 0, i32 0
  %coerce.dive99 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive98, i32 0, i32 0
  %coerce.dive100 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive99, i32 0, i32 0
  %coerce.dive101 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive100, i32 0, i32 0
  store %"struct.thrust::pair"* %call96, %"struct.thrust::pair"** %coerce.dive101, align 8
  %32 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call105 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %32)
          to label %invoke.cont104 unwind label %lpad94

invoke.cont104:                                   ; preds = %invoke.cont95
  %coerce.dive106 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp103, i32 0, i32 0
  %coerce.dive107 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive106, i32 0, i32 0
  %coerce.dive108 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive107, i32 0, i32 0
  %coerce.dive109 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive108, i32 0, i32 0
  store i32* %call105, i32** %coerce.dive109, align 8
  %33 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp103 to %"class.thrust::iterator_facade.201"*
  %call111 = invoke i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %33, i64 1)
          to label %invoke.cont110 unwind label %lpad94

invoke.cont110:                                   ; preds = %invoke.cont104
  %coerce.dive112 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp102, i32 0, i32 0
  %coerce.dive113 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive112, i32 0, i32 0
  %coerce.dive114 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive113, i32 0, i32 0
  %coerce.dive115 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive114, i32 0, i32 0
  store i32* %call111, i32** %coerce.dive115, align 8
  %34 = bitcast %"class.thrust::detail::temporary_array.206"* %temp to %"class.thrust::detail::contiguous_storage.207"*
  %call119 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.207"* %34)
          to label %invoke.cont118 unwind label %lpad94

invoke.cont118:                                   ; preds = %invoke.cont110
  %coerce.dive120 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %ref.tmp117, i32 0, i32 0
  %coerce.dive121 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive120, i32 0, i32 0
  %coerce.dive122 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive121, i32 0, i32 0
  %coerce.dive123 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive122, i32 0, i32 0
  store %"struct.thrust::pair"* %call119, %"struct.thrust::pair"** %coerce.dive123, align 8
  %35 = bitcast %"class.thrust::detail::normal_iterator.212"* %ref.tmp117 to %"class.thrust::iterator_facade.214"*
  %call125 = invoke %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.214"* dereferenceable(1) %35, i64 1)
          to label %invoke.cont124 unwind label %lpad94

invoke.cont124:                                   ; preds = %invoke.cont118
  %coerce.dive126 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp116, i32 0, i32 0
  %coerce.dive127 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive126, i32 0, i32 0
  %coerce.dive128 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive127, i32 0, i32 0
  %coerce.dive129 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive128, i32 0, i32 0
  store %"struct.thrust::pair"* %call125, %"struct.thrust::pair"** %coerce.dive129, align 8
  %coerce.dive131 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp92, i32 0, i32 0
  %coerce.dive132 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive131, i32 0, i32 0
  %coerce.dive133 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive132, i32 0, i32 0
  %coerce.dive134 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive133, i32 0, i32 0
  %coerce.dive135 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive134, i32 0, i32 0
  %36 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive135, align 8
  %coerce.dive136 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp93, i32 0, i32 0
  %coerce.dive137 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive136, i32 0, i32 0
  %coerce.dive138 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive137, i32 0, i32 0
  %coerce.dive139 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive138, i32 0, i32 0
  %coerce.dive140 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive139, i32 0, i32 0
  %37 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive140, align 8
  %coerce.dive141 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp102, i32 0, i32 0
  %coerce.dive142 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive141, i32 0, i32 0
  %coerce.dive143 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive142, i32 0, i32 0
  %coerce.dive144 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive143, i32 0, i32 0
  %38 = load i32*, i32** %coerce.dive144, align 8
  %coerce.dive145 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp116, i32 0, i32 0
  %coerce.dive146 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive145, i32 0, i32 0
  %coerce.dive147 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive146, i32 0, i32 0
  %coerce.dive148 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive147, i32 0, i32 0
  %39 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive148, align 8
  %call150 = invoke %"struct.thrust::pair"* @_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %28, %"struct.thrust::pair"* %36, %"struct.thrust::pair"* %37, i32* %38, %"struct.thrust::pair"* %39, %"struct.thrust::pair"* dereferenceable(2) %init)
          to label %invoke.cont149 unwind label %lpad94

invoke.cont149:                                   ; preds = %invoke.cont124
  %coerce.dive152 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %coerce151, i32 0, i32 0
  %coerce.dive153 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive152, i32 0, i32 0
  %coerce.dive154 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive153, i32 0, i32 0
  %coerce.dive155 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive154, i32 0, i32 0
  store %"struct.thrust::pair"* %call150, %"struct.thrust::pair"** %coerce.dive155, align 8
  %40 = bitcast %"class.thrust::detail::temporary_array.206"* %temp to %"class.thrust::detail::contiguous_storage.207"*
  %call157 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.207"* %40, i64 0)
          to label %invoke.cont156 unwind label %lpad94

invoke.cont156:                                   ; preds = %invoke.cont149
  %coerce.dive159 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %coerce158, i32 0, i32 0
  %coerce.dive160 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive159, i32 0, i32 0
  %coerce.dive161 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive160, i32 0, i32 0
  store %"struct.thrust::pair"* %call157, %"struct.thrust::pair"** %coerce.dive161, align 8
  %call163 = invoke dereferenceable(8) %"class.thrust::reference.215"* @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_(%"class.thrust::reference.215"* %coerce158, %"struct.thrust::pair"* dereferenceable(2) %init)
          to label %invoke.cont162 unwind label %lpad94

invoke.cont162:                                   ; preds = %invoke.cont156
  %41 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %42 = bitcast %"struct.thrust::execution_policy.120"* %41 to %"struct.thrust::detail::execution_policy_base.121"*
  %43 = bitcast %"class.thrust::detail::temporary_array.206"* %temp to %"class.thrust::detail::contiguous_storage.207"*
  %call168 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.207"* %43)
          to label %invoke.cont167 unwind label %lpad94

invoke.cont167:                                   ; preds = %invoke.cont162
  %coerce.dive169 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %ref.tmp166, i32 0, i32 0
  %coerce.dive170 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive169, i32 0, i32 0
  %coerce.dive171 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive170, i32 0, i32 0
  %coerce.dive172 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive171, i32 0, i32 0
  store %"struct.thrust::pair"* %call168, %"struct.thrust::pair"** %coerce.dive172, align 8
  %44 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call175 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %44)
          to label %invoke.cont174 unwind label %lpad94

invoke.cont174:                                   ; preds = %invoke.cont167
  %coerce.dive176 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp173, i32 0, i32 0
  %coerce.dive177 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive176, i32 0, i32 0
  %coerce.dive178 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive177, i32 0, i32 0
  %coerce.dive179 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive178, i32 0, i32 0
  store i32* %call175, i32** %coerce.dive179, align 8
  %call181 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %ref.tmp166, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp173)
          to label %invoke.cont180 unwind label %lpad94

invoke.cont180:                                   ; preds = %invoke.cont174
  %coerce.dive182 = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %agg.tmp165, i32 0, i32 0
  %45 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive182 to { %"struct.thrust::pair"*, i32* }*
  %46 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %45, i32 0, i32 0
  %47 = extractvalue { %"struct.thrust::pair"*, i32* } %call181, 0
  store %"struct.thrust::pair"* %47, %"struct.thrust::pair"** %46, align 8
  %48 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %45, i32 0, i32 1
  %49 = extractvalue { %"struct.thrust::pair"*, i32* } %call181, 1
  store i32* %49, i32** %48, align 8
  %50 = bitcast %"class.thrust::tuple.223"* %agg.tmp165 to { %"struct.thrust::pair"*, i32* }*
  %51 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %50, i32 0, i32 0
  %52 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %51, align 8
  %53 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %50, i32 0, i32 1
  %54 = load i32*, i32** %53, align 8
  %call184 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair"* %52, i32* %54)
          to label %invoke.cont183 unwind label %lpad94

invoke.cont183:                                   ; preds = %invoke.cont180
  %coerce.dive185 = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %agg.tmp164, i32 0, i32 0
  %coerce.dive186 = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %coerce.dive185, i32 0, i32 0
  %55 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive186 to { %"struct.thrust::pair"*, i32* }*
  %56 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %55, i32 0, i32 0
  %57 = extractvalue { %"struct.thrust::pair"*, i32* } %call184, 0
  store %"struct.thrust::pair"* %57, %"struct.thrust::pair"** %56, align 8
  %58 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %55, i32 0, i32 1
  %59 = extractvalue { %"struct.thrust::pair"*, i32* } %call184, 1
  store i32* %59, i32** %58, align 8
  %60 = bitcast %"class.thrust::detail::temporary_array.206"* %temp to %"class.thrust::detail::contiguous_storage.207"*
  %call192 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.207"* %60)
          to label %invoke.cont191 unwind label %lpad94

invoke.cont191:                                   ; preds = %invoke.cont183
  %coerce.dive193 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %ref.tmp190, i32 0, i32 0
  %coerce.dive194 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive193, i32 0, i32 0
  %coerce.dive195 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive194, i32 0, i32 0
  %coerce.dive196 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive195, i32 0, i32 0
  store %"struct.thrust::pair"* %call192, %"struct.thrust::pair"** %coerce.dive196, align 8
  %61 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call199 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %61)
          to label %invoke.cont198 unwind label %lpad94

invoke.cont198:                                   ; preds = %invoke.cont191
  %coerce.dive200 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp197, i32 0, i32 0
  %coerce.dive201 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive200, i32 0, i32 0
  %coerce.dive202 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive201, i32 0, i32 0
  %coerce.dive203 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive202, i32 0, i32 0
  store i32* %call199, i32** %coerce.dive203, align 8
  %call205 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %ref.tmp190, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp197)
          to label %invoke.cont204 unwind label %lpad94

invoke.cont204:                                   ; preds = %invoke.cont198
  %coerce.dive206 = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %agg.tmp189, i32 0, i32 0
  %62 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive206 to { %"struct.thrust::pair"*, i32* }*
  %63 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %62, i32 0, i32 0
  %64 = extractvalue { %"struct.thrust::pair"*, i32* } %call205, 0
  store %"struct.thrust::pair"* %64, %"struct.thrust::pair"** %63, align 8
  %65 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %62, i32 0, i32 1
  %66 = extractvalue { %"struct.thrust::pair"*, i32* } %call205, 1
  store i32* %66, i32** %65, align 8
  %67 = bitcast %"class.thrust::tuple.223"* %agg.tmp189 to { %"struct.thrust::pair"*, i32* }*
  %68 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %67, i32 0, i32 0
  %69 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %68, align 8
  %70 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %67, i32 0, i32 1
  %71 = load i32*, i32** %70, align 8
  %call208 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair"* %69, i32* %71)
          to label %invoke.cont207 unwind label %lpad94

invoke.cont207:                                   ; preds = %invoke.cont204
  %coerce.dive209 = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %ref.tmp188, i32 0, i32 0
  %coerce.dive210 = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %coerce.dive209, i32 0, i32 0
  %72 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive210 to { %"struct.thrust::pair"*, i32* }*
  %73 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %72, i32 0, i32 0
  %74 = extractvalue { %"struct.thrust::pair"*, i32* } %call208, 0
  store %"struct.thrust::pair"* %74, %"struct.thrust::pair"** %73, align 8
  %75 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %72, i32 0, i32 1
  %76 = extractvalue { %"struct.thrust::pair"*, i32* } %call208, 1
  store i32* %76, i32** %75, align 8
  %77 = bitcast %"class.thrust::zip_iterator.221"* %ref.tmp188 to %"class.thrust::iterator_facade.222"*
  %78 = load i64, i64* %n, align 8, !tbaa !13
  %call212 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::iterator_facade.222"* dereferenceable(1) %77, i64 %78)
          to label %invoke.cont211 unwind label %lpad94

invoke.cont211:                                   ; preds = %invoke.cont207
  %coerce.dive213 = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %agg.tmp187, i32 0, i32 0
  %coerce.dive214 = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %coerce.dive213, i32 0, i32 0
  %79 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive214 to { %"struct.thrust::pair"*, i32* }*
  %80 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %79, i32 0, i32 0
  %81 = extractvalue { %"struct.thrust::pair"*, i32* } %call212, 0
  store %"struct.thrust::pair"* %81, %"struct.thrust::pair"** %80, align 8
  %82 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %79, i32 0, i32 1
  %83 = extractvalue { %"struct.thrust::pair"*, i32* } %call212, 1
  store i32* %83, i32** %82, align 8
  %84 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call219 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %84)
          to label %invoke.cont218 unwind label %lpad94

invoke.cont218:                                   ; preds = %invoke.cont211
  %coerce.dive220 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp217, i32 0, i32 0
  %coerce.dive221 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive220, i32 0, i32 0
  %coerce.dive222 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive221, i32 0, i32 0
  %coerce.dive223 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive222, i32 0, i32 0
  store i32* %call219, i32** %coerce.dive223, align 8
  %call225 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %result, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp217)
          to label %invoke.cont224 unwind label %lpad94

invoke.cont224:                                   ; preds = %invoke.cont218
  %coerce.dive226 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %agg.tmp216, i32 0, i32 0
  %85 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive226 to { %"struct.thrust::pair"*, i32* }*
  %86 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %85, i32 0, i32 0
  %87 = extractvalue { %"struct.thrust::pair"*, i32* } %call225, 0
  store %"struct.thrust::pair"* %87, %"struct.thrust::pair"** %86, align 8
  %88 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %85, i32 0, i32 1
  %89 = extractvalue { %"struct.thrust::pair"*, i32* } %call225, 1
  store i32* %89, i32** %88, align 8
  %90 = bitcast %"class.thrust::tuple.218"* %agg.tmp216 to { %"struct.thrust::pair"*, i32* }*
  %91 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %90, i32 0, i32 0
  %92 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %91, align 8
  %93 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %90, i32 0, i32 1
  %94 = load i32*, i32** %93, align 8
  %call228 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_(%"struct.thrust::pair"* %92, i32* %94)
          to label %invoke.cont227 unwind label %lpad94

invoke.cont227:                                   ; preds = %invoke.cont224
  %coerce.dive229 = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %agg.tmp215, i32 0, i32 0
  %coerce.dive230 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive229, i32 0, i32 0
  %95 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive230 to { %"struct.thrust::pair"*, i32* }*
  %96 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %95, i32 0, i32 0
  %97 = extractvalue { %"struct.thrust::pair"*, i32* } %call228, 0
  store %"struct.thrust::pair"* %97, %"struct.thrust::pair"** %96, align 8
  %98 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %95, i32 0, i32 1
  %99 = extractvalue { %"struct.thrust::pair"*, i32* } %call228, 1
  store i32* %99, i32** %98, align 8
  invoke void @_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEC2ES7_(%"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp231)
          to label %invoke.cont233 unwind label %lpad94

invoke.cont233:                                   ; preds = %invoke.cont227
  %100 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp164 to { %"struct.thrust::pair"*, i32* }*
  %101 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %100, i32 0, i32 0
  %102 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %101, align 8
  %103 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %100, i32 0, i32 1
  %104 = load i32*, i32** %103, align 8
  %105 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp187 to { %"struct.thrust::pair"*, i32* }*
  %106 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %105, i32 0, i32 0
  %107 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %106, align 8
  %108 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %105, i32 0, i32 1
  %109 = load i32*, i32** %108, align 8
  %call235 = invoke { %"struct.thrust::pair"*, i32* } @_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %42, %"struct.thrust::pair"* %102, i32* %104, %"struct.thrust::pair"* %107, i32* %109, %"class.thrust::zip_iterator.216"* byval align 8 %agg.tmp215)
          to label %invoke.cont234 unwind label %lpad94

invoke.cont234:                                   ; preds = %invoke.cont233
  %coerce.dive237 = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %coerce236, i32 0, i32 0
  %coerce.dive238 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive237, i32 0, i32 0
  %110 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive238 to { %"struct.thrust::pair"*, i32* }*
  %111 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %110, i32 0, i32 0
  %112 = extractvalue { %"struct.thrust::pair"*, i32* } %call235, 0
  store %"struct.thrust::pair"* %112, %"struct.thrust::pair"** %111, align 8
  %113 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %110, i32 0, i32 1
  %114 = extractvalue { %"struct.thrust::pair"*, i32* } %call235, 1
  store i32* %114, i32** %113, align 8
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.206"* %temp) #5
  %115 = bitcast %"class.thrust::detail::temporary_array.206"* %temp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %115) #5
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array"* %flags) #5
  %116 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.end(i64 24, i8* %116) #5
  %117 = bitcast %"class.thrust::detail::normal_iterator.66"* %last2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %117) #5
  br label %if.end

lpad:                                             ; preds = %invoke.cont84, %invoke.cont64, %invoke.cont57, %invoke.cont51, %invoke.cont42, %invoke.cont34, %invoke.cont31, %invoke.cont, %if.then
  %118 = landingpad { i8*, i32 }
          cleanup
  %119 = extractvalue { i8*, i32 } %118, 0
  store i8* %119, i8** %exn.slot, align 8
  %120 = extractvalue { i8*, i32 } %118, 1
  store i32 %120, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad94:                                           ; preds = %invoke.cont233, %invoke.cont227, %invoke.cont224, %invoke.cont218, %invoke.cont211, %invoke.cont207, %invoke.cont204, %invoke.cont198, %invoke.cont191, %invoke.cont183, %invoke.cont180, %invoke.cont174, %invoke.cont167, %invoke.cont162, %invoke.cont156, %invoke.cont149, %invoke.cont124, %invoke.cont118, %invoke.cont110, %invoke.cont104, %invoke.cont95, %invoke.cont91
  %121 = landingpad { i8*, i32 }
          cleanup
  %122 = extractvalue { i8*, i32 } %121, 0
  store i8* %122, i8** %exn.slot, align 8
  %123 = extractvalue { i8*, i32 } %121, 1
  store i32 %123, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.206"* %temp) #5
  %124 = bitcast %"class.thrust::detail::temporary_array.206"* %temp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %124) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad94, %lpad
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array"* %flags) #5
  %125 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.end(i64 24, i8* %125) #5
  %126 = bitcast %"class.thrust::detail::normal_iterator.66"* %last2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %126) #5
  %127 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %127) #5
  br label %eh.resume

if.end:                                           ; preds = %invoke.cont234, %entry
  %128 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to %"class.thrust::iterator_facade.68"*
  %129 = load i64, i64* %n, align 8, !tbaa !13
  %call241 = call %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.68"* dereferenceable(1) %128, i64 %129)
  %coerce.dive242 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive243 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive242, i32 0, i32 0
  %coerce.dive244 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive243, i32 0, i32 0
  %coerce.dive245 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive244, i32 0, i32 0
  %coerce.dive246 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive245, i32 0, i32 0
  store %"struct.thrust::pair"* %call241, %"struct.thrust::pair"** %coerce.dive246, align 8
  %130 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %130) #5
  %coerce.dive248 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive249 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive248, i32 0, i32 0
  %coerce.dive250 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive249, i32 0, i32 0
  %coerce.dive251 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive250, i32 0, i32 0
  %coerce.dive252 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive251, i32 0, i32 0
  %131 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive252, align 8
  ret %"struct.thrust::pair"* %131

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val253 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val253
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.68"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.66", align 8
  store %"class.thrust::iterator_facade.68"* %i, %"class.thrust::iterator_facade.68"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.66"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.68"* %1 to %"class.thrust::detail::normal_iterator.66"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.66"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.66"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.66"* %tmp to %"class.thrust::iterator_facade.68"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.68"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.66"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.66"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.66"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EEm(%"class.thrust::detail::temporary_array"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator", align 8
  %ref.tmp2 = alloca %"class.thrust::detail::temporary_allocator", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_array"* %this, %"class.thrust::detail::temporary_array"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_array"*, %"class.thrust::detail::temporary_array"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array"* %this1 to %"class.thrust::detail::contiguous_storage.198"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EE(%"class.thrust::detail::temporary_allocator"* %ref.tmp2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEC2ERKS7_(%"struct.thrust::detail::no_throw_allocator"* %ref.tmp, %"class.thrust::detail::temporary_allocator"* dereferenceable(8) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEC2EmRKS9_(%"class.thrust::detail::contiguous_storage.198"* %0, i64 %1, %"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator"*)* @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator"*)*)(%"struct.thrust::detail::no_throw_allocator"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator"*)* @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev to void (%"class.thrust::detail::temporary_allocator"*)*)(%"class.thrust::detail::temporary_allocator"* %ref.tmp2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail22temporary_array_detail16construct_valuesIjNS0_15temporary_arrayIjNS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array"* dereferenceable(24) %this1, i64 %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator"*)* @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator"*)*)(%"struct.thrust::detail::no_throw_allocator"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator"*)* @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev to void (%"class.thrust::detail::temporary_allocator"*)*)(%"class.thrust::detail::temporary_allocator"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::detail::temporary_array"* %this1 to %"class.thrust::detail::contiguous_storage.198"*
  call void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.198"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val8 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val8
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.198"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %m_begin to %"class.thrust::iterator_facade.201"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEixEl(%"class.thrust::iterator_facade.201"* %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  store i32* %call, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive5, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive6, align 8
  ret i32* %2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.205"* @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EaSERKj(%"class.thrust::reference.205"* %this, i32* dereferenceable(4) %v) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.205"*, align 8
  %v.addr = alloca i32*, align 8
  store %"class.thrust::reference.205"* %this, %"class.thrust::reference.205"** %this.addr, align 8, !tbaa !1
  store i32* %v, i32** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.205"*, %"class.thrust::reference.205"** %this.addr, align 8
  %0 = load i32*, i32** %v.addr, align 8
  call void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E11assign_fromIPKjEEvT_(%"class.thrust::reference.205"* %this1, i32* %0)
  ret %"class.thrust::reference.205"* %this1
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIaEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i8* %first1.coerce, i8* %last1.coerce, i8* %first2.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %op = alloca %"struct.thrust::detail::binary_negate", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp23 = alloca %"struct.thrust::detail::binary_negate", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive13, i32 0, i32 0
  store i8* %first2.coerce, i8** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive17, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive18, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call19 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call19 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.56"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp20 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.56"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.56"* %agg.tmp21 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.56"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp22 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.199"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"struct.thrust::detail::binary_negate"* %agg.tmp23 to i8*
  %11 = bitcast %"struct.thrust::detail::binary_negate"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 1, i32 1, i1 false), !tbaa.struct !41
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive27, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp20, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive32, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive33, align 8
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %agg.tmp21, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive37, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive38, align 8
  %coerce.dive39 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp22, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive41, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive42, align 8
  %call43 = call i32* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIaEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i8* %12, i8* %13, i8* %14, i32* %15)
  %coerce.dive44 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive46, i32 0, i32 0
  store i32* %call43, i32** %coerce.dive47, align 8
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive50, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive51, align 8
  ret i32* %16
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEmiEl(%"class.thrust::iterator_facade.58"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  %n.addr = alloca i64, align 8
  %result = alloca %"class.thrust::detail::normal_iterator.56", align 8
  store %"class.thrust::iterator_facade.58"* %this, %"class.thrust::iterator_facade.58"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.56"* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.58"* %this1)
  %1 = bitcast %"class.thrust::detail::normal_iterator.56"* %result to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.56"* %result to %"class.thrust::iterator_facade.58"*
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEmIEl(%"class.thrust::iterator_facade.58"* %3, i64 %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.56"* %retval to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.56"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.56"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive5, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive6, align 8
  ret i8* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i8* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.58"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.56", align 8
  store %"class.thrust::iterator_facade.58"* %i, %"class.thrust::iterator_facade.58"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.56"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.58"* %1 to %"class.thrust::detail::normal_iterator.56"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.56"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.56"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.56"* %tmp to %"class.thrust::iterator_facade.58"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl(%"class.thrust::iterator_facade.58"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.56"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.56"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.56"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  %10 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.199", align 8
  store %"class.thrust::iterator_facade.201"* %i, %"class.thrust::iterator_facade.201"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.201"* %1 to %"class.thrust::detail::normal_iterator.199"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.199"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.199"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.199"* %tmp to %"class.thrust::iterator_facade.201"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEpLEl(%"class.thrust::iterator_facade.201"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.199"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.199"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive3, align 8
  ret i32* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.199"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive4, align 8
  ret i32* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail4not2INS_8equal_toIaEEEENS0_13binary_negateIT_EERKS5_(%"struct.thrust::equal_to"* dereferenceable(1) %pred) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::binary_negate", align 1
  %pred.addr = alloca %"struct.thrust::equal_to"*, align 8
  store %"struct.thrust::equal_to"* %pred, %"struct.thrust::equal_to"** %pred.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::equal_to"*, %"struct.thrust::equal_to"** %pred.addr, align 8
  call void @_ZN6thrust6detail13binary_negateINS_8equal_toIaEEEC2ERKS3_(%"struct.thrust::detail::binary_negate"* %retval, %"struct.thrust::equal_to"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm(%"class.thrust::detail::temporary_array.206"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.206"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.208", align 8
  %ref.tmp2 = alloca %"class.thrust::detail::temporary_allocator.209", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_array.206"* %this, %"class.thrust::detail::temporary_array.206"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_array.206"*, %"class.thrust::detail::temporary_array.206"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.206"* %this1 to %"class.thrust::detail::contiguous_storage.207"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.209"* %ref.tmp2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.208"* %ref.tmp, %"class.thrust::detail::temporary_allocator.209"* dereferenceable(8) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_(%"class.thrust::detail::contiguous_storage.207"* %0, i64 %1, %"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.210"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.208"*)*)(%"struct.thrust::detail::no_throw_allocator.208"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.210"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.209"*)*)(%"class.thrust::detail::temporary_allocator.209"* %ref.tmp2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIaaEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.206"* dereferenceable(24) %this1, i64 %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.210"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.208"*)*)(%"struct.thrust::detail::no_throw_allocator.208"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.210"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.209"*)*)(%"class.thrust::detail::temporary_allocator.209"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::detail::temporary_array.206"* %this1 to %"class.thrust::detail::contiguous_storage.207"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.207"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val8 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val8
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, i32* %stencil.coerce, %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"* dereferenceable(2) %new_value) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %stencil = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %pred = alloca %"struct.thrust::negate", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %new_value.addr = alloca %"struct.thrust::pair"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %agg.tmp22 = alloca %"struct.thrust::negate", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %stencil, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %stencil.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive17, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %new_value, %"struct.thrust::pair"** %new_value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call18 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call18 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.66"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp19 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.66"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp20 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %stencil to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.212"* %agg.tmp21 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.212"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %new_value.addr, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive26, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp19, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive31, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp20, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive35, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp21, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive39, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive40, align 8
  %call41 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"struct.thrust::pair"* %11, %"struct.thrust::pair"* %12, i32* %13, %"struct.thrust::pair"* %14, %"struct.thrust::pair"* dereferenceable(2) %10)
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive44, i32 0, i32 0
  store %"struct.thrust::pair"* %call41, %"struct.thrust::pair"** %coerce.dive45, align 8
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive48, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive49, align 8
  ret %"struct.thrust::pair"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl(%"class.thrust::iterator_facade.68"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  %n.addr = alloca i64, align 8
  %result = alloca %"class.thrust::detail::normal_iterator.66", align 8
  store %"class.thrust::iterator_facade.68"* %this, %"class.thrust::iterator_facade.68"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.68"* %this1)
  %1 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.66"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to %"class.thrust::iterator_facade.68"*
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl(%"class.thrust::iterator_facade.68"* %3, i64 %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.66"* %retval to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.66"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.66"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive5, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  ret %"struct.thrust::pair"* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.214"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.212", align 8
  store %"class.thrust::iterator_facade.214"* %i, %"class.thrust::iterator_facade.214"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.214"* %1 to %"class.thrust::detail::normal_iterator.212"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.212"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.212"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.212"* %tmp to %"class.thrust::iterator_facade.214"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.214"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.212"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.212"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.212"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.207"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.212"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.207"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %m_begin to %"class.thrust::iterator_facade.214"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl(%"class.thrust::iterator_facade.214"* %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.215"* @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_(%"class.thrust::reference.215"* %this, %"struct.thrust::pair"* dereferenceable(2) %v) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.215"*, align 8
  %v.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::reference.215"* %this, %"class.thrust::reference.215"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %v, %"struct.thrust::pair"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.215"*, %"class.thrust::reference.215"** %this.addr, align 8
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %v.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_(%"class.thrust::reference.215"* %this1, %"struct.thrust::pair"* %0)
  ret %"class.thrust::reference.215"* %this1
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.216"* byval align 8 %result) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.216", align 8
  %first = alloca %"class.thrust::zip_iterator.221", align 8
  %last = alloca %"class.thrust::zip_iterator.221", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.216", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %0 = bitcast %"class.thrust::zip_iterator.221"* %first to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.221"* %last to { %"struct.thrust::pair"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %8 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.221"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.221"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"class.thrust::zip_iterator.216"* %agg.tmp3 to i8*
  %13 = bitcast %"class.thrust::zip_iterator.216"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 16, i32 8, i1 false)
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp4 to i8*
  %15 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 1, i32 1, i1 false), !tbaa.struct !41
  %16 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp to { %"struct.thrust::pair"*, i32* }*
  %17 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %16, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %17, align 8
  %19 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %16, i32 0, i32 1
  %20 = load i32*, i32** %19, align 8
  %21 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp2 to { %"struct.thrust::pair"*, i32* }*
  %22 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %21, i32 0, i32 0
  %23 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %22, align 8
  %24 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %21, i32 0, i32 1
  %25 = load i32*, i32** %24, align 8
  %call5 = call { %"struct.thrust::pair"*, i32* } @_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %7, %"struct.thrust::pair"* %18, i32* %20, %"struct.thrust::pair"* %23, i32* %25, %"class.thrust::zip_iterator.216"* byval align 8 %agg.tmp3)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive, i32 0, i32 0
  %26 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive6 to { %"struct.thrust::pair"*, i32* }*
  %27 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %26, i32 0, i32 0
  %28 = extractvalue { %"struct.thrust::pair"*, i32* } %call5, 0
  store %"struct.thrust::pair"* %28, %"struct.thrust::pair"** %27, align 8
  %29 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %26, i32 0, i32 1
  %30 = extractvalue { %"struct.thrust::pair"*, i32* } %call5, 1
  store i32* %30, i32** %29, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive7, i32 0, i32 0
  %31 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive8 to { %"struct.thrust::pair"*, i32* }*
  %32 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %31, align 8
  ret { %"struct.thrust::pair"*, i32* } %32
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair"* %t.coerce0, i32* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.221", align 8
  %t = alloca %"class.thrust::tuple.223", align 8
  %agg.tmp = alloca %"class.thrust::tuple.223", align 8
  %0 = bitcast %"class.thrust::tuple.223"* %t to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %t.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %t.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::tuple.223"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.223"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.223"* %agg.tmp to { %"struct.thrust::pair"*, i32* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %5, i32 0, i32 1
  %9 = load i32*, i32** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_(%"class.thrust::zip_iterator.221"* %retval, %"struct.thrust::pair"* %7, i32* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive1 to { %"struct.thrust::pair"*, i32* }*
  %11 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair"*, i32* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.223", align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.212"* %t0, %"class.thrust::detail::normal_iterator.212"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_(%"class.thrust::tuple.223"* %retval, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive to { %"struct.thrust::pair"*, i32* }*
  %3 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %2, align 8
  ret { %"struct.thrust::pair"*, i32* } %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::iterator_facade.222"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.221", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.222"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.221", align 8
  store %"class.thrust::iterator_facade.222"* %i, %"class.thrust::iterator_facade.222"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.221"* %tmp to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.222"*, %"class.thrust::iterator_facade.222"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.222"* %1 to %"class.thrust::zip_iterator.221"*
  %3 = bitcast %"class.thrust::zip_iterator.221"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.221"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.221"* %tmp to %"class.thrust::iterator_facade.222"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.221"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl(%"class.thrust::iterator_facade.222"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.221"* %retval to i8*
  %8 = bitcast %"class.thrust::zip_iterator.221"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.221"* %tmp to i8*
  call void @llvm.lifetime.end(i64 16, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.223", %"class.thrust::tuple.223"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.224"* %coerce.dive1 to { %"struct.thrust::pair"*, i32* }*
  %11 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair"*, i32* } %11
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_(%"struct.thrust::pair"* %t.coerce0, i32* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.216", align 8
  %t = alloca %"class.thrust::tuple.218", align 8
  %agg.tmp = alloca %"class.thrust::tuple.218", align 8
  %0 = bitcast %"class.thrust::tuple.218"* %t to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %t.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %t.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::tuple.218"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.218"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.218"* %agg.tmp to { %"struct.thrust::pair"*, i32* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %5, i32 0, i32 1
  %9 = load i32*, i32** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_(%"class.thrust::zip_iterator.216"* %retval, %"struct.thrust::pair"* %7, i32* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive1 to { %"struct.thrust::pair"*, i32* }*
  %11 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair"*, i32* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.218", align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.66"* %t0, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_(%"class.thrust::tuple.218"* %retval, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive to { %"struct.thrust::pair"*, i32* }*
  %3 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %2, align 8
  ret { %"struct.thrust::pair"*, i32* } %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEC2ES7_(%"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %_binary_op = alloca %struct.add_pairs, align 1
  %this.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %this, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %this.addr, align 8
  %binary_op = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.206"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.206"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  store %"class.thrust::detail::temporary_array.206"* %this, %"class.thrust::detail::temporary_array.206"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.206"*, %"class.thrust::detail::temporary_array.206"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.206"* %this1 to %"class.thrust::detail::contiguous_storage.207"*
  %1 = bitcast %"class.thrust::detail::temporary_array.206"* %this1 to %"class.thrust::detail::contiguous_storage.207"*
  %call = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.207"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.206"* %this1 to %"class.thrust::detail::contiguous_storage.207"*
  %call7 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.207"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %call7, %"struct.thrust::pair"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive14, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive18, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.207"* %0, %"struct.thrust::pair"* %3, %"struct.thrust::pair"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.206"* %this1 to %"class.thrust::detail::contiguous_storage.207"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.207"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.206"* %this1 to %"class.thrust::detail::contiguous_storage.207"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.207"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  store %"class.thrust::detail::temporary_array"* %this, %"class.thrust::detail::temporary_array"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array"*, %"class.thrust::detail::temporary_array"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array"* %this1 to %"class.thrust::detail::contiguous_storage.198"*
  %1 = bitcast %"class.thrust::detail::temporary_array"* %this1 to %"class.thrust::detail::contiguous_storage.198"*
  %call = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  store i32* %call, i32** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array"* %this1 to %"class.thrust::detail::contiguous_storage.198"*
  %call7 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.198"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive10, i32 0, i32 0
  store i32* %call7, i32** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive14, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive18, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIjS7_NS_11use_defaultESD_EEEESF_(%"class.thrust::detail::contiguous_storage.198"* %0, i32* %3, i32* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array"* %this1 to %"class.thrust::detail::contiguous_storage.198"*
  call void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.198"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array"* %this1 to %"class.thrust::detail::contiguous_storage.198"*
  call void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.198"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EE(%"class.thrust::detail::temporary_allocator"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator"* %this, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator"*, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator"* %this1 to %"class.thrust::detail::tagged_allocator"*
  call void @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEEC2Ev(%"class.thrust::detail::tagged_allocator"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator", %"class.thrust::detail::temporary_allocator"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cuda::detail::tag"* %call, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator"* %this1 to %"class.thrust::detail::tagged_allocator"*
  call void @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev(%"class.thrust::detail::tagged_allocator"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEC2ERKS7_(%"struct.thrust::detail::no_throw_allocator"* %this, %"class.thrust::detail::temporary_allocator"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator"*, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %this, %"struct.thrust::detail::no_throw_allocator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator"* %other, %"class.thrust::detail::temporary_allocator"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator"* %this1 to %"class.thrust::detail::temporary_allocator"*
  %1 = load %"class.thrust::detail::temporary_allocator"*, %"class.thrust::detail::temporary_allocator"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEEC2ERKS6_(%"class.thrust::detail::temporary_allocator"* %0, %"class.thrust::detail::temporary_allocator"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEC2EmRKS9_(%"class.thrust::detail::contiguous_storage.198"* %this, i64 %n, %"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  %n.addr = alloca i64, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store %"struct.thrust::detail::no_throw_allocator"* %alloc, %"struct.thrust::detail::no_throw_allocator"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEC2ERKS8_(%"struct.thrust::detail::no_throw_allocator"* %m_allocator, %"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_(%"class.thrust::pointer.202"* %agg.tmp, i32* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEC2ES8_(%"class.thrust::detail::normal_iterator.199"* %m_begin, i32* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !188
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.198"* %this1, i64 %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont3
  ret void

lpad:                                             ; preds = %invoke.cont3, %invoke.cont, %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator"*)* @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator"*)*)(%"struct.thrust::detail::no_throw_allocator"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev(%"class.thrust::detail::tagged_allocator"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator"*, align 8
  store %"class.thrust::detail::tagged_allocator"* %this, %"class.thrust::detail::tagged_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator"*, %"class.thrust::detail::tagged_allocator"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22temporary_array_detail16construct_valuesIjNS0_15temporary_arrayIjNS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array"* dereferenceable(24), i64) #1 comdat {
entry:
  %.addr = alloca %"class.thrust::detail::temporary_array"*, align 8
  %.addr1 = alloca i64, align 8
  store %"class.thrust::detail::temporary_array"* %0, %"class.thrust::detail::temporary_array"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr1, align 8, !tbaa !13
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.198"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.198"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator"*)* @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator"*)*)(%"struct.thrust::detail::no_throw_allocator"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator"*)* @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator"*)*)(%"struct.thrust::detail::no_throw_allocator"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEEC2Ev(%"class.thrust::detail::tagged_allocator"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator"*, align 8
  store %"class.thrust::detail::tagged_allocator"* %this, %"class.thrust::detail::tagged_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator"*, %"class.thrust::detail::tagged_allocator"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEEC2ERKS6_(%"class.thrust::detail::temporary_allocator"* %this, %"class.thrust::detail::temporary_allocator"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator"*, align 8
  store %"class.thrust::detail::temporary_allocator"* %this, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator"* %other, %"class.thrust::detail::temporary_allocator"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator"*, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator"* %this1 to %"class.thrust::detail::tagged_allocator"*
  call void @_ZN6thrust6detail16tagged_allocatorIjNS_6system4cuda6detail3tagENS_7pointerIjS5_NS_11use_defaultES7_EEEC2Ev(%"class.thrust::detail::tagged_allocator"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator", %"class.thrust::detail::temporary_allocator"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator"*, %"class.thrust::detail::temporary_allocator"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator", %"class.thrust::detail::temporary_allocator"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::tag"* %ref, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEC2ERKS8_(%"struct.thrust::detail::no_throw_allocator"* %this, %"struct.thrust::detail::no_throw_allocator"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %this, %"struct.thrust::detail::no_throw_allocator"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator"* %0, %"struct.thrust::detail::no_throw_allocator"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator"* %this1 to %"class.thrust::detail::temporary_allocator"*
  %2 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator"* %2 to %"class.thrust::detail::temporary_allocator"*
  call void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEEC2ERKS6_(%"class.thrust::detail::temporary_allocator"* %1, %"class.thrust::detail::temporary_allocator"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_(%"class.thrust::pointer.202"* %this, i32* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.202"*, align 8
  %other.addr = alloca i32*, align 8
  store %"class.thrust::pointer.202"* %this, %"class.thrust::pointer.202"** %this.addr, align 8, !tbaa !1
  store i32* %other, i32** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.202"* %this1 to %"class.thrust::iterator_adaptor.203"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.203"* %0, i32** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEC2ES8_(%"class.thrust::detail::normal_iterator.199"* %this, i32* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.199"* %this, %"class.thrust::detail::normal_iterator.199"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %this2 to %"class.thrust::iterator_adaptor.200"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::iterator_adaptor.200"* %0, %"class.thrust::pointer.202"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.198"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.202", align 8
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateERS9_m(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEC2ES8_(%"class.thrust::detail::normal_iterator.199"* %ref.tmp, i32* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.199"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !188
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_(%"class.thrust::pointer.202"* %agg.tmp7, i32* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive8, i32 0, i32 0
  %6 = load i32*, i32** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEC2ES8_(%"class.thrust::detail::normal_iterator.199"* %ref.tmp6, i32* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !188
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.203"* %this, i32** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.203"*, align 8
  %iter.addr = alloca i32**, align 8
  store %"class.thrust::iterator_adaptor.203"* %this, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8, !tbaa !1
  store i32** %iter, i32*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.203"*, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.203"* %this1 to %"class.thrust::iterator_facade.204"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %this1, i32 0, i32 0
  %1 = load i32**, i32*** %iter.addr, align 8
  %2 = load i32*, i32** %1, align 8, !tbaa !1
  store i32* %2, i32** %m_iterator, align 8, !tbaa !192
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::iterator_adaptor.200"* %this, %"class.thrust::pointer.202"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.200"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.202"*, align 8
  store %"class.thrust::iterator_adaptor.200"* %this, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.202"* %iter, %"class.thrust::pointer.202"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.200"*, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.200"* %this1 to %"class.thrust::iterator_facade.201"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.202"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.202"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateERS9_m(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %a, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateERS9_mEN19workaround_warnings8allocateESB_m(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive3, align 8
  ret i32* %2
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE8allocateERS9_mEN19workaround_warnings8allocateESB_m(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %a, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator"* %0 to %"class.thrust::detail::temporary_allocator"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive3, align 8
  ret i32* %3
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.225", align 8
  %ref.tmp = alloca %"struct.thrust::pair.226", align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator"* %this, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator"*, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.225"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator"* %this1)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { i32*, i64 } @_ZN6thrust20get_temporary_bufferIjNS_6system4cuda6detail3tagEEENS_4pairINS_7pointerIT_T0_NS_11use_defaultES9_EENSA_15difference_typeEEERKNS_6detail21execution_policy_baseIS8_EESB_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.226"* %ref.tmp to { i32*, i64 }*
  %4 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { i32*, i64 } %call2, 0
  store i32* %5, i32** %4, align 8
  %6 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { i32*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEmEC2IS7_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.225"* %result, %"struct.thrust::pair.226"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.225", %"struct.thrust::pair.225"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !194
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.225", %"struct.thrust::pair.225"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.202"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE10deallocateENS_7pointerIjS5_NS_11use_defaultES8_EEm(%"class.thrust::detail::temporary_allocator"* %this1, i32* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.225"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.225", %"struct.thrust::pair.225"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.202"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.202"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.225"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive11, i32 0, i32 0
  %25 = load i32*, i32** %coerce.dive12, align 8
  ret i32* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { i32*, i64 } @_ZN6thrust20get_temporary_bufferIjNS_6system4cuda6detail3tagEEENS_4pairINS_7pointerIT_T0_NS_11use_defaultES9_EENSA_15difference_typeEEERKNS_6detail21execution_policy_baseIS8_EESB_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.226", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.226", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { i32*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferIjNS0_4cuda6detail3tagEEENS_4pairINS_7pointerIT_T0_NS_11use_defaultESB_EENSC_15difference_typeEEERNS_16execution_policyISA_EESD_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.226"* %agg.tmp to { i32*, i64 }*
  %4 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { i32*, i64 } %call2, 0
  store i32* %5, i32** %4, align 8
  %6 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { i32*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.226"* %agg.tmp to { i32*, i64 }*
  %9 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %8, i32 0, i32 0
  %10 = load i32*, i32** %9, align 8
  %11 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { i32*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairIjNS_6system4cuda6detail3tagENS_4pairINS_7pointerIjS6_NS_11use_defaultES9_EElEEEENS7_INS8_IT_T0_S9_S9_EENSE_15difference_typeEEET1_(i32* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.226"* %retval to { i32*, i64 }*
  %14 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { i32*, i64 } %call3, 0
  store i32* %15, i32** %14, align 8
  %16 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { i32*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.226"* %retval to { i32*, i64 }*
  %19 = load { i32*, i64 }, { i32*, i64 }* %18, align 8
  ret { i32*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator"*, align 8
  store %"class.thrust::detail::temporary_allocator"* %this, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator"*, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator", %"class.thrust::detail::temporary_allocator"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cuda::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEmEC2IS7_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.225"* %this, %"struct.thrust::pair.226"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.225"*, align 8
  %p.addr = alloca %"struct.thrust::pair.226"*, align 8
  store %"struct.thrust::pair.225"* %this, %"struct.thrust::pair.225"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.226"* %p, %"struct.thrust::pair.226"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.225"*, %"struct.thrust::pair.225"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.225", %"struct.thrust::pair.225"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.226"*, %"struct.thrust::pair.226"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.226", %"struct.thrust::pair.226"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.202"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.225", %"struct.thrust::pair.225"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.226"*, %"struct.thrust::pair.226"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.226", %"struct.thrust::pair.226"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !197
  store i64 %4, i64* %second, align 8, !tbaa !194
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE10deallocateENS_7pointerIjS5_NS_11use_defaultES8_EEm(%"class.thrust::detail::temporary_allocator"* %this, i32* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator"* %this, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator"*, %"class.thrust::detail::temporary_allocator"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator"* %this2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0, i32* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i32*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairIjNS_6system4cuda6detail3tagENS_4pairINS_7pointerIjS6_NS_11use_defaultES9_EElEEEENS7_INS8_IT_T0_S9_S9_EENSE_15difference_typeEEET1_(i32* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.226", align 8
  %p = alloca %"struct.thrust::pair.226", align 8
  %ptr = alloca %"class.thrust::pointer.202", align 8
  %0 = bitcast %"struct.thrust::pair.226"* %p to { i32*, i64 }*
  %1 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %0, i32 0, i32 0
  store i32* %p.coerce0, i32** %1, align 8
  %2 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.202"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.226", %"struct.thrust::pair.226"* %p, i32 0, i32 0
  %call = call i32* @_ZN6thrust16raw_pointer_castINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.202"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_(%"class.thrust::pointer.202"* %ptr, i32* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.226", %"struct.thrust::pair.226"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEC2ERKS7_RKl(%"struct.thrust::pair.226"* %retval, %"class.thrust::pointer.202"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.202"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.226"* %retval to { i32*, i64 }*
  %6 = load { i32*, i64 }, { i32*, i64 }* %5, align 8
  ret { i32*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { i32*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferIjNS0_4cuda6detail3tagEEENS_4pairINS_7pointerIT_T0_NS_11use_defaultESB_EENSC_15difference_typeEEERNS_16execution_policyISA_EESD_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.226", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.202", align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.202"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZN6thrust6mallocIjNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive1, align 8
  %call2 = call i32* @_ZNK6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.202"* %ptr)
  %tobool = icmp ne i32* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.202"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %7 = load i32*, i32** %coerce.dive4, align 8
  %call5 = call { i32*, i64 } @_ZN6thrust9make_pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEENS_4pairIT_T0_EES9_SA_(i32* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.226"* %retval to { i32*, i64 }*
  %9 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { i32*, i64 } %call5, 0
  store i32* %10, i32** %9, align 8
  %11 = getelementptr inbounds { i32*, i64 }, { i32*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { i32*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.202"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.226"* %retval to { i32*, i64 }*
  %15 = load { i32*, i64 }, { i32*, i64 }* %14, align 8
  ret { i32*, i64 } %15
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust16raw_pointer_castINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.202"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.202"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  store %"class.thrust::pointer.202"* %ptr, %"class.thrust::pointer.202"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive1, align 8
  %call = call i32* @_ZN6thrust6detail14pointer_traitsINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i32* %3)
  ret i32* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEC2ERKS7_RKl(%"struct.thrust::pair.226"* %this, %"class.thrust::pointer.202"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.226"*, align 8
  %x.addr = alloca %"class.thrust::pointer.202"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.226"* %this, %"struct.thrust::pair.226"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.202"* %x, %"class.thrust::pointer.202"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.226"*, %"struct.thrust::pair.226"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.226", %"struct.thrust::pair.226"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.226", %"struct.thrust::pair.226"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !197
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust6detail14pointer_traitsINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i32* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %ptr.coerce, i32** %coerce.dive1, align 8
  %call = call i32* @_ZNK6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.202"* %ptr)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.202"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.202"*, align 8
  store %"class.thrust::pointer.202"* %this, %"class.thrust::pointer.202"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.202"* %this1 to %"class.thrust::iterator_adaptor.203"*
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.203"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  ret i32* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.203"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.203"*, align 8
  store %"class.thrust::iterator_adaptor.203"* %this, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.203"*, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %this1, i32 0, i32 0
  ret i32** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6mallocIjNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca i32*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.202", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i32** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call i32* @_ZN6thrust6system6detail7generic6mallocIjNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %call2, i32** %coerce.dive3, align 8
  %call4 = call i32* @_ZN6thrust16raw_pointer_castINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.202"* dereferenceable(8) %ref.tmp)
  store i32* %call4, i32** %raw_ptr, align 8, !tbaa !1
  %4 = load i32*, i32** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_(%"class.thrust::pointer.202"* %retval, i32* %4)
  %5 = bitcast i32** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive5, i32 0, i32 0
  %6 = load i32*, i32** %coerce.dive6, align 8
  ret i32* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { i32*, i64 } @_ZN6thrust9make_pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEENS_4pairIT_T0_EES9_SA_(i32* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.226", align 8
  %x = alloca %"class.thrust::pointer.202", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %x.coerce, i32** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEC2ERKS7_RKl(%"struct.thrust::pair.226"* %retval, %"class.thrust::pointer.202"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.226"* %retval to { i32*, i64 }*
  %1 = load { i32*, i64 }, { i32*, i64 }* %0, align 8
  ret { i32*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic6mallocIjNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 4, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to i32*
  call void @_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_(%"class.thrust::pointer.202"* %retval, i32* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %6 = load i32*, i32** %coerce.dive4, align 8
  ret i32* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i32* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.202"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerIjS6_NS_11use_defaultES8_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i32* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerIjS6_NS_11use_defaultES8_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i32* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.202"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i32* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i32* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.202", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %ptr.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.202"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive4, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, i32* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerIjS4_NS_11use_defaultES6_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), i32* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.202", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %ptr.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call i32* @_ZN6thrust16raw_pointer_castINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.202"* dereferenceable(8) %ptr)
  %1 = bitcast i32* %call to i8*
  %call2 = call i32 @cudaFree(i8* %1)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.198"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.202", align 8
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.198"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %m_begin to %"class.thrust::iterator_adaptor.200"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.200"* %0)
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.198"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateERS9_NS_7pointerIjS7_NS_11use_defaultESD_EEm(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %m_allocator, i32* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IjEEPT_(%"class.thrust::pointer.202"* %agg.tmp6, i32* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive7, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEC2ES8_(%"class.thrust::detail::normal_iterator.199"* %ref.tmp, i32* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.199"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !188
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.198"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !188
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateERS9_NS_7pointerIjS7_NS_11use_defaultESD_EEm(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %a, i32* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %a, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateERS9_NS_7pointerIjS7_NS_11use_defaultESD_EEmEN19workaround_warnings10deallocateESB_SE_m(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %0, i32* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.202"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.200"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.200"*, align 8
  store %"class.thrust::iterator_adaptor.200"* %this, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.200"*, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.202"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE10deallocateERS9_NS_7pointerIjS7_NS_11use_defaultESD_EEmEN19workaround_warnings10deallocateESB_SE_m(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %a, i32* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %a, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIjS6_NS_11use_defaultESA_EEm(%"struct.thrust::detail::no_throw_allocator"* %0, i32* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIjS6_NS_11use_defaultESA_EEm(%"struct.thrust::detail::no_throw_allocator"* %this, i32* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %this, %"struct.thrust::detail::no_throw_allocator"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator"* %this2 to %"class.thrust::detail::temporary_allocator"*
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorIjNS_6system4cuda6detail3tagEE10deallocateENS_7pointerIjS5_NS_11use_defaultES8_EEm(%"class.thrust::detail::temporary_allocator"* %0, i32* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEixEl(%"class.thrust::iterator_facade.201"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  %n.addr = alloca i64, align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.199", align 8
  store %"class.thrust::iterator_facade.201"* %this, %"class.thrust::iterator_facade.201"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.201"* %this1)
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %call to %"class.thrust::iterator_facade.201"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive4, i32 0, i32 0
  store i32* %call2, i32** %coerce.dive5, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.199"* %coerce to %"class.thrust::iterator_facade.201"*
  %call6 = call i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEdeEv(%"class.thrust::iterator_facade.201"* %2)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive8, i32 0, i32 0
  store i32* %call6, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive11, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive12, align 8
  ret i32* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.201"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  store %"class.thrust::iterator_facade.201"* %this, %"class.thrust::iterator_facade.201"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.201"* %this1 to %"class.thrust::detail::normal_iterator.199"*
  ret %"class.thrust::detail::normal_iterator.199"* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEdeEv(%"class.thrust::iterator_facade.201"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  store %"class.thrust::iterator_facade.201"* %this, %"class.thrust::iterator_facade.201"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.201"* %this1)
  %call2 = call i32* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEEENT_9referenceERKSC_(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  store i32* %call2, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive6, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive7, align 8
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEEENT_9referenceERKSC_(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.199"* %f, %"class.thrust::detail::normal_iterator.199"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.199"* %0 to %"class.thrust::iterator_adaptor.200"*
  %call = call i32* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.200"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive1, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive4, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %2
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.200"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.200"*, align 8
  store %"class.thrust::iterator_adaptor.200"* %this, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.200"*, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.202"* %m_iterator to %"class.thrust::iterator_facade.204"*
  %call = call i32* @_ZNK6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEdeEv(%"class.thrust::iterator_facade.204"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  store i32* %call, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive5, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive6, align 8
  ret i32* %1
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEdeEv(%"class.thrust::iterator_facade.204"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.204"*, align 8
  store %"class.thrust::iterator_facade.204"* %this, %"class.thrust::iterator_facade.204"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.204"*, %"class.thrust::iterator_facade.204"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZNK6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7derivedEv(%"class.thrust::iterator_facade.204"* %this1)
  %call2 = call i32* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEENT_9referenceERKS9_(%"class.thrust::pointer.202"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  store i32* %call2, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive6, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive7, align 8
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEENT_9referenceERKS9_(%"class.thrust::pointer.202"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %f.addr = alloca %"class.thrust::pointer.202"*, align 8
  store %"class.thrust::pointer.202"* %f, %"class.thrust::pointer.202"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %f.addr, align 8
  %call = call i32* @_ZNK6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_E11dereferenceEv(%"class.thrust::pointer.202"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive1, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive4, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.202"* @_ZNK6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7derivedEv(%"class.thrust::iterator_facade.204"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.204"*, align 8
  store %"class.thrust::iterator_facade.204"* %this, %"class.thrust::iterator_facade.204"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.204"*, %"class.thrust::iterator_facade.204"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.204"* %this1 to %"class.thrust::pointer.202"*
  ret %"class.thrust::pointer.202"* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_E11dereferenceEv(%"class.thrust::pointer.202"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.205", align 8
  %this.addr = alloca %"class.thrust::pointer.202"*, align 8
  store %"class.thrust::pointer.202"* %this, %"class.thrust::pointer.202"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %this.addr, align 8
  call void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EC2ERKS7_(%"class.thrust::reference.205"* %retval, %"class.thrust::pointer.202"* dereferenceable(8) %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive3, align 8
  ret i32* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EC2ERKS7_(%"class.thrust::reference.205"* %this, %"class.thrust::pointer.202"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.205"*, align 8
  %ptr.addr = alloca %"class.thrust::pointer.202"*, align 8
  store %"class.thrust::reference.205"* %this, %"class.thrust::reference.205"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.202"* %ptr, %"class.thrust::pointer.202"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.205"*, %"class.thrust::reference.205"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E11assign_fromIPKjEEvT_(%"class.thrust::reference.205"* %this, i32* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.205"*, align 8
  %src.addr = alloca i32*, align 8
  %system1 = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  store %"class.thrust::reference.205"* %this, %"class.thrust::reference.205"** %this.addr, align 8, !tbaa !1
  store i32* %src, i32** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.205"*, %"class.thrust::reference.205"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  store %"struct.thrust::system::cuda::detail::tag"* null, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  store %"struct.thrust::system::cpp::detail::tag"* null, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %2 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %3 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %4 = load i32*, i32** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E11assign_fromIS5_NS2_3cpp6detail3tagEPKjEEvPT_PT0_T1_(%"class.thrust::reference.205"* %this1, %"struct.thrust::system::cuda::detail::tag"* %2, %"struct.thrust::system::cpp::detail::tag"* %3, i32* %4)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %6 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %6) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E11assign_fromIS5_NS2_3cpp6detail3tagEPKjEEvPT_PT0_T1_(%"class.thrust::reference.205"* %this, %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cpp::detail::tag"* %system2, i32* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.205"*, align 8
  %system1.addr = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2.addr = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  %src.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  store %"class.thrust::reference.205"* %this, %"class.thrust::reference.205"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cpp::detail::tag"* %system2, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  store i32* %src, i32** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.205"*, %"class.thrust::reference.205"** %this.addr, align 8
  %0 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %0 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %2 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call = call { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 0
  %6 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 0
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 1
  %8 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 1
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = load i32*, i32** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E24strip_const_assign_valueINS4_12cross_systemIS5_NS2_3cpp6detail3tagEEEPKjEEvRKT_T0_(%"class.thrust::reference.205"* %this1, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %ref.tmp, i32* %9)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_E24strip_const_assign_valueINS4_12cross_systemIS5_NS2_3cpp6detail3tagEEEPKjEEvRKT_T0_(%"class.thrust::reference.205"* %this, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %system, i32* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.205"*, align 8
  %system.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca i32*, align 8
  %non_const_system = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  store %"class.thrust::reference.205"* %this, %"class.thrust::reference.205"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %system, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8, !tbaa !7
  store i32* %src, i32** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.205"*, %"class.thrust::reference.205"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %1, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8, !tbaa !7
  %2 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %2 to %"struct.thrust::detail::execution_policy_base.229"*
  %call = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %3)
  %m_ptr = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.202"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i32*, i32** %src.addr, align 8, !tbaa !1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  %7 = load i32*, i32** %coerce.dive2, align 8
  call void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerIjS4_NS_11use_defaultES9_EEPKjEEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %call, i32* %7, i32* %6)
  %8 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.end(i64 8, i8* %8) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %system1, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %system2) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %system1.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %system2.addr = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  %non_const_system1 = alloca %"struct.thrust::execution_policy.120"*, align 8
  %non_const_system2 = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %system1, %"struct.thrust::system::cuda::detail::execution_policy.119"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %system2, %"struct.thrust::system::cpp::detail::execution_policy.86"** %system2.addr, align 8, !tbaa !7
  %0 = bitcast %"struct.thrust::execution_policy.120"** %non_const_system1 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %system1.addr, align 8
  %2 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %1 to %"struct.thrust::execution_policy.120"*
  store %"struct.thrust::execution_policy.120"* %2, %"struct.thrust::execution_policy.120"** %non_const_system1, align 8, !tbaa !7
  %3 = bitcast %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::system::cpp::detail::execution_policy.86"*, %"struct.thrust::system::cpp::detail::execution_policy.86"** %system2.addr, align 8
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %4, %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system2, align 8, !tbaa !7
  %5 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %non_const_system1, align 8
  %6 = load %"struct.thrust::system::cpp::detail::execution_policy.86"*, %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system2, align 8
  %7 = bitcast %"struct.thrust::system::cpp::detail::execution_policy.86"* %6 to %"struct.thrust::execution_policy.88"*
  call void @_ZN6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEEC2ERNS_16execution_policyIS4_EERNS9_IS7_EE(%"struct.thrust::system::cuda::detail::cross_system.227"* %retval, %"struct.thrust::execution_policy.120"* dereferenceable(1) %5, %"struct.thrust::execution_policy.88"* dereferenceable(1) %7)
  %8 = bitcast %"struct.thrust::system::cpp::detail::execution_policy.86"** %non_const_system2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %8) #5
  %9 = bitcast %"struct.thrust::execution_policy.120"** %non_const_system1 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %10 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %retval to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %11 = load { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %10, align 8
  ret { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerIjS4_NS_11use_defaultES9_EEPKjEEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, i32* %dst.coerce, i32* %src) #8 comdat {
entry:
  %dst = alloca %"class.thrust::pointer.202", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca i32*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %dst.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store i32* %src, i32** %src.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i32*, i32** %src.addr, align 8, !tbaa !1
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive3, align 8
  call void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerIjS4_NS_11use_defaultES9_EEPKjEEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSD_IS4_S7_EESA_SC_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %0, i32* %4, i32* %3)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.229"*, align 8
  store %"struct.thrust::detail::execution_policy_base.229"* %x, %"struct.thrust::detail::execution_policy_base.229"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.229"*, %"struct.thrust::detail::execution_policy_base.229"** %x.addr, align 8
  %1 = bitcast %"struct.thrust::detail::execution_policy_base.229"* %0 to %"struct.thrust::system::cuda::detail::cross_system.227"*
  ret %"struct.thrust::system::cuda::detail::cross_system.227"* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerIjS4_NS_11use_defaultES9_EEPKjEEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSD_IS4_S7_EESA_SC_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, i32* %dst.coerce, i32* %src) #8 comdat align 2 {
entry:
  %dst = alloca %"class.thrust::pointer.202", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca i32*, align 8
  %rotated_systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %dst.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store i32* %src, i32** %src.addr, align 8, !tbaa !1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %call = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZNK6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEE6rotateEv(%"struct.thrust::system::cuda::detail::cross_system.227"* %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %3 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 0
  %4 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 0
  store %"struct.thrust::execution_policy.88"* %4, %"struct.thrust::execution_policy.88"** %3, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 1
  %6 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 1
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to %"struct.thrust::detail::execution_policy_base.132"*
  %8 = load i32*, i32** %src.addr, align 8, !tbaa !1
  %9 = load i32*, i32** %src.addr, align 8, !tbaa !1
  %add.ptr = getelementptr inbounds i32, i32* %9, i64 1
  %10 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.202"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %12 = load i32*, i32** %coerce.dive3, align 8
  %call4 = call i32* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKjNS_7pointerIjS8_NS_11use_defaultESD_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SM_SF_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %7, i32* %8, i32* %add.ptr, i32* %12)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive5, i32 0, i32 0
  store i32* %call4, i32** %coerce.dive6, align 8
  %13 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.end(i64 16, i8* %13) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZNK6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEE6rotateEv(%"struct.thrust::system::cuda::detail::cross_system.227"* %this) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %this.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %this, %"struct.thrust::system::cuda::detail::cross_system.227"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %this.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %this1, i32 0, i32 1
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2, align 8, !tbaa !7
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %this1, i32 0, i32 0
  %ref2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1, align 8, !tbaa !7
  call void @_ZN6thrust6system4cuda6detail12cross_systemINS0_3cpp6detail3tagENS2_3tagEEC2ERNS_16execution_policyIS6_EERNS9_IS7_EE(%"struct.thrust::system::cuda::detail::cross_system"* %retval, %"struct.thrust::execution_policy.88"* dereferenceable(1) %ref, %"struct.thrust::execution_policy.120"* dereferenceable(1) %ref2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %retval to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = load { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, align 8
  ret { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %1
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKjNS_7pointerIjS8_NS_11use_defaultESD_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SM_SF_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, i32* %first, i32* %last, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %result = alloca %"class.thrust::pointer.202", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %first.addr = alloca i32*, align 8
  %last.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i32* %last, i32** %last.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call2 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %4 = load i32*, i32** %last.addr, align 8, !tbaa !1
  %5 = bitcast %"class.thrust::pointer.202"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::pointer.202"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %8 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 0
  %9 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %8, align 8
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 1
  %11 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %10, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive4, i32 0, i32 0
  %12 = load i32*, i32** %coerce.dive5, align 8
  %call6 = call i32* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_(%"struct.thrust::execution_policy.88"* %9, %"struct.thrust::execution_policy.120"* %11, i32* %3, i32* %4, i32* %12)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive7, i32 0, i32 0
  store i32* %call6, i32** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive9, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive10, align 8
  ret i32* %13
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %first, i32* %last, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.202", align 8
  %first.addr = alloca i32*, align 8
  %last.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.202", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i32* %last, i32** %last.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %6 = load i32*, i32** %last.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.202"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.202"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive4, align 8
  %call = call i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, i32* %5, i32* %6, i32* %14)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive5, i32 0, i32 0
  store i32* %call, i32** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive7, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive8, align 8
  ret i32* %15
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %begin, i32* %end, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.202", align 8
  %begin.addr = alloca i32*, align 8
  %end.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.202", align 8
  %agg.tmp3 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store i32* %begin, i32** %begin.addr, align 8, !tbaa !1
  store i32* %end, i32** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load i32*, i32** %begin.addr, align 8, !tbaa !1
  %6 = load i32*, i32** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.202"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.202"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp2, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive5, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive6, align 8
  %call = call i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_NS_27random_access_traversal_tagESJ_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, i32* %5, i32* %6, i32* %14)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive7, i32 0, i32 0
  store i32* %call, i32** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive9, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive10, align 8
  ret i32* %15
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_NS_27random_access_traversal_tagESJ_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %begin, i32* %end, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.202", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %begin.addr = alloca i32*, align 8
  %end.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.202", align 8
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp6 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store i32* %begin, i32** %begin.addr, align 8, !tbaa !1
  store i32* %end, i32** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load i32*, i32** %begin.addr, align 8, !tbaa !1
  %6 = load i32*, i32** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.202"* %agg.tmp3 to i8*
  %8 = bitcast %"class.thrust::pointer.202"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive7, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive8, align 8
  %call = call i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_NS_27random_access_traversal_tagESJ_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, i32* %5, i32* %6, i32* %14)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive9, i32 0, i32 0
  store i32* %call, i32** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive11, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive12, align 8
  ret i32* %15
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKjNS_7pointerIjS7_NS_11use_defaultESB_EEEET2_NS2_12cross_systemIT_T0_EET1_SI_SD_NS_27random_access_traversal_tagESJ_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %begin, i32* %end, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.202", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %begin.addr = alloca i32*, align 8
  %end.addr = alloca i32*, align 8
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store i32* %begin, i32** %begin.addr, align 8, !tbaa !1
  store i32* %end, i32** %end.addr, align 8, !tbaa !1
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = load i32*, i32** %end.addr, align 8, !tbaa !1
  %8 = load i32*, i32** %begin.addr, align 8, !tbaa !1
  %sub.ptr.lhs.cast = ptrtoint i32* %7 to i64
  %sub.ptr.rhs.cast = ptrtoint i32* %8 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  store i64 %sub.ptr.div, i64* %n, align 8, !tbaa !13
  %9 = load i32*, i32** %begin.addr, align 8, !tbaa !1
  %10 = load i64, i64* %n, align 8, !tbaa !13
  %11 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %12 = bitcast %"class.thrust::pointer.202"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive4, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive5, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKjlNS_7pointerIjS7_NS_11use_defaultESB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i32* %9, i64 %10, i32* %13)
  %14 = bitcast %"class.thrust::pointer.202"* %result to %"class.thrust::iterator_facade.204"*
  %15 = load i64, i64* %n, align 8, !tbaa !13
  %call = call i32* @_ZN6thrustplINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEET_RKNS_15iterator_facadeISB_T0_T1_T2_T3_T4_EENSB_15difference_typeE(%"class.thrust::iterator_facade.204"* dereferenceable(1) %14, i64 %15)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive6, i32 0, i32 0
  store i32* %call, i32** %coerce.dive7, align 8
  %16 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive8, i32 0, i32 0
  %17 = load i32*, i32** %coerce.dive9, align 8
  ret i32* %17
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKjlNS_7pointerIjS7_NS_11use_defaultESB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i32* %first, i64 %n, i32* %result.coerce) #0 comdat {
entry:
  %result = alloca %"class.thrust::pointer.202", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce = alloca %"class.thrust::reference.205", align 8
  %src = alloca i8*, align 8
  %ref.tmp9 = alloca i32*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::pointer.202"* %result to %"class.thrust::iterator_facade.204"*
  %call = call i32* @_ZNK6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEdeEv(%"class.thrust::iterator_facade.204"* %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive3, i32 0, i32 0
  store i32* %call, i32** %coerce.dive4, align 8
  %call5 = call i32* @_ZNK6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EadEv(%"class.thrust::reference.205"* %coerce)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %ref.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive6, i32 0, i32 0
  store i32* %call5, i32** %coerce.dive7, align 8
  %call8 = call i32* @_ZN6thrust16raw_pointer_castINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.202"* dereferenceable(8) %ref.tmp)
  %2 = bitcast i32* %call8 to i8*
  store i8* %2, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load i32*, i32** %first.addr, align 8, !tbaa !1
  store i32* %4, i32** %ref.tmp9, align 8, !tbaa !1
  %call10 = call i32* @_ZN6thrust16raw_pointer_castIPKjEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i32** dereferenceable(8) %ref.tmp9)
  %5 = bitcast i32* %call10 to i8*
  store i8* %5, i8** %src, align 8, !tbaa !1
  %6 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %6) #5
  %7 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %7, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %8 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call11 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %8)
  %9 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call11 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %10 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %10, i32 0, i32 1
  %ref12 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %11 = bitcast %"struct.thrust::execution_policy.120"* %ref12 to %"struct.thrust::detail::execution_policy_base.121"*
  %call13 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %11)
  %12 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call13 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call14 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %9, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %12)
  store i32 %call14, i32* %kind, align 4, !tbaa !97
  %13 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  %14 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system115 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %14, i32 0, i32 0
  %ref16 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system115, align 8, !tbaa !7
  %15 = bitcast %"struct.thrust::execution_policy.88"* %ref16 to %"struct.thrust::detail::execution_policy_base.85"*
  %call17 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %15)
  %16 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call17 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %17 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system218 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %17, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system218, align 8, !tbaa !7
  %18 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %18)
  %19 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %16, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %19)
  store %struct.CUstream_st* %call21, %struct.CUstream_st** %s, align 8, !tbaa !1
  %20 = load i8*, i8** %dst, align 8, !tbaa !1
  %21 = load i8*, i8** %src, align 8, !tbaa !1
  %22 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %22, 4
  %23 = load i32, i32* %kind, align 4, !tbaa !97
  %24 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %20, i8* %21, i64 %mul, i32 %23, %struct.CUstream_st* %24)
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %25, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %26 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %26) #5
  %27 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %27) #5
  %28 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %28) #5
  %29 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrustplINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEET_RKNS_15iterator_facadeISB_T0_T1_T2_T3_T4_EENSB_15difference_typeE(%"class.thrust::iterator_facade.204"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.204"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.202", align 8
  store %"class.thrust::iterator_facade.204"* %i, %"class.thrust::iterator_facade.204"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.202"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.204"*, %"class.thrust::iterator_facade.204"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.204"* %1 to %"class.thrust::pointer.202"*
  %3 = bitcast %"class.thrust::pointer.202"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.202"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.202"* %tmp to %"class.thrust::iterator_facade.204"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEpLEl(%"class.thrust::iterator_facade.204"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.202"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.202"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.202"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive1, align 8
  ret i32* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32* @_ZNK6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EadEv(%"class.thrust::reference.205"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.202", align 8
  %this.addr = alloca %"class.thrust::reference.205"*, align 8
  store %"class.thrust::reference.205"* %this, %"class.thrust::reference.205"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.205"*, %"class.thrust::reference.205"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.202"* %retval to i8*
  %1 = bitcast %"class.thrust::pointer.202"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive2, align 8
  ret i32* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust16raw_pointer_castIPKjEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i32** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i32**, align 8
  store i32** %ptr, i32*** %ptr.addr, align 8, !tbaa !7
  %0 = load i32**, i32*** %ptr.addr, align 8
  %1 = load i32*, i32** %0, align 8, !tbaa !1
  %call = call i32* @_ZN6thrust6detail14pointer_traitsIPKjE3getES3_(i32* %1)
  ret i32* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32* @_ZN6thrust6detail14pointer_traitsIPKjE3getES3_(i32* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i32*, align 8
  store i32* %ptr, i32** %ptr.addr, align 8, !tbaa !1
  %0 = load i32*, i32** %ptr.addr, align 8, !tbaa !1
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.202"* @_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEpLEl(%"class.thrust::iterator_facade.204"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.204"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.204"* %this, %"class.thrust::iterator_facade.204"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.204"*, %"class.thrust::iterator_facade.204"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7derivedEv(%"class.thrust::iterator_facade.204"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEEvRT_NS9_15difference_typeE(%"class.thrust::pointer.202"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7derivedEv(%"class.thrust::iterator_facade.204"* %this1)
  ret %"class.thrust::pointer.202"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEEvRT_NS9_15difference_typeE(%"class.thrust::pointer.202"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.202"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.202"* %f, %"class.thrust::pointer.202"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %0 to %"class.thrust::iterator_adaptor.203"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7advanceEl(%"class.thrust::iterator_adaptor.203"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.202"* @_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7derivedEv(%"class.thrust::iterator_facade.204"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.204"*, align 8
  store %"class.thrust::iterator_facade.204"* %this, %"class.thrust::iterator_facade.204"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.204"*, %"class.thrust::iterator_facade.204"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.204"* %this1 to %"class.thrust::pointer.202"*
  ret %"class.thrust::pointer.202"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE7advanceEl(%"class.thrust::iterator_adaptor.203"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.203"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.203"* %this, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.203"*, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %this1, i32 0, i32 0
  %1 = load i32*, i32** %m_iterator, align 8, !tbaa !192
  %add.ptr = getelementptr inbounds i32, i32* %1, i64 %0
  store i32* %add.ptr, i32** %m_iterator, align 8, !tbaa !192
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEEC2ERNS_16execution_policyIS4_EERNS9_IS7_EE(%"struct.thrust::system::cuda::detail::cross_system.227"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %this, %"struct.thrust::system::cuda::detail::cross_system.227"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system1, %"struct.thrust::execution_policy.120"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %this1 to %"struct.thrust::execution_policy.228"*
  %system12 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1.addr, align 8
  store %"struct.thrust::execution_policy.120"* %1, %"struct.thrust::execution_policy.120"** %system12, align 8, !tbaa !7
  %system23 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  store %"struct.thrust::execution_policy.88"* %2, %"struct.thrust::execution_policy.88"** %system23, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIaEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i8* %first1.coerce, i8* %last1.coerce, i8* %first2.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.56", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %op = alloca %"struct.thrust::detail::binary_negate", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp19 = alloca %"class.thrust::tuple.232", align 8
  %agg.tmp20 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp21 = alloca %"class.thrust::tuple.232", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  %agg.tmp23 = alloca %"struct.thrust::detail::binary_negate", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive3, i32 0, i32 0
  store i8* %first1.coerce, i8** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive8, i32 0, i32 0
  store i8* %last1.coerce, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.56", %"class.thrust::detail::normal_iterator.56"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.57", %"class.thrust::iterator_adaptor.57"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr", %"class.thrust::device_ptr"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer", %"class.thrust::pointer"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.59", %"class.thrust::iterator_adaptor.59"* %coerce.dive13, i32 0, i32 0
  store i8* %first2.coerce, i8** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive17, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive18, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.230"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.232"* sret %agg.tmp19, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.230"* sret %agg.tmp, %"class.thrust::tuple.232"* byval align 8 %agg.tmp19)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.232"* sret %agg.tmp21, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.230"* sret %agg.tmp20, %"class.thrust::tuple.232"* byval align 8 %agg.tmp21)
  %3 = bitcast %"struct.thrust::detail::binary_negate"* %agg.tmp23 to i8*
  %4 = bitcast %"struct.thrust::detail::binary_negate"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEC2ES5_(%"struct.thrust::detail::binary_transform_functor.235"* %agg.tmp22)
  call void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_(%"class.thrust::zip_iterator.230"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp20)
  %call = call dereferenceable(24) %"class.thrust::tuple.232"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.230"* %zipped_result)
  %5 = bitcast %"class.thrust::tuple.232"* %call to %"struct.thrust::detail::cons.233"*
  %call24 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.233"* dereferenceable(24) %5)
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %retval to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %call24 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::zip_iterator.230"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %8) #5
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive27, i32 0, i32 0
  %9 = load i32*, i32** %coerce.dive28, align 8
  ret i32* %9
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_(%"class.thrust::zip_iterator.230"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.230"* byval align 8 %first, %"class.thrust::zip_iterator.230"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %4 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp2 to i8*
  %5 = bitcast %"class.thrust::zip_iterator.230"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %agg.tmp3 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_(%"class.thrust::zip_iterator.230"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.230"* noalias sret %agg.result, %"class.thrust::tuple.232"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.232", align 8
  %0 = bitcast %"class.thrust::tuple.232"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.232"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_(%"class.thrust::zip_iterator.230"* %agg.result, %"class.thrust::tuple.232"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.232"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.56"* %t0, %"class.thrust::detail::normal_iterator.56"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.56"* %t1, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_(%"class.thrust::tuple.232"* %agg.result, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEC2ES5_(%"struct.thrust::detail::binary_transform_functor.235"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_negate", align 1
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor.235"*, align 8
  store %"struct.thrust::detail::binary_transform_functor.235"* %this, %"struct.thrust::detail::binary_transform_functor.235"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor.235"*, %"struct.thrust::detail::binary_transform_functor.235"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.235", %"struct.thrust::detail::binary_transform_functor.235"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::binary_negate"* %f2 to i8*
  %1 = bitcast %"struct.thrust::detail::binary_negate"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.233"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.233"*, align 8
  store %"struct.thrust::detail::cons.233"* %c, %"struct.thrust::detail::cons.233"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.233"*, %"struct.thrust::detail::cons.233"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIaEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.233"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.232"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.230"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  store %"class.thrust::zip_iterator.230"* %this, %"class.thrust::zip_iterator.230"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.230", %"class.thrust::zip_iterator.230"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.232"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_(%"class.thrust::zip_iterator.230"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.230"* byval align 8 %first, %"class.thrust::zip_iterator.230"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %3 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp1 to i8*
  %4 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 8, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp2 to i8*
  %6 = bitcast %"class.thrust::zip_iterator.230"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_(%"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp1, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp2)
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %agg.tmp3 to i8*
  %8 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_(%"class.thrust::zip_iterator.230"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp, i64 %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_(%"class.thrust::zip_iterator.230"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.230"* byval align 8 %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp1 = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %agg.tmp1 to i8*
  %5 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_(%"class.thrust::zip_iterator.230"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_(%"class.thrust::zip_iterator.230"* byval align 8 %first, %"class.thrust::zip_iterator.230"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.230", align 8
  %0 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.230"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_(%"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIaEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_(%"class.thrust::zip_iterator.230"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.230"* byval align 8 %first, i64 %n) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.235", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp2 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp4 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce9 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp11 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp12 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp13 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp14 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp15 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp16 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %ref.tmp19 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp22 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp25 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp26 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp27 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp28 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %ref.tmp29 = alloca i32, align 4
  %agg.tmp.ensured32 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp33 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp38 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp39 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp40 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp41 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.236"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.236"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor.235"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp3 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 24, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.236"* %agg.tmp4 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.236"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %call5 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp3, i32 %15)
  %16 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call5, i64* %16, align 4
  %call6 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %17 = load i64, i64* %n.addr, align 8, !tbaa !13
  %18 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %19 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %18, %19
  %call7 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %17, i32 %mul)
  br i1 %call7, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %20 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %20) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %21 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call8 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce9, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive10 to { i64*, i64* }*
  %23 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %22, i32 0, i32 0
  %24 = extractvalue { i64*, i64* } %call8, 0
  store i64* %24, i64** %23, align 8
  %25 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %22, i32 0, i32 1
  %26 = extractvalue { i64*, i64* } %call8, 1
  store i64* %26, i64** %25, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp12, i64 2147483647, i64 2147483647, i64 2147483647)
  %27 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp14 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %27, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %28 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp15 to i8*
  %29 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* %29, i64 24, i32 8, i1 false)
  %30 = bitcast %"struct.thrust::detail::wrapped_function.236"* %agg.tmp16 to i8*
  %31 = bitcast %"struct.thrust::detail::wrapped_function.236"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 1, i32 1, i1 false), !tbaa.struct !41
  %32 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp12, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp15, i64 %32)
  %33 = bitcast %"struct.thrust::pair.82"* %ref.tmp11 to i64*
  store i64 %call17, i64* %33, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce9, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp11)
  %34 = load i64, i64* %n.addr, align 8, !tbaa !13
  %35 = load i64, i64* %group_size, align 8, !tbaa !13
  %call20 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %34, i64 %35)
  store i64 %call20, i64* %ref.tmp19, align 8, !tbaa !13
  %call21 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp19)
  store i64 %call21, i64* %num_groups, align 8, !tbaa !13
  %36 = load i64, i64* %num_groups, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %38 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %39 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %38 to %"struct.thrust::detail::execution_policy_base.121"*
  %call23 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %39)
  %40 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call23 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call24 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %40)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp22, i64 %36, i64 %37, i64 0, %struct.CUstream_st* %call24)
  %41 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp26 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %41, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %42 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp27 to i8*
  %43 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %42, i8* %43, i64 24, i32 8, i1 false)
  %44 = bitcast %"struct.thrust::detail::wrapped_function.236"* %agg.tmp28 to i8*
  %45 = bitcast %"struct.thrust::detail::wrapped_function.236"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 1, i32 1, i1 false), !tbaa.struct !41
  %46 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp22, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp27, i64 %46)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %47 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %47) #5
  %48 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %48) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %49 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %50 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call30 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %49, i32 %50)
  store i32 %call30, i32* %ref.tmp29, align 4, !tbaa !11
  %call31 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp29)
  store i32 %call31, i32* %narrow_num_groups, align 4, !tbaa !11
  %51 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv34 = zext i32 %51 to i64
  %52 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv35 = zext i32 %52 to i64
  %53 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %54 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %53 to %"struct.thrust::detail::execution_policy_base.121"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %54)
  %55 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call36 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %55)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp33, i64 %conv34, i64 %conv35, i64 0, %struct.CUstream_st* %call37)
  %56 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp39 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %56, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %57 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp40 to i8*
  %58 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %57, i8* %58, i64 24, i32 8, i1 false)
  %59 = bitcast %"struct.thrust::detail::wrapped_function.236"* %agg.tmp41 to i8*
  %60 = bitcast %"struct.thrust::detail::wrapped_function.236"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* %60, i64 1, i32 1, i1 false), !tbaa.struct !41
  %61 = load i32, i32* %narrow_n, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured32, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp33, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp40, i32 %61)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured32) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %62 = bitcast %"class.thrust::zip_iterator.230"* %first to %"class.thrust::iterator_facade.231"*
  %63 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::zip_iterator.230"* sret %agg.result, %"class.thrust::iterator_facade.231"* dereferenceable(1) %62, i64 %63)
  %64 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %64) #5
  %65 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %65) #5
  %66 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %66) #5
  %67 = bitcast %"struct.thrust::detail::wrapped_function.236"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %67) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.236"* %this, %"struct.thrust::detail::binary_transform_functor.235"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %f.addr = alloca %"struct.thrust::detail::binary_transform_functor.235"*, align 8
  store %"struct.thrust::detail::wrapped_function.236"* %this, %"struct.thrust::detail::wrapped_function.236"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::binary_transform_functor.235"* %f, %"struct.thrust::detail::binary_transform_functor.235"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.236", %"struct.thrust::detail::wrapped_function.236"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::binary_transform_functor.235"*, %"struct.thrust::detail::binary_transform_functor.235"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.235"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.230"* byval align 8 %arg2, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIaEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp3)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.230"* byval align 8 %arg2, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIaEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp3)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.230"* byval align 8 %arg2, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.230"* byval align 8 %arg2, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.236", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::zip_iterator.230"* noalias sret %agg.result, %"class.thrust::iterator_facade.231"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %i.addr = alloca %"class.thrust::iterator_facade.231"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.230", align 8
  store %"class.thrust::iterator_facade.231"* %i, %"class.thrust::iterator_facade.231"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.230"* %tmp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.231"*, %"class.thrust::iterator_facade.231"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.231"* %1 to %"class.thrust::zip_iterator.230"*
  %3 = bitcast %"class.thrust::zip_iterator.230"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.230"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.230"* %tmp to %"class.thrust::iterator_facade.231"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.230"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl(%"class.thrust::iterator_facade.231"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.230"* %agg.result to i8*
  %8 = bitcast %"class.thrust::zip_iterator.230"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.230"* %tmp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %9) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIaEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.238", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %a2, %"class.thrust::zip_iterator.230"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %a3, %"struct.thrust::detail::wrapped_function.236"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIaEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.238"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %agg.result, %"class.thrust::tuple.238"* dereferenceable(40) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIaEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.238"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %t1, %"class.thrust::zip_iterator.230"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t2, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIaEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj(%"class.thrust::tuple.238"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %this, %"class.thrust::tuple.238"* dereferenceable(40) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"*, align 8
  %args.addr = alloca %"class.thrust::tuple.238"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.238"* %args, %"class.thrust::tuple.238"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.238"*, %"class.thrust::tuple.238"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.238"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.238"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIaEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj(%"class.thrust::tuple.238"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.238"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.238"* %this, %"class.thrust::tuple.238"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %t1, %"class.thrust::zip_iterator.230"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t2, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.238"*, %"class.thrust::tuple.238"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.238"* %this1 to %"struct.thrust::detail::cons.239"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.239"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.239"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.239"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.239"* %this, %"struct.thrust::detail::cons.239"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %t2, %"class.thrust::zip_iterator.230"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t3, %"struct.thrust::detail::wrapped_function.236"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.239"*, %"struct.thrust::detail::cons.239"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.239", %"struct.thrust::detail::cons.239"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.239", %"struct.thrust::detail::cons.239"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.240"* %tail, %"class.thrust::zip_iterator.230"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.240"* %this, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.240"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.240"* %this, %"struct.thrust::detail::cons.240"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.230"* %t1, %"class.thrust::zip_iterator.230"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t2, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.240"*, %"struct.thrust::detail::cons.240"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.240", %"struct.thrust::detail::cons.240"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.230"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.230"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.240", %"struct.thrust::detail::cons.240"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.241"* %tail, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.241"* %this, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.241"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.241"* %this, %"struct.thrust::detail::cons.241"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.236"* %t1, %"struct.thrust::detail::wrapped_function.236"** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.241"*, %"struct.thrust::detail::cons.241"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.241", %"struct.thrust::detail::cons.241"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.236"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.236"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.241", %"struct.thrust::detail::cons.241"* %this1, i32 0, i32 1
  %3 = load i32*, i32** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %tail, i32* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIaEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.250", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %a2, %"class.thrust::zip_iterator.230"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %a3, %"struct.thrust::detail::wrapped_function.236"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIaEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.250"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %agg.result, %"class.thrust::tuple.250"* dereferenceable(48) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIaEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.250"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %t1, %"class.thrust::zip_iterator.230"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t2, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIaEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl(%"class.thrust::tuple.250"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIaEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %this, %"class.thrust::tuple.250"* dereferenceable(48) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"*, align 8
  %args.addr = alloca %"class.thrust::tuple.250"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.250"* %args, %"class.thrust::tuple.250"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.250"*, %"class.thrust::tuple.250"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.250"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.250"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 48, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIaEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl(%"class.thrust::tuple.250"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.250"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.250"* %this, %"class.thrust::tuple.250"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %t1, %"class.thrust::zip_iterator.230"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t2, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.250"*, %"class.thrust::tuple.250"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.250"* %this1 to %"struct.thrust::detail::cons.251"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.251"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.251"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.251"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.251"* %this, %"struct.thrust::detail::cons.251"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %t2, %"class.thrust::zip_iterator.230"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t3, %"struct.thrust::detail::wrapped_function.236"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.251"*, %"struct.thrust::detail::cons.251"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.251", %"struct.thrust::detail::cons.251"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.251", %"struct.thrust::detail::cons.251"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.252"* %tail, %"class.thrust::zip_iterator.230"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.252"* %this, %"class.thrust::zip_iterator.230"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.252"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.252"* %this, %"struct.thrust::detail::cons.252"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.230"* %t1, %"class.thrust::zip_iterator.230"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.236"* %t2, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.252"*, %"struct.thrust::detail::cons.252"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.252", %"struct.thrust::detail::cons.252"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.230"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.230"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.252", %"struct.thrust::detail::cons.252"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.253"* %tail, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIaEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.253"* %this, %"struct.thrust::detail::wrapped_function.236"* dereferenceable(1) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.253"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.236"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.253"* %this, %"struct.thrust::detail::cons.253"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.236"* %t1, %"struct.thrust::detail::wrapped_function.236"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.253"*, %"struct.thrust::detail::cons.253"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.253", %"struct.thrust::detail::cons.253"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.236"*, %"struct.thrust::detail::wrapped_function.236"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.236"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.236"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.253", %"struct.thrust::detail::cons.253"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %tail, i64* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 56, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 56, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 56, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.254"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.249", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 56, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !199
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.255"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.249"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.259"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.256"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.258"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 48, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 48, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %task to i8*
  call void @llvm.lifetime.start(i64 80, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 48, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %task to i8*
  call void @llvm.lifetime.end(i64 80, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.242"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.237", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !201
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.243"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.237"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.247"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.244"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 80, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 80, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 80, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIaEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIaEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.246"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.230"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl(%"class.thrust::iterator_facade.231"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.231"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.231"* %this, %"class.thrust::iterator_facade.231"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.231"*, %"class.thrust::iterator_facade.231"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.230"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.231"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE(%"class.thrust::zip_iterator.230"* dereferenceable(24) %call, i64 %0)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.230"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.231"* %this1)
  ret %"class.thrust::zip_iterator.230"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE(%"class.thrust::zip_iterator.230"* dereferenceable(24) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.230"* %f, %"class.thrust::zip_iterator.230"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl(%"class.thrust::zip_iterator.230"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.230"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.231"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.231"*, align 8
  store %"class.thrust::iterator_facade.231"* %this, %"class.thrust::iterator_facade.231"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.231"*, %"class.thrust::iterator_facade.231"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.231"* %this1 to %"class.thrust::zip_iterator.230"*
  ret %"class.thrust::zip_iterator.230"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl(%"class.thrust::zip_iterator.230"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.230"* %this, %"class.thrust::zip_iterator.230"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.230", %"class.thrust::zip_iterator.230"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_(%"class.thrust::tuple.232"* dereferenceable(24) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_(%"class.thrust::tuple.232"* dereferenceable(24) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.232"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.232"* %t, %"class.thrust::tuple.232"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.232"*, %"class.thrust::tuple.232"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.232"* %0 to %"struct.thrust::detail::cons.233"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.233"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIaEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.232"*, %"class.thrust::tuple.232"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.232"* %2 to %"struct.thrust::detail::cons.233"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.234"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.233"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_(%"struct.thrust::detail::cons.234"* dereferenceable(16) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %this, i64 %step) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %step.addr = alloca i64, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store i64 %step, i64* %step.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %0 = load i64, i64* %step.addr, align 8, !tbaa !13
  store i64 %0, i64* %m_step, align 8, !tbaa !204
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIaEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.56"* %it, %"class.thrust::detail::normal_iterator.56"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.56"* %0 to %"class.thrust::iterator_facade.58"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEpLEl(%"class.thrust::iterator_facade.58"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.233"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.233"*, align 8
  store %"struct.thrust::detail::cons.233"* %this, %"struct.thrust::detail::cons.233"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.233"*, %"struct.thrust::detail::cons.233"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.233", %"struct.thrust::detail::cons.233"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.56"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_(%"struct.thrust::detail::cons.234"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.234"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.234"* %t, %"struct.thrust::detail::cons.234"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.234"*, %"struct.thrust::detail::cons.234"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.234"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIaEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.234"*, %"struct.thrust::detail::cons.234"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.234"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.234"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.233"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.233"*, align 8
  store %"struct.thrust::detail::cons.233"* %this, %"struct.thrust::detail::cons.233"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.233"*, %"struct.thrust::detail::cons.233"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.233", %"struct.thrust::detail::cons.233"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.234"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.234"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.234"*, align 8
  store %"struct.thrust::detail::cons.234"* %this, %"struct.thrust::detail::cons.234"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.234"*, %"struct.thrust::detail::cons.234"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.234", %"struct.thrust::detail::cons.234"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.56"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.220"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.220"* %t, %"struct.thrust::detail::cons.220"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.220"*, %"struct.thrust::detail::cons.220"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.220"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.220"*, %"struct.thrust::detail::cons.220"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.220"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp1, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_16advance_iteratorIlEEEET_NS_9null_typeES5_(i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.234"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.234"*, align 8
  store %"struct.thrust::detail::cons.234"* %this, %"struct.thrust::detail::cons.234"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.234"*, %"struct.thrust::detail::cons.234"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.234", %"struct.thrust::detail::cons.234"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.199"* %it, %"class.thrust::detail::normal_iterator.199"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.199"* %0 to %"class.thrust::iterator_facade.201"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEpLEl(%"class.thrust::iterator_facade.201"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.220"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.220"*, align 8
  store %"struct.thrust::detail::cons.220"* %this, %"struct.thrust::detail::cons.220"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.220"*, %"struct.thrust::detail::cons.220"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.220", %"struct.thrust::detail::cons.220"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.199"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_16advance_iteratorIlEEEET_NS_9null_typeES5_(i64 %f.coerce) #9 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %0 = alloca %"struct.thrust::null_type", align 1
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  %1 = bitcast %"class.thrust::detail::advance_iterator"* %retval to i8*
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive1 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %3 = load i64, i64* %coerce.dive1, align 8
  ret i64 %3
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.220"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.220"*, align 8
  store %"struct.thrust::detail::cons.220"* %this, %"struct.thrust::detail::cons.220"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.220"*, %"struct.thrust::detail::cons.220"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEpLEl(%"class.thrust::iterator_facade.201"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.201"* %this, %"class.thrust::iterator_facade.201"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.201"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEEEvRT_NSC_15difference_typeE(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.201"* %this1)
  ret %"class.thrust::detail::normal_iterator.199"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEEEvRT_NSC_15difference_typeE(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.199"* %f, %"class.thrust::detail::normal_iterator.199"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.199"* %0 to %"class.thrust::iterator_adaptor.200"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.200"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.201"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  store %"class.thrust::iterator_facade.201"* %this, %"class.thrust::iterator_facade.201"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.201"* %this1 to %"class.thrust::detail::normal_iterator.199"*
  ret %"class.thrust::detail::normal_iterator.199"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.200"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.200"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.200"* %this, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.200"*, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.202"* %m_iterator to %"class.thrust::iterator_facade.204"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZN6thrust15iterator_facadeINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEpLEl(%"class.thrust::iterator_facade.204"* %0, i64 %1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_(%"class.thrust::zip_iterator.230"* byval align 8 %first, %"class.thrust::zip_iterator.230"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.230", align 8
  %agg.tmp2 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.230"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.230"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.230"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.230"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.230"* byval align 8 %first, %"class.thrust::zip_iterator.230"* byval align 8 %last) #8 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = bitcast %"class.thrust::zip_iterator.230"* %last to %"class.thrust::iterator_facade.231"*
  %2 = bitcast %"class.thrust::zip_iterator.230"* %first to %"class.thrust::iterator_facade.231"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.231"* dereferenceable(1) %1, %"class.thrust::iterator_facade.231"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IaajSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIaEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.231"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.231"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.231"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.231"*, align 8
  store %"class.thrust::iterator_facade.231"* %lhs, %"class.thrust::iterator_facade.231"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.231"* %rhs, %"class.thrust::iterator_facade.231"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.231"*, %"class.thrust::iterator_facade.231"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.231"* %0 to %"class.thrust::zip_iterator.230"*
  %2 = load %"class.thrust::iterator_facade.231"*, %"class.thrust::iterator_facade.231"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.231"* %2 to %"class.thrust::zip_iterator.230"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_(%"class.thrust::zip_iterator.230"* dereferenceable(24) %1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_(%"class.thrust::zip_iterator.230"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.230"* %f1, %"class.thrust::zip_iterator.230"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %f2, %"class.thrust::zip_iterator.230"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.230"* dereferenceable(24) %0, %"class.thrust::zip_iterator.230"* dereferenceable(24) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.230"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  store %"class.thrust::zip_iterator.230"* %f1, %"class.thrust::zip_iterator.230"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.230"* %f2, %"class.thrust::zip_iterator.230"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.230"* %1, %"class.thrust::zip_iterator.230"* dereferenceable(24) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.230"* %this, %"class.thrust::zip_iterator.230"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  store %"class.thrust::zip_iterator.230"* %this, %"class.thrust::zip_iterator.230"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.230"* %other, %"class.thrust::zip_iterator.230"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %other.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.232"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.230"* %0)
  %1 = bitcast %"class.thrust::tuple.232"* %call to %"struct.thrust::detail::cons.233"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.233"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %call2 to %"class.thrust::iterator_facade.58"*
  %call3 = call dereferenceable(24) %"class.thrust::tuple.232"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.230"* %this1)
  %3 = bitcast %"class.thrust::tuple.232"* %call3 to %"struct.thrust::detail::cons.233"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.233"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.56"* %call4 to %"class.thrust::iterator_facade.58"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElS5_aS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.58"* dereferenceable(1) %2, %"class.thrust::iterator_facade.58"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIaEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.233"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.233"*, align 8
  store %"struct.thrust::detail::cons.233"* %c, %"struct.thrust::detail::cons.233"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.233"*, %"struct.thrust::detail::cons.233"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE(%"struct.thrust::detail::cons.233"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.56"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIaEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE(%"struct.thrust::detail::cons.233"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.233"*, align 8
  store %"struct.thrust::detail::cons.233"* %t, %"struct.thrust::detail::cons.233"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.233"*, %"struct.thrust::detail::cons.233"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.233", %"struct.thrust::detail::cons.233"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.56"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_(%"class.thrust::zip_iterator.230"* %this, %"class.thrust::tuple.232"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.230"*, align 8
  store %"class.thrust::zip_iterator.230"* %this, %"class.thrust::zip_iterator.230"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.230"*, %"class.thrust::zip_iterator.230"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.230"* %this1 to %"class.thrust::iterator_facade.231"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.230", %"class.thrust::zip_iterator.230"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.232"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.232"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIaEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_(%"class.thrust::tuple.232"* %this, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.232"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.232"* %this, %"class.thrust::tuple.232"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.56"* %t0, %"class.thrust::detail::normal_iterator.56"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.56"* %t1, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.232"*, %"class.thrust::tuple.232"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.232"* %this1 to %"struct.thrust::detail::cons.233"*
  %1 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.233"* %0, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.233"* %this, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.233"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.233"* %this, %"struct.thrust::detail::cons.233"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.56"* %t1, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.56"* %t2, %"class.thrust::detail::normal_iterator.56"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t3, %"class.thrust::detail::normal_iterator.199"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.233"*, %"struct.thrust::detail::cons.233"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.233", %"struct.thrust::detail::cons.233"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.56"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.233", %"struct.thrust::detail::cons.233"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.234"* %tail, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIaEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.234"* %this, %"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.234"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.56"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.234"* %this, %"struct.thrust::detail::cons.234"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.56"* %t1, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.234"*, %"struct.thrust::detail::cons.234"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.234", %"struct.thrust::detail::cons.234"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.56"*, %"class.thrust::detail::normal_iterator.56"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.56"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.56"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.234", %"struct.thrust::detail::cons.234"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %this, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.220"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.220"* %this, %"struct.thrust::detail::cons.220"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.220"*, %"struct.thrust::detail::cons.220"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.220", %"struct.thrust::detail::cons.220"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.199"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.199"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIaEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.233"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.233"*, align 8
  store %"struct.thrust::detail::cons.233"* %t, %"struct.thrust::detail::cons.233"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.233"*, %"struct.thrust::detail::cons.233"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.233", %"struct.thrust::detail::cons.233"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIaEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.234"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIaEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.234"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.234"*, align 8
  store %"struct.thrust::detail::cons.234"* %t, %"struct.thrust::detail::cons.234"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.234"*, %"struct.thrust::detail::cons.234"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.234", %"struct.thrust::detail::cons.234"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESC_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.220"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESC_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.220"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.220"*, align 8
  store %"struct.thrust::detail::cons.220"* %t, %"struct.thrust::detail::cons.220"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.220"*, %"struct.thrust::detail::cons.220"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.220", %"struct.thrust::detail::cons.220"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.199"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.58"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  store %"class.thrust::iterator_facade.58"* %this, %"class.thrust::iterator_facade.58"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.58"* %this1 to %"class.thrust::detail::normal_iterator.56"*
  ret %"class.thrust::detail::normal_iterator.56"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEmIEl(%"class.thrust::iterator_facade.58"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.58"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.58"* %this, %"class.thrust::iterator_facade.58"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.58"*, %"class.thrust::iterator_facade.58"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.58"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %sub = sub nsw i64 0, %0
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIaEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.56"* dereferenceable(8) %call, i64 %sub)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.56"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIaEEEEaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElE7derivedEv(%"class.thrust::iterator_facade.58"* %this1)
  ret %"class.thrust::detail::normal_iterator.56"* %call2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail13binary_negateINS_8equal_toIaEEEC2ERKS3_(%"struct.thrust::detail::binary_negate"* %this, %"struct.thrust::equal_to"* dereferenceable(1) %pred) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::binary_negate"*, align 8
  %pred.addr = alloca %"struct.thrust::equal_to"*, align 8
  store %"struct.thrust::detail::binary_negate"* %this, %"struct.thrust::detail::binary_negate"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::equal_to"* %pred, %"struct.thrust::equal_to"** %pred.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::binary_negate"*, %"struct.thrust::detail::binary_negate"** %this.addr, align 8
  %pred2 = getelementptr inbounds %"struct.thrust::detail::binary_negate", %"struct.thrust::detail::binary_negate"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::equal_to"*, %"struct.thrust::equal_to"** %pred.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.209"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.209"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.209"* %this, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.209"*, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.209"* %this1 to %"class.thrust::detail::tagged_allocator.210"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.210"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.209", %"class.thrust::detail::temporary_allocator.209"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cuda::detail::tag"* %call, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.209"* %this1 to %"class.thrust::detail::tagged_allocator.210"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.210"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.208"* %this, %"class.thrust::detail::temporary_allocator.209"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.209"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %this, %"struct.thrust::detail::no_throw_allocator.208"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.209"* %other, %"class.thrust::detail::temporary_allocator.209"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.208"* %this1 to %"class.thrust::detail::temporary_allocator.209"*
  %1 = load %"class.thrust::detail::temporary_allocator.209"*, %"class.thrust::detail::temporary_allocator.209"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.209"* %0, %"class.thrust::detail::temporary_allocator.209"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_(%"class.thrust::detail::contiguous_storage.207"* %this, i64 %n, %"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  %n.addr = alloca i64, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store %"struct.thrust::detail::no_throw_allocator.208"* %alloc, %"struct.thrust::detail::no_throw_allocator.208"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.208"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.141"* %agg.tmp, %"struct.thrust::pair"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.212"* %m_begin, %"struct.thrust::pair"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !206
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.207"* %this1, i64 %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont3
  ret void

lpad:                                             ; preds = %invoke.cont3, %invoke.cont, %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.210"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.208"*)*)(%"struct.thrust::detail::no_throw_allocator.208"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.210"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.210"*, align 8
  store %"class.thrust::detail::tagged_allocator.210"* %this, %"class.thrust::detail::tagged_allocator.210"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.210"*, %"class.thrust::detail::tagged_allocator.210"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIaaEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.206"* dereferenceable(24), i64) #1 comdat {
entry:
  %.addr = alloca %"class.thrust::detail::temporary_array.206"*, align 8
  %.addr1 = alloca i64, align 8
  store %"class.thrust::detail::temporary_array.206"* %0, %"class.thrust::detail::temporary_array.206"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr1, align 8, !tbaa !13
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.207"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.207"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.210"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.208"*)*)(%"struct.thrust::detail::no_throw_allocator.208"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.210"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.208"*)*)(%"struct.thrust::detail::no_throw_allocator.208"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.210"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.210"*, align 8
  store %"class.thrust::detail::tagged_allocator.210"* %this, %"class.thrust::detail::tagged_allocator.210"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.210"*, %"class.thrust::detail::tagged_allocator.210"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.209"* %this, %"class.thrust::detail::temporary_allocator.209"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.209"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.209"*, align 8
  store %"class.thrust::detail::temporary_allocator.209"* %this, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.209"* %other, %"class.thrust::detail::temporary_allocator.209"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.209"*, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.209"* %this1 to %"class.thrust::detail::tagged_allocator.210"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.210"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.209", %"class.thrust::detail::temporary_allocator.209"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.209"*, %"class.thrust::detail::temporary_allocator.209"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.209", %"class.thrust::detail::temporary_allocator.209"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::tag"* %ref, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.208"* %this, %"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %this, %"struct.thrust::detail::no_throw_allocator.208"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.208"* %0, %"struct.thrust::detail::no_throw_allocator.208"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.208"* %this1 to %"class.thrust::detail::temporary_allocator.209"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.208"* %2 to %"class.thrust::detail::temporary_allocator.209"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.209"* %1, %"class.thrust::detail::temporary_allocator.209"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.212"* %this, %"struct.thrust::pair"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.212"* %this, %"class.thrust::detail::normal_iterator.212"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %this2 to %"class.thrust::iterator_adaptor.213"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.213"* %0, %"class.thrust::pointer.141"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.207"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.141", align 8
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.212"* %ref.tmp, %"struct.thrust::pair"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.212"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.212"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !206
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.141"* %agg.tmp7, %"struct.thrust::pair"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive8, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.212"* %ref.tmp6, %"struct.thrust::pair"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.212"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.212"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !206
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.213"* %this, %"class.thrust::pointer.141"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.213"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.141"*, align 8
  store %"class.thrust::iterator_adaptor.213"* %this, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.141"* %iter, %"class.thrust::pointer.141"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.213"*, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.213"* %this1 to %"class.thrust::iterator_facade.214"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.141"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.141"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.208"* %0 to %"class.thrust::detail::temporary_allocator.209"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.209"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.209"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.209"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.261", align 8
  %ref.tmp = alloca %"struct.thrust::pair.262", align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.209"* %this, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.209"*, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.261"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.209"* %this1)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIaaEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.262"* %ref.tmp to { %"struct.thrust::pair"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 0
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.261"* %result, %"struct.thrust::pair.262"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.261", %"struct.thrust::pair.261"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !210
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.261", %"struct.thrust::pair.261"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.141"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.209"* %this1, %"struct.thrust::pair"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.261"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.261", %"struct.thrust::pair.261"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.141"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.141"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.261"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive11, i32 0, i32 0
  %25 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  ret %"struct.thrust::pair"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIaaEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.262", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.262", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIaaEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.262"* %agg.tmp to { %"struct.thrust::pair"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 0
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.262"* %agg.tmp to { %"struct.thrust::pair"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIaaEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.262"* %retval to { %"struct.thrust::pair"*, i64 }*
  %14 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"struct.thrust::pair"*, i64 } %call3, 0
  store %"struct.thrust::pair"* %15, %"struct.thrust::pair"** %14, align 8
  %16 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"struct.thrust::pair"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.262"* %retval to { %"struct.thrust::pair"*, i64 }*
  %19 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %18, align 8
  ret { %"struct.thrust::pair"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.209"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.209"*, align 8
  store %"class.thrust::detail::temporary_allocator.209"* %this, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.209"*, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.209", %"class.thrust::detail::temporary_allocator.209"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cuda::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.261"* %this, %"struct.thrust::pair.262"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.261"*, align 8
  %p.addr = alloca %"struct.thrust::pair.262"*, align 8
  store %"struct.thrust::pair.261"* %this, %"struct.thrust::pair.261"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.262"* %p, %"struct.thrust::pair.262"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.261"*, %"struct.thrust::pair.261"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.261", %"struct.thrust::pair.261"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.262"*, %"struct.thrust::pair.262"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.262", %"struct.thrust::pair.262"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.141"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.261", %"struct.thrust::pair.261"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.262"*, %"struct.thrust::pair.262"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.262", %"struct.thrust::pair.262"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !213
  store i64 %4, i64* %second, align 8, !tbaa !210
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.209"* %this, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.209"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.209"* %this, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.209"*, %"class.thrust::detail::temporary_allocator.209"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.209"* %this2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0, %"struct.thrust::pair"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIaaEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.262", align 8
  %p = alloca %"struct.thrust::pair.262", align 8
  %ptr = alloca %"class.thrust::pointer.141", align 8
  %0 = bitcast %"struct.thrust::pair.262"* %p to { %"struct.thrust::pair"*, i64 }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.141"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.262", %"struct.thrust::pair.262"* %p, i32 0, i32 0
  %call = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.141"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.141"* %ptr, %"struct.thrust::pair"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.262", %"struct.thrust::pair.262"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.262"* %retval, %"class.thrust::pointer.141"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.141"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.262"* %retval to { %"struct.thrust::pair"*, i64 }*
  %6 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %5, align 8
  ret { %"struct.thrust::pair"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIaaEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.262", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.141"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6mallocINS_4pairIaaEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.141"* %ptr)
  %tobool = icmp ne %"struct.thrust::pair"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.141"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  %call5 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.262"* %retval to { %"struct.thrust::pair"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair"*, i64 } %call5, 0
  store %"struct.thrust::pair"* %10, %"struct.thrust::pair"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.141"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.262"* %retval to { %"struct.thrust::pair"*, i64 }*
  %15 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %14, align 8
  ret { %"struct.thrust::pair"*, i64 } %15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.262"* %this, %"class.thrust::pointer.141"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.262"*, align 8
  %x.addr = alloca %"class.thrust::pointer.141"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.262"* %this, %"struct.thrust::pair.262"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.141"* %x, %"class.thrust::pointer.141"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.262"*, %"struct.thrust::pair.262"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.262", %"struct.thrust::pair.262"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.262", %"struct.thrust::pair.262"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !213
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.262", align 8
  %x = alloca %"class.thrust::pointer.141", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %x.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.262"* %retval, %"class.thrust::pointer.141"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.262"* %retval to { %"struct.thrust::pair"*, i64 }*
  %1 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %0, align 8
  ret { %"struct.thrust::pair"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"struct.thrust::pair"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.141", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.141"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), %"struct.thrust::pair"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.141", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.141"* dereferenceable(8) %ptr)
  %1 = bitcast %"struct.thrust::pair"* %call to i8*
  %call2 = call i32 @cudaFree(i8* %1)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.207"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.141", align 8
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.207"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %m_begin to %"class.thrust::iterator_adaptor.213"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.213"* %0)
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.207"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %m_allocator, %"struct.thrust::pair"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.141"* %agg.tmp6, %"struct.thrust::pair"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.212"* %ref.tmp, %"struct.thrust::pair"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.212"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.212"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !206
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.207"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !206
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.141"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.213"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.213"*, align 8
  store %"class.thrust::iterator_adaptor.213"* %this, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.213"*, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.141"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.208"* %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.208"* %this, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %this, %"struct.thrust::detail::no_throw_allocator.208"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.208"* %this2 to %"class.thrust::detail::temporary_allocator.209"*
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.209"* %0, %"struct.thrust::pair"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, i32* %stencil.coerce, %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"* dereferenceable(2) %new_value) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %stencil = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %pred = alloca %"struct.thrust::negate", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %new_value.addr = alloca %"struct.thrust::pair"*, align 8
  %op = alloca %"struct.thrust::system::detail::generic::detail::new_value_if", align 1
  %agg.tmp = alloca %"struct.thrust::negate", align 1
  %agg.tmp18 = alloca %"struct.thrust::pair", align 1
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %agg.tmp23 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if", align 1
  %tmp = alloca i24, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %stencil, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %stencil.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive17, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %new_value, %"struct.thrust::pair"** %new_value.addr, align 8, !tbaa !7
  %0 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %op to i8*
  call void @llvm.lifetime.start(i64 3, i8* %0) #5
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %new_value.addr, align 8
  %2 = bitcast %"struct.thrust::pair"* %agg.tmp18 to i8*
  %3 = bitcast %"struct.thrust::pair"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 2, i32 1, i1 false), !tbaa.struct !23
  %4 = bitcast %"struct.thrust::pair"* %agg.tmp18 to i16*
  %5 = load i16, i16* %4, align 1
  call void @_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEES8_EC2ES6_S8_(%"struct.thrust::system::detail::generic::detail::new_value_if"* %op, i16 %5)
  %6 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %7 = bitcast %"struct.thrust::execution_policy.120"* %6 to %"struct.thrust::detail::execution_policy_base.121"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp19 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.66"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp20 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.66"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp21 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.199"* %stencil to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.212"* %agg.tmp22 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.212"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %agg.tmp23 to i8*
  %17 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 3, i32 1, i1 false), !tbaa.struct !215
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp19, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive27, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp20, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive32, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive33, align 8
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp21, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive36, i32 0, i32 0
  %20 = load i32*, i32** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp22, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive40, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive41, align 8
  %22 = bitcast i24* %tmp to i8*
  %23 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %agg.tmp23 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 3, i32 1, i1 false)
  %24 = load i24, i24* %tmp, align 4
  %call = call %"struct.thrust::pair"* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %7, %"struct.thrust::pair"* %18, %"struct.thrust::pair"* %19, i32* %20, %"struct.thrust::pair"* %21, i24 %24)
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive44, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive45, align 8
  %25 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %op to i8*
  call void @llvm.lifetime.end(i64 3, i8* %25) #5
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive48, i32 0, i32 0
  %26 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive49, align 8
  ret %"struct.thrust::pair"* %26
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEES8_EC2ES6_S8_(%"struct.thrust::system::detail::generic::detail::new_value_if"* %this, i16 %nv.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %p = alloca %"struct.thrust::negate", align 1
  %nv = alloca %"struct.thrust::pair", align 1
  %this.addr = alloca %"struct.thrust::system::detail::generic::detail::new_value_if"*, align 8
  %0 = bitcast %"struct.thrust::pair"* %nv to i16*
  store i16 %nv.coerce, i16* %0, align 1
  store %"struct.thrust::system::detail::generic::detail::new_value_if"* %this, %"struct.thrust::system::detail::generic::detail::new_value_if"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::detail::generic::detail::new_value_if"*, %"struct.thrust::system::detail::generic::detail::new_value_if"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::new_value_if", %"struct.thrust::system::detail::generic::detail::new_value_if"* %this1, i32 0, i32 0
  %new_value = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::new_value_if", %"struct.thrust::system::detail::generic::detail::new_value_if"* %this1, i32 0, i32 1
  %1 = bitcast %"struct.thrust::pair"* %new_value to i8*
  %2 = bitcast %"struct.thrust::pair"* %nv to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 2, i32 1, i1 false), !tbaa.struct !23
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i24 %op.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %op = alloca %"struct.thrust::system::detail::generic::detail::new_value_if", align 1
  %tmp = alloca i24, align 4
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %agg.tmp22 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if", align 1
  %tmp41 = alloca i24, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive17, align 8
  store i24 %op.coerce, i24* %tmp, align 4
  %0 = bitcast i24* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %2 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
  %call18 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call18 to %"struct.thrust::execution_policy.120"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.66"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.66"* %agg.tmp19 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.66"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp20 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.199"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.212"* %agg.tmp21 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.212"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %agg.tmp22 to i8*
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 3, i32 1, i1 false), !tbaa.struct !215
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive26, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %agg.tmp19, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive31, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp20, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive35, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %agg.tmp21, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive39, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive40, align 8
  %18 = bitcast i24* %tmp41 to i8*
  %19 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %agg.tmp22 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %19, i64 3, i32 1, i1 false)
  %20 = load i24, i24* %tmp41, align 4
  %call42 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %3, %"struct.thrust::pair"* %14, %"struct.thrust::pair"* %15, i32* %16, %"struct.thrust::pair"* %17, i24 %20)
  %coerce.dive43 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive45, i32 0, i32 0
  store %"struct.thrust::pair"* %call42, %"struct.thrust::pair"** %coerce.dive46, align 8
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive49, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive50, align 8
  ret %"struct.thrust::pair"* %21
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair"* %result.coerce, i24 %op.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %op = alloca %"struct.thrust::system::detail::generic::detail::new_value_if", align 1
  %tmp = alloca i24, align 4
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp19 = alloca %"class.thrust::tuple.265", align 8
  %agg.tmp20 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp21 = alloca %"class.thrust::tuple.265", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %agg.tmp23 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if", align 1
  %tmp24 = alloca i24, align 4
  %tmp26 = alloca i24, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive17, align 8
  store i24 %op.coerce, i24* %tmp, align 4
  %0 = bitcast i24* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %2 = bitcast %"class.thrust::zip_iterator.263"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %2) #5
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.265"* sret %agg.tmp19, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.263"* sret %agg.tmp, %"class.thrust::tuple.265"* byval align 8 %agg.tmp19)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.265"* sret %agg.tmp21, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.263"* sret %agg.tmp20, %"class.thrust::tuple.265"* byval align 8 %agg.tmp21)
  %5 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %agg.tmp23 to i8*
  %6 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 3, i32 1, i1 false), !tbaa.struct !215
  %7 = bitcast i24* %tmp24 to i8*
  %8 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %agg.tmp23 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 3, i32 1, i1 false)
  %9 = load i24, i24* %tmp24, align 4
  call void @_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESA_EEEC2ESB_(%"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp22, i24 %9)
  %coerce.dive25 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp22, i32 0, i32 0
  %10 = bitcast i24* %tmp26 to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive25 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 3, i32 1, i1 false)
  %12 = load i24, i24* %tmp26, align 4
  call void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_(%"class.thrust::zip_iterator.263"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp20, i24 %12)
  %call = call dereferenceable(24) %"class.thrust::tuple.265"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.263"* %zipped_result)
  %13 = bitcast %"class.thrust::tuple.265"* %call to %"struct.thrust::detail::cons.266"*
  %call27 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.266"* dereferenceable(24) %13)
  %14 = bitcast %"class.thrust::detail::normal_iterator.212"* %retval to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.212"* %call27 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::zip_iterator.263"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %16) #5
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive30, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive31, align 8
  ret %"struct.thrust::pair"* %17
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_(%"class.thrust::zip_iterator.263"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.263"* byval align 8 %first, %"class.thrust::zip_iterator.263"* byval align 8 %last, i24 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %tmp = alloca i24, align 4
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %tmp5 = alloca i24, align 4
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %f, i32 0, i32 0
  store i24 %f.coerce, i24* %tmp, align 4
  %0 = bitcast i24* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %2 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %4 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp2 to i8*
  %7 = bitcast %"class.thrust::zip_iterator.263"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 24, i32 8, i1 false)
  %8 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp3 to i8*
  %9 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 3, i32 1, i1 false), !tbaa.struct !215
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp3, i32 0, i32 0
  %10 = bitcast i24* %tmp5 to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 3, i32 1, i1 false)
  %12 = load i24, i24* %tmp5, align 4
  call void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_(%"class.thrust::zip_iterator.263"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %3, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp2, i24 %12)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.263"* noalias sret %agg.result, %"class.thrust::tuple.265"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.265", align 8
  %0 = bitcast %"class.thrust::tuple.265"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.265"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.263"* %agg.result, %"class.thrust::tuple.265"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.265"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  store %"class.thrust::detail::normal_iterator.66"* %t0, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.212"* %t2, %"class.thrust::detail::normal_iterator.212"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_(%"class.thrust::tuple.265"* %agg.result, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESA_EEEC2ESB_(%"struct.thrust::detail::binary_transform_functor.269"* %this, i24 %f.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::detail::generic::detail::new_value_if", align 1
  %tmp = alloca i24, align 4
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor.269"*, align 8
  store i24 %f.coerce, i24* %tmp, align 4
  %0 = bitcast i24* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store %"struct.thrust::detail::binary_transform_functor.269"* %this, %"struct.thrust::detail::binary_transform_functor.269"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor.269"*, %"struct.thrust::detail::binary_transform_functor.269"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %this1, i32 0, i32 0
  %2 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %f2 to i8*
  %3 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 3, i32 1, i1 false), !tbaa.struct !215
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.266"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.266"*, align 8
  store %"struct.thrust::detail::cons.266"* %c, %"struct.thrust::detail::cons.266"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.266"*, %"struct.thrust::detail::cons.266"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE(%"struct.thrust::detail::cons.266"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.212"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.265"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.263"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  store %"class.thrust::zip_iterator.263"* %this, %"class.thrust::zip_iterator.263"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.263", %"class.thrust::zip_iterator.263"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.265"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_(%"class.thrust::zip_iterator.263"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.263"* byval align 8 %first, %"class.thrust::zip_iterator.263"* byval align 8 %last, i24 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %tmp = alloca i24, align 4
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %tmp5 = alloca i24, align 4
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %f, i32 0, i32 0
  store i24 %f.coerce, i24* %tmp, align 4
  %0 = bitcast i24* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %2 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 8, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp1 to i8*
  %6 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 8, i1 false)
  %7 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::zip_iterator.263"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_(%"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp1, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp2)
  %9 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp3 to i8*
  %10 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 3, i32 1, i1 false), !tbaa.struct !215
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp3, i32 0, i32 0
  %11 = bitcast i24* %tmp5 to i8*
  %12 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 3, i32 1, i1 false)
  %13 = load i24, i24* %tmp5, align 4
  call void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_(%"class.thrust::zip_iterator.263"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp, i64 %call, i24 %13)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_(%"class.thrust::zip_iterator.263"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.263"* byval align 8 %first, i64 %n, i24 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %tmp = alloca i24, align 4
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp1 = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %tmp3 = alloca i24, align 4
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %f, i32 0, i32 0
  store i24 %f.coerce, i24* %tmp, align 4
  %0 = bitcast i24* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp1 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 3, i32 1, i1 false), !tbaa.struct !215
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %agg.tmp1, i32 0, i32 0
  %8 = bitcast i24* %tmp3 to i8*
  %9 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 3, i32 1, i1 false)
  %10 = load i24, i24* %tmp3, align 4
  call void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_(%"class.thrust::zip_iterator.263"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp, i64 %5, i24 %10)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_(%"class.thrust::zip_iterator.263"* byval align 8 %first, %"class.thrust::zip_iterator.263"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.263", align 8
  %0 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.263"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_(%"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_(%"class.thrust::zip_iterator.263"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.263"* byval align 8 %first, i64 %n, i24 %f.coerce) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.269", align 1
  %tmp = alloca i24, align 4
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp8 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp9 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp12 = alloca i24, align 4
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce19 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp21 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp22 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp23 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp24 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp25 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp26 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp29 = alloca i24, align 4
  %ref.tmp32 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp35 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp38 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp39 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp40 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp41 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp44 = alloca i24, align 4
  %ref.tmp45 = alloca i32, align 4
  %agg.tmp.ensured48 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp49 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp54 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp55 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp56 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp57 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp60 = alloca i24, align 4
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %f, i32 0, i32 0
  store i24 %f.coerce, i24* %tmp, align 4
  %0 = bitcast i24* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %2 = bitcast %"struct.thrust::detail::wrapped_function.270"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 3, i8* %2) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESB_EEEEvEC2ERKSD_(%"struct.thrust::detail::wrapped_function.270"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor.269"* dereferenceable(3) %f)
  %3 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %5 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %6 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %6) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %7 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive5 to { i32*, i32* }*
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %7, i32 0, i32 0
  %9 = extractvalue { i32*, i32* } %call, 0
  store i32* %9, i32** %8, align 8
  %10 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %7, i32 0, i32 1
  %11 = extractvalue { i32*, i32* } %call, 1
  store i32* %11, i32** %10, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %12 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %13 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp8 to i8*
  %14 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 24, i32 8, i1 false)
  %15 = bitcast %"struct.thrust::detail::wrapped_function.270"* %agg.tmp9 to i8*
  %16 = bitcast %"struct.thrust::detail::wrapped_function.270"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %16, i64 3, i32 1, i1 false), !tbaa.struct !215
  %17 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive10 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive10, i32 0, i32 0
  %18 = bitcast i24* %tmp12 to i8*
  %19 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive11 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %19, i64 3, i32 1, i1 false)
  %20 = load i24, i24* %tmp12, align 4
  %call13 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp8, i24 %20, i32 %17)
  %21 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call13, i64* %21, align 4
  %call14 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %22 = load i64, i64* %n.addr, align 8, !tbaa !13
  %23 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %24 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %23, %24
  %call15 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %22, i32 %mul)
  br i1 %call15, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %25 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %25) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %26 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call18 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive20 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce19, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive20 to { i64*, i64* }*
  %28 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %27, i32 0, i32 0
  %29 = extractvalue { i64*, i64* } %call18, 0
  store i64* %29, i64** %28, align 8
  %30 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %27, i32 0, i32 1
  %31 = extractvalue { i64*, i64* } %call18, 1
  store i64* %31, i64** %30, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp22, i64 2147483647, i64 2147483647, i64 2147483647)
  %32 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp24 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %32, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp25 to i8*
  %34 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 24, i32 8, i1 false)
  %35 = bitcast %"struct.thrust::detail::wrapped_function.270"* %agg.tmp26 to i8*
  %36 = bitcast %"struct.thrust::detail::wrapped_function.270"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %35, i8* %36, i64 3, i32 1, i1 false), !tbaa.struct !215
  %37 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive27 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %agg.tmp26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive27, i32 0, i32 0
  %38 = bitcast i24* %tmp29 to i8*
  %39 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive28 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %38, i8* %39, i64 3, i32 1, i1 false)
  %40 = load i24, i24* %tmp29, align 4
  %call30 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp22, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp25, i24 %40, i64 %37)
  %41 = bitcast %"struct.thrust::pair.82"* %ref.tmp21 to i64*
  store i64 %call30, i64* %41, align 4
  %call31 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce19, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp21)
  %42 = load i64, i64* %n.addr, align 8, !tbaa !13
  %43 = load i64, i64* %group_size, align 8, !tbaa !13
  %call33 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %42, i64 %43)
  store i64 %call33, i64* %ref.tmp32, align 8, !tbaa !13
  %call34 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp32)
  store i64 %call34, i64* %num_groups, align 8, !tbaa !13
  %44 = load i64, i64* %num_groups, align 8, !tbaa !13
  %45 = load i64, i64* %group_size, align 8, !tbaa !13
  %46 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %47 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %46 to %"struct.thrust::detail::execution_policy_base.121"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %47)
  %48 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call36 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp35, i64 %44, i64 %45, i64 0, %struct.CUstream_st* %call37)
  %49 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp39 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %49, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %50 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp40 to i8*
  %51 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %50, i8* %51, i64 24, i32 8, i1 false)
  %52 = bitcast %"struct.thrust::detail::wrapped_function.270"* %agg.tmp41 to i8*
  %53 = bitcast %"struct.thrust::detail::wrapped_function.270"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %52, i8* %53, i64 3, i32 1, i1 false), !tbaa.struct !215
  %54 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive42 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %agg.tmp41, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive42, i32 0, i32 0
  %55 = bitcast i24* %tmp44 to i8*
  %56 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive43 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %55, i8* %56, i64 3, i32 1, i1 false)
  %57 = load i24, i24* %tmp44, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp35, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp40, i24 %57, i64 %54)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %58 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %58) #5
  %59 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %59) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %60 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %61 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call46 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %60, i32 %61)
  store i32 %call46, i32* %ref.tmp45, align 4, !tbaa !11
  %call47 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp45)
  store i32 %call47, i32* %narrow_num_groups, align 4, !tbaa !11
  %62 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv50 = zext i32 %62 to i64
  %63 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv51 = zext i32 %63 to i64
  %64 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %65 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %64 to %"struct.thrust::detail::execution_policy_base.121"*
  %call52 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %65)
  %66 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call52 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call53 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %66)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp49, i64 %conv50, i64 %conv51, i64 0, %struct.CUstream_st* %call53)
  %67 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp55 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %67, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %68 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp56 to i8*
  %69 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %68, i8* %69, i64 24, i32 8, i1 false)
  %70 = bitcast %"struct.thrust::detail::wrapped_function.270"* %agg.tmp57 to i8*
  %71 = bitcast %"struct.thrust::detail::wrapped_function.270"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %70, i8* %71, i64 3, i32 1, i1 false), !tbaa.struct !215
  %72 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive58 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %agg.tmp57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive58, i32 0, i32 0
  %73 = bitcast i24* %tmp60 to i8*
  %74 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive59 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %73, i8* %74, i64 3, i32 1, i1 false)
  %75 = load i24, i24* %tmp60, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured48, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp49, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp56, i24 %75, i32 %72)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured48) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %76 = bitcast %"class.thrust::zip_iterator.263"* %first to %"class.thrust::iterator_facade.264"*
  %77 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE(%"class.thrust::zip_iterator.263"* sret %agg.result, %"class.thrust::iterator_facade.264"* dereferenceable(1) %76, i64 %77)
  %78 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %78) #5
  %79 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %79) #5
  %80 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %80) #5
  %81 = bitcast %"struct.thrust::detail::wrapped_function.270"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 3, i8* %81) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESB_EEEEvEC2ERKSD_(%"struct.thrust::detail::wrapped_function.270"* %this, %"struct.thrust::detail::binary_transform_functor.269"* dereferenceable(3) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %f.addr = alloca %"struct.thrust::detail::binary_transform_functor.269"*, align 8
  store %"struct.thrust::detail::wrapped_function.270"* %this, %"struct.thrust::detail::wrapped_function.270"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::binary_transform_functor.269"* %f, %"struct.thrust::detail::binary_transform_functor.269"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::binary_transform_functor.269"*, %"struct.thrust::detail::binary_transform_functor.269"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.269"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 3, i32 1, i1 false), !tbaa.struct !215
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.263"* byval align 8 %arg2, i24 %arg3.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp3 = alloca i24, align 4
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive, i32 0, i32 0
  store i24 %arg3.coerce, i24* %tmp3, align 4
  %0 = bitcast i24* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp4)
  %4 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %4, align 4
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %6 = load i64, i64* %5, align 4
  ret i64 %6
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.263"* byval align 8 %arg2, i24 %arg3.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp3 = alloca i24, align 4
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive, i32 0, i32 0
  store i24 %arg3.coerce, i24* %tmp3, align 4
  %0 = bitcast i24* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp4)
  %4 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %4, align 4
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %6 = load i64, i64* %5, align 4
  ret i64 %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.263"* byval align 8 %arg2, i24 %arg3.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp3 = alloca i24, align 4
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive, i32 0, i32 0
  store i24 %arg3.coerce, i24* %tmp3, align 4
  %0 = bitcast i24* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.263"* byval align 8 %arg2, i24 %arg3.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.270", align 1
  %tmp3 = alloca i24, align 4
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.270", %"struct.thrust::detail::wrapped_function.270"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.269", %"struct.thrust::detail::binary_transform_functor.269"* %coerce.dive, i32 0, i32 0
  store i24 %arg3.coerce, i24* %tmp3, align 4
  %0 = bitcast i24* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 3, i32 1, i1 false)
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE(%"class.thrust::zip_iterator.263"* noalias sret %agg.result, %"class.thrust::iterator_facade.264"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %i.addr = alloca %"class.thrust::iterator_facade.264"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.263", align 8
  store %"class.thrust::iterator_facade.264"* %i, %"class.thrust::iterator_facade.264"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.263"* %tmp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.264"*, %"class.thrust::iterator_facade.264"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.264"* %1 to %"class.thrust::zip_iterator.263"*
  %3 = bitcast %"class.thrust::zip_iterator.263"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.263"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.263"* %tmp to %"class.thrust::iterator_facade.264"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.263"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl(%"class.thrust::iterator_facade.264"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.263"* %agg.result to i8*
  %8 = bitcast %"class.thrust::zip_iterator.263"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.263"* %tmp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %9) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.272", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %a2, %"class.thrust::zip_iterator.263"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %a3, %"struct.thrust::detail::wrapped_function.270"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.272"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %agg.result, %"class.thrust::tuple.272"* dereferenceable(40) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.272"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %t1, %"class.thrust::zip_iterator.263"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t2, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj(%"class.thrust::tuple.272"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %this, %"class.thrust::tuple.272"* dereferenceable(40) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"*, align 8
  %args.addr = alloca %"class.thrust::tuple.272"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.272"* %args, %"class.thrust::tuple.272"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.272"*, %"class.thrust::tuple.272"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.272"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.272"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj(%"class.thrust::tuple.272"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.272"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.272"* %this, %"class.thrust::tuple.272"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %t1, %"class.thrust::zip_iterator.263"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t2, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.272"*, %"class.thrust::tuple.272"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.272"* %this1 to %"struct.thrust::detail::cons.273"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.273"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.273"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.273"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.273"* %this, %"struct.thrust::detail::cons.273"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %t2, %"class.thrust::zip_iterator.263"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t3, %"struct.thrust::detail::wrapped_function.270"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.273"*, %"struct.thrust::detail::cons.273"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.273", %"struct.thrust::detail::cons.273"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.273", %"struct.thrust::detail::cons.273"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.274"* %tail, %"class.thrust::zip_iterator.263"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.274"* %this, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.274"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.274"* %this, %"struct.thrust::detail::cons.274"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.263"* %t1, %"class.thrust::zip_iterator.263"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t2, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.274"*, %"struct.thrust::detail::cons.274"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.274", %"struct.thrust::detail::cons.274"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.263"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.263"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.274", %"struct.thrust::detail::cons.274"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.275"* %tail, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.275"* %this, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.275"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.275"* %this, %"struct.thrust::detail::cons.275"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.270"* %t1, %"struct.thrust::detail::wrapped_function.270"** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.275"*, %"struct.thrust::detail::cons.275"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.275", %"struct.thrust::detail::cons.275"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.270"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.270"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 3, i32 1, i1 false), !tbaa.struct !215
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.275", %"struct.thrust::detail::cons.275"* %this1, i32 0, i32 1
  %3 = load i32*, i32** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %tail, i32* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.284", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %a2, %"class.thrust::zip_iterator.263"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %a3, %"struct.thrust::detail::wrapped_function.270"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.284"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %agg.result, %"class.thrust::tuple.284"* dereferenceable(48) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.284"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %t1, %"class.thrust::zip_iterator.263"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t2, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl(%"class.thrust::tuple.284"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %this, %"class.thrust::tuple.284"* dereferenceable(48) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"*, align 8
  %args.addr = alloca %"class.thrust::tuple.284"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.284"* %args, %"class.thrust::tuple.284"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.284"*, %"class.thrust::tuple.284"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.284"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.284"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 48, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl(%"class.thrust::tuple.284"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.284"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.284"* %this, %"class.thrust::tuple.284"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %t1, %"class.thrust::zip_iterator.263"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t2, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.284"*, %"class.thrust::tuple.284"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.284"* %this1 to %"struct.thrust::detail::cons.285"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.285"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.285"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.285"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.285"* %this, %"struct.thrust::detail::cons.285"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %t2, %"class.thrust::zip_iterator.263"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t3, %"struct.thrust::detail::wrapped_function.270"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.285"*, %"struct.thrust::detail::cons.285"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.285", %"struct.thrust::detail::cons.285"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.285", %"struct.thrust::detail::cons.285"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.286"* %tail, %"class.thrust::zip_iterator.263"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.286"* %this, %"class.thrust::zip_iterator.263"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.286"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.286"* %this, %"struct.thrust::detail::cons.286"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.263"* %t1, %"class.thrust::zip_iterator.263"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.270"* %t2, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.286"*, %"struct.thrust::detail::cons.286"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.286", %"struct.thrust::detail::cons.286"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.263"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.263"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.286", %"struct.thrust::detail::cons.286"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.287"* %tail, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIaaEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.287"* %this, %"struct.thrust::detail::wrapped_function.270"* dereferenceable(3) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.287"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.270"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.287"* %this, %"struct.thrust::detail::cons.287"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.270"* %t1, %"struct.thrust::detail::wrapped_function.270"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.287"*, %"struct.thrust::detail::cons.287"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.287", %"struct.thrust::detail::cons.287"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.270"*, %"struct.thrust::detail::wrapped_function.270"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.270"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.270"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 3, i32 1, i1 false), !tbaa.struct !215
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.287", %"struct.thrust::detail::cons.287"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %tail, i64* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 56, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 56, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 56, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.288"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.283", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 56, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !216
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.289"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.283"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.293"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.290"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.292"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 48, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 48, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %task to i8*
  call void @llvm.lifetime.start(i64 80, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 48, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %task to i8*
  call void @llvm.lifetime.end(i64 80, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.276"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.271", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !218
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.277"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.271"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.281"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.278"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 80, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 80, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 80, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIaaEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.280"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.263"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl(%"class.thrust::iterator_facade.264"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.264"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.264"* %this, %"class.thrust::iterator_facade.264"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.264"*, %"class.thrust::iterator_facade.264"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.263"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.264"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE(%"class.thrust::zip_iterator.263"* dereferenceable(24) %call, i64 %0)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.263"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.264"* %this1)
  ret %"class.thrust::zip_iterator.263"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE(%"class.thrust::zip_iterator.263"* dereferenceable(24) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.263"* %f, %"class.thrust::zip_iterator.263"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl(%"class.thrust::zip_iterator.263"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.263"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.264"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.264"*, align 8
  store %"class.thrust::iterator_facade.264"* %this, %"class.thrust::iterator_facade.264"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.264"*, %"class.thrust::iterator_facade.264"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.264"* %this1 to %"class.thrust::zip_iterator.263"*
  ret %"class.thrust::zip_iterator.263"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl(%"class.thrust::zip_iterator.263"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.263"* %this, %"class.thrust::zip_iterator.263"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.263", %"class.thrust::zip_iterator.263"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_(%"class.thrust::tuple.265"* dereferenceable(24) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_(%"class.thrust::tuple.265"* dereferenceable(24) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.265"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.265"* %t, %"class.thrust::tuple.265"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.265"*, %"class.thrust::tuple.265"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.265"* %0 to %"struct.thrust::detail::cons.266"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.266"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.265"*, %"class.thrust::tuple.265"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.265"* %2 to %"struct.thrust::detail::cons.266"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.267"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.266"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIaaEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_(%"struct.thrust::detail::cons.267"* dereferenceable(16) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.66"* %it, %"class.thrust::detail::normal_iterator.66"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.66"* %0 to %"class.thrust::iterator_facade.68"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.68"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.266"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.266"*, align 8
  store %"struct.thrust::detail::cons.266"* %this, %"struct.thrust::detail::cons.266"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.266"*, %"struct.thrust::detail::cons.266"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.266", %"struct.thrust::detail::cons.266"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.66"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIaaEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_(%"struct.thrust::detail::cons.267"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.267"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.267"* %t, %"struct.thrust::detail::cons.267"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.267"*, %"struct.thrust::detail::cons.267"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.267"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.267"*, %"struct.thrust::detail::cons.267"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.268"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.267"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_(%"struct.thrust::detail::cons.268"* dereferenceable(8) %call1, i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.267"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.266"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.266"*, align 8
  store %"struct.thrust::detail::cons.266"* %this, %"struct.thrust::detail::cons.266"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.266"*, %"struct.thrust::detail::cons.266"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.266", %"struct.thrust::detail::cons.266"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.267"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.267"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.267"*, align 8
  store %"struct.thrust::detail::cons.267"* %this, %"struct.thrust::detail::cons.267"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.267"*, %"struct.thrust::detail::cons.267"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.267", %"struct.thrust::detail::cons.267"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.199"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_(%"struct.thrust::detail::cons.268"* dereferenceable(8) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.268"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.268"* %t, %"struct.thrust::detail::cons.268"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.268"*, %"struct.thrust::detail::cons.268"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.268"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.268"*, %"struct.thrust::detail::cons.268"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.268"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp1, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_16advance_iteratorIlEEEET_NS_9null_typeES5_(i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.268"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.267"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.267"*, align 8
  store %"struct.thrust::detail::cons.267"* %this, %"struct.thrust::detail::cons.267"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.267"*, %"struct.thrust::detail::cons.267"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.267", %"struct.thrust::detail::cons.267"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.268"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.212"* %it, %"class.thrust::detail::normal_iterator.212"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.212"* %0 to %"class.thrust::iterator_facade.214"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.214"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.268"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.268"*, align 8
  store %"struct.thrust::detail::cons.268"* %this, %"struct.thrust::detail::cons.268"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.268"*, %"struct.thrust::detail::cons.268"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.268", %"struct.thrust::detail::cons.268"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.212"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.268"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.268"*, align 8
  store %"struct.thrust::detail::cons.268"* %this, %"struct.thrust::detail::cons.268"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.268"*, %"struct.thrust::detail::cons.268"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.214"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.214"* %this, %"class.thrust::iterator_facade.214"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.214"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.214"* %this1)
  ret %"class.thrust::detail::normal_iterator.212"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.212"* %f, %"class.thrust::detail::normal_iterator.212"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.212"* %0 to %"class.thrust::iterator_adaptor.213"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.213"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.214"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  store %"class.thrust::iterator_facade.214"* %this, %"class.thrust::iterator_facade.214"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.214"* %this1 to %"class.thrust::detail::normal_iterator.212"*
  ret %"class.thrust::detail::normal_iterator.212"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.213"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.213"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.213"* %this, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.213"*, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.141"* %m_iterator to %"class.thrust::iterator_facade.143"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.143"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.141"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.143"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.143"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.143"* %this, %"class.thrust::iterator_facade.143"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.143"*, %"class.thrust::iterator_facade.143"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.143"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.141"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.143"* %this1)
  ret %"class.thrust::pointer.141"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.141"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.141"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.141"* %f, %"class.thrust::pointer.141"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %0 to %"class.thrust::iterator_adaptor.142"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.142"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.141"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.143"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.143"*, align 8
  store %"class.thrust::iterator_facade.143"* %this, %"class.thrust::iterator_facade.143"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.143"*, %"class.thrust::iterator_facade.143"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.143"* %this1 to %"class.thrust::pointer.141"*
  ret %"class.thrust::pointer.141"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.142"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.142"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.142"* %this, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.142"*, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !109
  %add.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %1, i64 %0
  store %"struct.thrust::pair"* %add.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !109
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_(%"class.thrust::zip_iterator.263"* byval align 8 %first, %"class.thrust::zip_iterator.263"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.263", align 8
  %agg.tmp2 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.263"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.263"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.263"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.263"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.263"* byval align 8 %first, %"class.thrust::zip_iterator.263"* byval align 8 %last) #8 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = bitcast %"class.thrust::zip_iterator.263"* %last to %"class.thrust::iterator_facade.264"*
  %2 = bitcast %"class.thrust::zip_iterator.263"* %first to %"class.thrust::iterator_facade.264"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_(%"class.thrust::iterator_facade.264"* dereferenceable(1) %1, %"class.thrust::iterator_facade.264"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_(%"class.thrust::iterator_facade.264"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.264"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.264"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.264"*, align 8
  store %"class.thrust::iterator_facade.264"* %lhs, %"class.thrust::iterator_facade.264"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.264"* %rhs, %"class.thrust::iterator_facade.264"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.264"*, %"class.thrust::iterator_facade.264"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.264"* %0 to %"class.thrust::zip_iterator.263"*
  %2 = load %"class.thrust::iterator_facade.264"*, %"class.thrust::iterator_facade.264"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.264"* %2 to %"class.thrust::zip_iterator.263"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_(%"class.thrust::zip_iterator.263"* dereferenceable(24) %1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_(%"class.thrust::zip_iterator.263"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.263"* %f1, %"class.thrust::zip_iterator.263"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %f2, %"class.thrust::zip_iterator.263"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.263"* dereferenceable(24) %0, %"class.thrust::zip_iterator.263"* dereferenceable(24) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.263"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  store %"class.thrust::zip_iterator.263"* %f1, %"class.thrust::zip_iterator.263"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.263"* %f2, %"class.thrust::zip_iterator.263"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.263"* %1, %"class.thrust::zip_iterator.263"* dereferenceable(24) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.263"* %this, %"class.thrust::zip_iterator.263"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  store %"class.thrust::zip_iterator.263"* %this, %"class.thrust::zip_iterator.263"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.263"* %other, %"class.thrust::zip_iterator.263"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %other.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.265"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.263"* %0)
  %1 = bitcast %"class.thrust::tuple.265"* %call to %"struct.thrust::detail::cons.266"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.266"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.66"* %call2 to %"class.thrust::iterator_facade.68"*
  %call3 = call dereferenceable(24) %"class.thrust::tuple.265"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.263"* %this1)
  %3 = bitcast %"class.thrust::tuple.265"* %call3 to %"struct.thrust::detail::cons.266"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.266"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.66"* %call4 to %"class.thrust::iterator_facade.68"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.68"* dereferenceable(1) %2, %"class.thrust::iterator_facade.68"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.266"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.266"*, align 8
  store %"struct.thrust::detail::cons.266"* %c, %"struct.thrust::detail::cons.266"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.266"*, %"struct.thrust::detail::cons.266"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.266"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.66"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.266"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.266"*, align 8
  store %"struct.thrust::detail::cons.266"* %t, %"struct.thrust::detail::cons.266"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.266"*, %"struct.thrust::detail::cons.266"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.266", %"struct.thrust::detail::cons.266"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.66"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.263"* %this, %"class.thrust::tuple.265"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.263"*, align 8
  store %"class.thrust::zip_iterator.263"* %this, %"class.thrust::zip_iterator.263"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.263"*, %"class.thrust::zip_iterator.263"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.263"* %this1 to %"class.thrust::iterator_facade.264"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.263", %"class.thrust::zip_iterator.263"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.265"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.265"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_(%"class.thrust::tuple.265"* %this, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.265"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.265"* %this, %"class.thrust::tuple.265"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.66"* %t0, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.212"* %t2, %"class.thrust::detail::normal_iterator.212"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.265"*, %"class.thrust::tuple.265"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.265"* %this1 to %"struct.thrust::detail::cons.266"*
  %1 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.266"* %0, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.266"* %this, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.266"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.266"* %this, %"struct.thrust::detail::cons.266"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.66"* %t1, %"class.thrust::detail::normal_iterator.66"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.212"* %t3, %"class.thrust::detail::normal_iterator.212"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.266"*, %"struct.thrust::detail::cons.266"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.266", %"struct.thrust::detail::cons.266"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.66"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.66"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.266", %"struct.thrust::detail::cons.266"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.267"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIaaEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.267"* %this, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.267"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.267"* %this, %"struct.thrust::detail::cons.267"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.212"* %t2, %"class.thrust::detail::normal_iterator.212"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.267"*, %"struct.thrust::detail::cons.267"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.267", %"struct.thrust::detail::cons.267"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.199"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.199"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.267", %"struct.thrust::detail::cons.267"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.268"* %tail, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.268"* %this, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.268"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.268"* %this, %"struct.thrust::detail::cons.268"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.212"* %t1, %"class.thrust::detail::normal_iterator.212"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.268"*, %"struct.thrust::detail::cons.268"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.268", %"struct.thrust::detail::cons.268"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.212"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.212"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE(%"struct.thrust::detail::cons.266"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.266"*, align 8
  store %"struct.thrust::detail::cons.266"* %t, %"struct.thrust::detail::cons.266"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.266"*, %"struct.thrust::detail::cons.266"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.266", %"struct.thrust::detail::cons.266"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.267"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.212"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.267"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.267"*, align 8
  store %"struct.thrust::detail::cons.267"* %t, %"struct.thrust::detail::cons.267"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.267"*, %"struct.thrust::detail::cons.267"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.267", %"struct.thrust::detail::cons.267"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.268"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.212"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.268"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.268"*, align 8
  store %"struct.thrust::detail::cons.268"* %t, %"struct.thrust::detail::cons.268"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.268"*, %"struct.thrust::detail::cons.268"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.268", %"struct.thrust::detail::cons.268"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.212"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.68"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  store %"class.thrust::iterator_facade.68"* %this, %"class.thrust::iterator_facade.68"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.68"* %this1 to %"class.thrust::detail::normal_iterator.66"*
  ret %"class.thrust::detail::normal_iterator.66"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl(%"class.thrust::iterator_facade.68"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.68"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.68"* %this, %"class.thrust::iterator_facade.68"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.68"*, %"class.thrust::iterator_facade.68"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.68"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %sub = sub nsw i64 0, %0
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %call, i64 %sub)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.68"* %this1)
  ret %"class.thrust::detail::normal_iterator.66"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl(%"class.thrust::iterator_facade.214"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  %n.addr = alloca i64, align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.212", align 8
  store %"class.thrust::iterator_facade.214"* %this, %"class.thrust::iterator_facade.214"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.214"* %this1)
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %call to %"class.thrust::iterator_facade.214"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.214"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive5, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.212"* %coerce to %"class.thrust::iterator_facade.214"*
  %call6 = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.214"* %2)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %call6, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive11, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  ret %"struct.thrust::pair"* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.214"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  store %"class.thrust::iterator_facade.214"* %this, %"class.thrust::iterator_facade.214"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.214"* %this1 to %"class.thrust::detail::normal_iterator.212"*
  ret %"class.thrust::detail::normal_iterator.212"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.214"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  store %"class.thrust::iterator_facade.214"* %this, %"class.thrust::iterator_facade.214"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.214"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  store %"class.thrust::detail::normal_iterator.212"* %f, %"class.thrust::detail::normal_iterator.212"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.212"* %0 to %"class.thrust::iterator_adaptor.213"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.213"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.213"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.213"*, align 8
  store %"class.thrust::iterator_adaptor.213"* %this, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.213"*, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.141"* %m_iterator to %"class.thrust::iterator_facade.143"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.143"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive5, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.143"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.143"*, align 8
  store %"class.thrust::iterator_facade.143"* %this, %"class.thrust::iterator_facade.143"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.143"*, %"class.thrust::iterator_facade.143"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.143"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.141"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.141"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %f.addr = alloca %"class.thrust::pointer.141"*, align 8
  store %"class.thrust::pointer.141"* %f, %"class.thrust::pointer.141"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %f.addr, align 8
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.141"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.141"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.143"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.143"*, align 8
  store %"class.thrust::iterator_facade.143"* %this, %"class.thrust::iterator_facade.143"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.143"*, %"class.thrust::iterator_facade.143"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.143"* %this1 to %"class.thrust::pointer.141"*
  ret %"class.thrust::pointer.141"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.141"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.215", align 8
  %this.addr = alloca %"class.thrust::pointer.141"*, align 8
  store %"class.thrust::pointer.141"* %this, %"class.thrust::pointer.141"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %this.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.215"* %retval, %"class.thrust::pointer.141"* dereferenceable(8) %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.215"* %this, %"class.thrust::pointer.141"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.215"*, align 8
  %ptr.addr = alloca %"class.thrust::pointer.141"*, align 8
  store %"class.thrust::reference.215"* %this, %"class.thrust::reference.215"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.141"* %ptr, %"class.thrust::pointer.141"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.215"*, %"class.thrust::reference.215"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_(%"class.thrust::reference.215"* %this, %"struct.thrust::pair"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.215"*, align 8
  %src.addr = alloca %"struct.thrust::pair"*, align 8
  %system1 = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  store %"class.thrust::reference.215"* %this, %"class.thrust::reference.215"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %src, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.215"*, %"class.thrust::reference.215"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  store %"struct.thrust::system::cuda::detail::tag"* null, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  store %"struct.thrust::system::cpp::detail::tag"* null, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %2 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %3 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_(%"class.thrust::reference.215"* %this1, %"struct.thrust::system::cuda::detail::tag"* %2, %"struct.thrust::system::cpp::detail::tag"* %3, %"struct.thrust::pair"* %4)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %6 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %6) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_(%"class.thrust::reference.215"* %this, %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cpp::detail::tag"* %system2, %"struct.thrust::pair"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.215"*, align 8
  %system1.addr = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2.addr = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  %src.addr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  store %"class.thrust::reference.215"* %this, %"class.thrust::reference.215"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cpp::detail::tag"* %system2, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %src, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.215"*, %"class.thrust::reference.215"** %this.addr, align 8
  %0 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %0 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %2 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call = call { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 0
  %6 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 0
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 1
  %8 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 1
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_(%"class.thrust::reference.215"* %this1, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %ref.tmp, %"struct.thrust::pair"* %9)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_(%"class.thrust::reference.215"* %this, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %system, %"struct.thrust::pair"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.215"*, align 8
  %system.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair"*, align 8
  %non_const_system = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  store %"class.thrust::reference.215"* %this, %"class.thrust::reference.215"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %system, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %src, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.215"*, %"class.thrust::reference.215"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %1, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8, !tbaa !7
  %2 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %2 to %"struct.thrust::detail::execution_policy_base.229"*
  %call = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %3)
  %m_ptr = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.141"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  call void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %call, %"struct.thrust::pair"* %7, %"struct.thrust::pair"* %6)
  %8 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.end(i64 8, i8* %8) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair"* %dst.coerce, %"struct.thrust::pair"* %src) #8 comdat {
entry:
  %dst = alloca %"class.thrust::pointer.141", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %dst.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %src, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %0, %"struct.thrust::pair"* %4, %"struct.thrust::pair"* %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair"* %dst.coerce, %"struct.thrust::pair"* %src) #8 comdat align 2 {
entry:
  %dst = alloca %"class.thrust::pointer.141", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair"*, align 8
  %rotated_systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %dst.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %src, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %call = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZNK6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEE6rotateEv(%"struct.thrust::system::cuda::detail::cross_system.227"* %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %3 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 0
  %4 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 0
  store %"struct.thrust::execution_policy.88"* %4, %"struct.thrust::execution_policy.88"** %3, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 1
  %6 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 1
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to %"struct.thrust::detail::execution_policy_base.132"*
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %src.addr, align 8, !tbaa !1
  %add.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %9, i64 1
  %10 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.141"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIaaEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %7, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %add.ptr, %"struct.thrust::pair"* %12)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %call4, %"struct.thrust::pair"** %coerce.dive6, align 8
  %13 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.end(i64 16, i8* %13) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIaaEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first, %"struct.thrust::pair"* %last, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %result = alloca %"class.thrust::pointer.141", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %first.addr = alloca %"struct.thrust::pair"*, align 8
  %last.addr = alloca %"struct.thrust::pair"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %first, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %last, %"struct.thrust::pair"** %last.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call2 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %last.addr, align 8, !tbaa !1
  %5 = bitcast %"class.thrust::pointer.141"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::pointer.141"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %8 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 0
  %9 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %8, align 8
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 1
  %11 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %10, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive4, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %9, %"struct.thrust::execution_policy.120"* %11, %"struct.thrust::pair"* %3, %"struct.thrust::pair"* %4, %"struct.thrust::pair"* %12)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair"* %call6, %"struct.thrust::pair"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive9, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %13
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %first, %"struct.thrust::pair"* %last, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.141", align 8
  %first.addr = alloca %"struct.thrust::pair"*, align 8
  %last.addr = alloca %"struct.thrust::pair"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.141", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::pair"* %first, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %last, %"struct.thrust::pair"** %last.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %last.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.141"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.141"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair"* %5, %"struct.thrust::pair"* %6, %"struct.thrust::pair"* %14)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  ret %"struct.thrust::pair"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %begin, %"struct.thrust::pair"* %end, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.141", align 8
  %begin.addr = alloca %"struct.thrust::pair"*, align 8
  %end.addr = alloca %"struct.thrust::pair"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp3 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::pair"* %begin, %"struct.thrust::pair"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %end, %"struct.thrust::pair"** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %begin.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.141"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.141"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp2, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive5, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair"* %5, %"struct.thrust::pair"* %6, %"struct.thrust::pair"* %14)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive9, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %begin, %"struct.thrust::pair"* %end, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.141", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %begin.addr = alloca %"struct.thrust::pair"*, align 8
  %end.addr = alloca %"struct.thrust::pair"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp6 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::pair"* %begin, %"struct.thrust::pair"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %end, %"struct.thrust::pair"** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %begin.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.141"* %agg.tmp3 to i8*
  %8 = bitcast %"class.thrust::pointer.141"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair"* %5, %"struct.thrust::pair"* %6, %"struct.thrust::pair"* %14)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive9, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive11, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  ret %"struct.thrust::pair"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair"* %begin, %"struct.thrust::pair"* %end, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.141", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %begin.addr = alloca %"struct.thrust::pair"*, align 8
  %end.addr = alloca %"struct.thrust::pair"*, align 8
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::pair"* %begin, %"struct.thrust::pair"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %end, %"struct.thrust::pair"** %end.addr, align 8, !tbaa !1
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %end.addr, align 8, !tbaa !1
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %begin.addr, align 8, !tbaa !1
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair"* %7 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair"* %8 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  store i64 %sub.ptr.div, i64* %n, align 8, !tbaa !13
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %begin.addr, align 8, !tbaa !1
  %10 = load i64, i64* %n, align 8, !tbaa !13
  %11 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %12 = bitcast %"class.thrust::pointer.141"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive4, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair"* %9, i64 %10, %"struct.thrust::pair"* %13)
  %14 = bitcast %"class.thrust::pointer.141"* %result to %"class.thrust::iterator_facade.143"*
  %15 = load i64, i64* %n, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrustplINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.143"* dereferenceable(1) %14, i64 %15)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive7, align 8
  %16 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive8, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  ret %"struct.thrust::pair"* %17
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIaaEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair"* %first, i64 %n, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %result = alloca %"class.thrust::pointer.141", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %first.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce = alloca %"class.thrust::reference.215", align 8
  %src = alloca i8*, align 8
  %ref.tmp9 = alloca %"struct.thrust::pair"*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %first, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::pointer.141"* %result to %"class.thrust::iterator_facade.143"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.143"* %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair"* @_ZNK6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.215"* %coerce)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %ref.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %call5, %"struct.thrust::pair"** %coerce.dive7, align 8
  %call8 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.141"* dereferenceable(8) %ref.tmp)
  %2 = bitcast %"struct.thrust::pair"* %call8 to i8*
  store i8* %2, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %4, %"struct.thrust::pair"** %ref.tmp9, align 8, !tbaa !1
  %call10 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair"** dereferenceable(8) %ref.tmp9)
  %5 = bitcast %"struct.thrust::pair"* %call10 to i8*
  store i8* %5, i8** %src, align 8, !tbaa !1
  %6 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %6) #5
  %7 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %7, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %8 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call11 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %8)
  %9 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call11 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %10 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %10, i32 0, i32 1
  %ref12 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %11 = bitcast %"struct.thrust::execution_policy.120"* %ref12 to %"struct.thrust::detail::execution_policy_base.121"*
  %call13 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %11)
  %12 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call13 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call14 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %9, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %12)
  store i32 %call14, i32* %kind, align 4, !tbaa !97
  %13 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  %14 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system115 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %14, i32 0, i32 0
  %ref16 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system115, align 8, !tbaa !7
  %15 = bitcast %"struct.thrust::execution_policy.88"* %ref16 to %"struct.thrust::detail::execution_policy_base.85"*
  %call17 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %15)
  %16 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call17 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %17 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system218 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %17, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system218, align 8, !tbaa !7
  %18 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %18)
  %19 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %16, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %19)
  store %struct.CUstream_st* %call21, %struct.CUstream_st** %s, align 8, !tbaa !1
  %20 = load i8*, i8** %dst, align 8, !tbaa !1
  %21 = load i8*, i8** %src, align 8, !tbaa !1
  %22 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %22, 2
  %23 = load i32, i32* %kind, align 4, !tbaa !97
  %24 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %20, i8* %21, i64 %mul, i32 %23, %struct.CUstream_st* %24)
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %25, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %26 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %26) #5
  %27 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %27) #5
  %28 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %28) #5
  %29 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrustplINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.143"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.143"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.141", align 8
  store %"class.thrust::iterator_facade.143"* %i, %"class.thrust::iterator_facade.143"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.141"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.143"*, %"class.thrust::iterator_facade.143"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.143"* %1 to %"class.thrust::pointer.141"*
  %3 = bitcast %"class.thrust::pointer.141"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.141"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.141"* %tmp to %"class.thrust::iterator_facade.143"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.143"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.141"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.141"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.141"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive1, align 8
  ret %"struct.thrust::pair"* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.215"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %this.addr = alloca %"class.thrust::reference.215"*, align 8
  store %"class.thrust::reference.215"* %this, %"class.thrust::reference.215"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.215"*, %"class.thrust::reference.215"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.215", %"class.thrust::reference.215"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.141"* %retval to i8*
  %1 = bitcast %"class.thrust::pointer.141"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.216"* byval align 8 %result) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.216", align 8
  %first = alloca %"class.thrust::zip_iterator.221", align 8
  %last = alloca %"class.thrust::zip_iterator.221", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.216", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %0 = bitcast %"class.thrust::zip_iterator.221"* %first to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.221"* %last to { %"struct.thrust::pair"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %7 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::zip_iterator.221"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp1 to i8*
  %10 = bitcast %"class.thrust::zip_iterator.221"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 16, i32 8, i1 false)
  %11 = bitcast %"class.thrust::zip_iterator.216"* %agg.tmp2 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.216"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 16, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp3 to i8*
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp to { %"struct.thrust::pair"*, i32* }*
  %16 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %15, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %16, align 8
  %18 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %15, i32 0, i32 1
  %19 = load i32*, i32** %18, align 8
  %20 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp1 to { %"struct.thrust::pair"*, i32* }*
  %21 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %20, i32 0, i32 0
  %22 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %21, align 8
  %23 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %20, i32 0, i32 1
  %24 = load i32*, i32** %23, align 8
  %call = call { %"struct.thrust::pair"*, i32* } @_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %6, %"struct.thrust::pair"* %17, i32* %19, %"struct.thrust::pair"* %22, i32* %24, %"class.thrust::zip_iterator.216"* byval align 8 %agg.tmp2)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive, i32 0, i32 0
  %25 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive4 to { %"struct.thrust::pair"*, i32* }*
  %26 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %25, i32 0, i32 0
  %27 = extractvalue { %"struct.thrust::pair"*, i32* } %call, 0
  store %"struct.thrust::pair"* %27, %"struct.thrust::pair"** %26, align 8
  %28 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %25, i32 0, i32 1
  %29 = extractvalue { %"struct.thrust::pair"*, i32* } %call, 1
  store i32* %29, i32** %28, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive5, i32 0, i32 0
  %30 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive6 to { %"struct.thrust::pair"*, i32* }*
  %31 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %30, align 8
  ret { %"struct.thrust::pair"*, i32* } %31
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.216"* byval align 8 %result) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::zip_iterator.216", align 8
  %first = alloca %"class.thrust::zip_iterator.221", align 8
  %last = alloca %"class.thrust::zip_iterator.221", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.216", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %0 = bitcast %"class.thrust::zip_iterator.221"* %first to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.221"* %last to { %"struct.thrust::pair"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %7 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::zip_iterator.221"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp1 to i8*
  %10 = bitcast %"class.thrust::zip_iterator.221"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 16, i32 8, i1 false)
  %11 = bitcast %"class.thrust::zip_iterator.216"* %agg.tmp2 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.216"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 16, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp3 to i8*
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp to { %"struct.thrust::pair"*, i32* }*
  %16 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %15, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %16, align 8
  %18 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %15, i32 0, i32 1
  %19 = load i32*, i32** %18, align 8
  %20 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp1 to { %"struct.thrust::pair"*, i32* }*
  %21 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %20, i32 0, i32 0
  %22 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %21, align 8
  %23 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %20, i32 0, i32 1
  %24 = load i32*, i32** %23, align 8
  %call = call { %"struct.thrust::pair"*, i32* } @_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %6, %"struct.thrust::pair"* %17, i32* %19, %"struct.thrust::pair"* %22, i32* %24, %"class.thrust::zip_iterator.216"* byval align 8 %agg.tmp2)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive, i32 0, i32 0
  %25 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive4 to { %"struct.thrust::pair"*, i32* }*
  %26 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %25, i32 0, i32 0
  %27 = extractvalue { %"struct.thrust::pair"*, i32* } %call, 0
  store %"struct.thrust::pair"* %27, %"struct.thrust::pair"** %26, align 8
  %28 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %25, i32 0, i32 1
  %29 = extractvalue { %"struct.thrust::pair"*, i32* } %call, 1
  store i32* %29, i32** %28, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive5, i32 0, i32 0
  %30 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive6 to { %"struct.thrust::pair"*, i32* }*
  %31 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %30, align 8
  ret { %"struct.thrust::pair"*, i32* } %31
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.216"* byval align 8 %result) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::zip_iterator.216", align 8
  %first = alloca %"class.thrust::zip_iterator.221", align 8
  %last = alloca %"class.thrust::zip_iterator.221", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n = alloca i64, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %threshold_of_parallelism = alloca i64, align 8
  %groupsize = alloca i64, align 8
  %heap_size = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp5 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp6 = alloca %"class.thrust::zip_iterator.216", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %groupsize8 = alloca i64, align 8
  %grainsize = alloca i64, align 8
  %tile_size = alloca i64, align 8
  %num_tiles = alloca i64, align 8
  %subscription = alloca i64, align 8
  %num_groups = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %decomp = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %carries = alloca %"class.thrust::detail::temporary_array.302", align 8
  %heap_size11 = alloca i64, align 8
  %agg.tmp.ensured12 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp14 = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %agg.tmp15 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp16 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp17 = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %agg.tmp24 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %groupsize2 = alloca i64, align 8
  %grainsize2 = alloca i64, align 8
  %agg.tmp.ensured30 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp31 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323", align 8
  %agg.tmp34 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %agg.tmp35 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp36 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %agg.tmp43 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %agg.tmp50 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %agg.tmp.ensured60 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp61 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp63 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %agg.tmp64 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp65 = alloca %"class.thrust::zip_iterator.221", align 8
  %agg.tmp66 = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %agg.tmp67 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %agg.tmp74 = alloca %"class.thrust::zip_iterator.216", align 8
  %agg.tmp75 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %0 = bitcast %"class.thrust::zip_iterator.221"* %first to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.221"* %last to { %"struct.thrust::pair"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::zip_iterator.221"* %last to %"class.thrust::iterator_facade.222"*
  %8 = bitcast %"class.thrust::zip_iterator.221"* %first to %"class.thrust::iterator_facade.222"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.222"* dereferenceable(1) %7, %"class.thrust::iterator_facade.222"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %9) #5
  %10 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %10 to %"struct.thrust::detail::execution_policy_base.121"*
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %11)
  %12 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call2 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %12)
  store %struct.CUstream_st* %call2, %struct.CUstream_st** %s, align 8, !tbaa !1
  %13 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  store i64 20000, i64* %threshold_of_parallelism, align 8, !tbaa !13
  %14 = load i64, i64* %n, align 8, !tbaa !13
  %cmp = icmp slt i64 %14, 20000
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %15 = bitcast i64* %groupsize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %15) #5
  store i64 512, i64* %groupsize, align 8, !tbaa !13
  %16 = bitcast i64* %heap_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %16) #5
  store i64 12288, i64* %heap_size, align 8, !tbaa !13
  %17 = load i64, i64* %heap_size, align 8, !tbaa !13
  %18 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridILm512ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* sret %agg.tmp, i64 1, i64 %17, %struct.CUstream_st* %18)
  %19 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %19, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %20 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp5 to i8*
  %21 = bitcast %"class.thrust::zip_iterator.221"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %20, i8* %21, i64 16, i32 8, i1 false)
  %22 = load i64, i64* %n, align 8, !tbaa !13
  %23 = bitcast %"class.thrust::zip_iterator.216"* %agg.tmp6 to i8*
  %24 = bitcast %"class.thrust::zip_iterator.216"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %23, i8* %24, i64 16, i32 8, i1 false)
  %25 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp7 to i8*
  %26 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %25, i8* %26, i64 1, i32 1, i1 false), !tbaa.struct !41
  %27 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp5 to { %"struct.thrust::pair"*, i32* }*
  %28 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %27, i32 0, i32 0
  %29 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %28, align 8
  %30 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %27, i32 0, i32 1
  %31 = load i32*, i32** %30, align 8
  %32 = bitcast %"class.thrust::zip_iterator.216"* %agg.tmp6 to { %"struct.thrust::pair"*, i32* }*
  %33 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %32, i32 0, i32 0
  %34 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %33, align 8
  %35 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %32, i32 0, i32 1
  %36 = load i32*, i32** %35, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %agg.tmp, %"struct.thrust::pair"* %29, i32* %31, i64 %22, %"struct.thrust::pair"* %34, i32* %36)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %37 = bitcast i64* %heap_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %37) #5
  %38 = bitcast i64* %groupsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %38) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %39 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %39) #5
  store i64 128, i64* %groupsize8, align 8, !tbaa !13
  %40 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %40) #5
  store i64 5, i64* %grainsize, align 8, !tbaa !13
  %41 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %41) #5
  store i64 640, i64* %tile_size, align 8, !tbaa !13
  %42 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.start(i64 8, i8* %42) #5
  %43 = load i64, i64* %n, align 8, !tbaa !13
  %add = add nsw i64 %43, 640
  %sub = sub nsw i64 %add, 1
  %div = sdiv i64 %sub, 640
  store i64 %div, i64* %num_tiles, align 8, !tbaa !13
  %44 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.start(i64 8, i8* %44) #5
  store i64 20, i64* %subscription, align 8, !tbaa !13
  %45 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %45) #5
  %46 = load i64, i64* %subscription, align 8, !tbaa !13
  %call9 = call i32 @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE20hardware_concurrencyEv()
  %conv = sext i32 %call9 to i64
  %mul = mul nsw i64 %46, %conv
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call10 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %ref.tmp, i64* dereferenceable(8) %num_tiles)
  store i64 %call10, i64* %num_groups, align 8, !tbaa !13
  %47 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.start(i64 40, i8* %47) #5
  %48 = load i64, i64* %n, align 8, !tbaa !13
  %49 = load i64, i64* %num_groups, align 8, !tbaa !13
  call void @_ZN6thrust6system4cuda6detail21aligned_decompositionIlEC2Elll(%"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp, i64 %48, i64 %49, i64 640)
  %50 = bitcast %"class.thrust::detail::temporary_array.302"* %carries to i8*
  call void @llvm.lifetime.start(i64 24, i8* %50) #5
  %51 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %52 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %51 to %"struct.thrust::execution_policy.120"*
  %53 = load i64, i64* %num_groups, align 8, !tbaa !13
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm(%"class.thrust::detail::temporary_array.302"* %carries, %"struct.thrust::execution_policy.120"* dereferenceable(1) %52, i64 %53)
  %54 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %54) #5
  store i64 1024, i64* %heap_size11, align 8, !tbaa !13
  %55 = load i64, i64* %num_groups, align 8, !tbaa !13
  %56 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %57 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* sret %agg.tmp13, i64 %55, i64 %56, %struct.CUstream_st* %57)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.else
  %58 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp15 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %58, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %59 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp16 to i8*
  %60 = bitcast %"class.thrust::zip_iterator.221"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* %60, i64 16, i32 8, i1 false)
  %61 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %agg.tmp17 to i8*
  %62 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %61, i8* %62, i64 40, i32 8, i1 false), !tbaa.struct !220
  %63 = bitcast %"class.thrust::detail::temporary_array.302"* %carries to %"class.thrust::detail::contiguous_storage.303"*
  %call20 = invoke %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.303"* %63)
          to label %invoke.cont19 unwind label %lpad

invoke.cont19:                                    ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp18, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive22, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call20, %"class.thrust::tuple.314"** %coerce.dive23, align 8
  %64 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp24 to i8*
  %65 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %64, i8* %65, i64 1, i32 1, i1 false), !tbaa.struct !41
  %66 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp16 to { %"struct.thrust::pair"*, i32* }*
  %67 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %66, i32 0, i32 0
  %68 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %67, align 8
  %69 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %66, i32 0, i32 1
  %70 = load i32*, i32** %69, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp18, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive27, i32 0, i32 0
  %71 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive28, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured12, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp13, %"struct.thrust::pair"* %68, i32* %70, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %agg.tmp17, %"class.thrust::tuple.314"* %71)
          to label %invoke.cont29 unwind label %lpad

invoke.cont29:                                    ; preds = %invoke.cont19
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured12) #5
  %72 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %72) #5
  store i64 256, i64* %groupsize2, align 8, !tbaa !13
  %73 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %73) #5
  store i64 3, i64* %grainsize2, align 8, !tbaa !13
  store i64 6144, i64* %heap_size11, align 8, !tbaa !13
  %74 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %75 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm256ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* sret %agg.tmp31, i64 1, i64 %74, %struct.CUstream_st* %75)
          to label %invoke.cont33 unwind label %lpad32

invoke.cont33:                                    ; preds = %invoke.cont29
  %76 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp35 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %76, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %77 = bitcast %"class.thrust::detail::temporary_array.302"* %carries to %"class.thrust::detail::contiguous_storage.303"*
  %call38 = invoke %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.303"* %77)
          to label %invoke.cont37 unwind label %lpad32

invoke.cont37:                                    ; preds = %invoke.cont33
  %coerce.dive39 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp36, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive41, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call38, %"class.thrust::tuple.314"** %coerce.dive42, align 8
  %78 = load i64, i64* %num_groups, align 8, !tbaa !13
  %79 = bitcast %"class.thrust::detail::temporary_array.302"* %carries to %"class.thrust::detail::contiguous_storage.303"*
  %call45 = invoke %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.303"* %79)
          to label %invoke.cont44 unwind label %lpad32

invoke.cont44:                                    ; preds = %invoke.cont37
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp43, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive48, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call45, %"class.thrust::tuple.314"** %coerce.dive49, align 8
  %80 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp50 to i8*
  %81 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %80, i8* %81, i64 1, i32 1, i1 false), !tbaa.struct !41
  %coerce.dive51 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp36, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive51, i32 0, i32 0
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive52, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive53, i32 0, i32 0
  %82 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive54, align 8
  %coerce.dive55 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp43, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive56, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive57, i32 0, i32 0
  %83 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive58, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured30, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %agg.tmp31, %"class.thrust::tuple.314"* %82, i64 %78, %"class.thrust::tuple.314"* %83)
          to label %invoke.cont59 unwind label %lpad32

invoke.cont59:                                    ; preds = %invoke.cont44
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured30) #5
  store i64 5120, i64* %heap_size11, align 8, !tbaa !13
  %84 = load i64, i64* %num_groups, align 8, !tbaa !13
  %85 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %86 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* sret %agg.tmp61, i64 %84, i64 %85, %struct.CUstream_st* %86)
          to label %invoke.cont62 unwind label %lpad32

invoke.cont62:                                    ; preds = %invoke.cont59
  %87 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp64 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %87, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %88 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp65 to i8*
  %89 = bitcast %"class.thrust::zip_iterator.221"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %88, i8* %89, i64 16, i32 8, i1 false)
  %90 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %agg.tmp66 to i8*
  %91 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %90, i8* %91, i64 40, i32 8, i1 false), !tbaa.struct !220
  %92 = bitcast %"class.thrust::detail::temporary_array.302"* %carries to %"class.thrust::detail::contiguous_storage.303"*
  %call69 = invoke %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.303"* %92)
          to label %invoke.cont68 unwind label %lpad32

invoke.cont68:                                    ; preds = %invoke.cont62
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp67, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive71, i32 0, i32 0
  %coerce.dive73 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive72, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call69, %"class.thrust::tuple.314"** %coerce.dive73, align 8
  %93 = bitcast %"class.thrust::zip_iterator.216"* %agg.tmp74 to i8*
  %94 = bitcast %"class.thrust::zip_iterator.216"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %93, i8* %94, i64 16, i32 8, i1 false)
  %95 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %agg.tmp75 to i8*
  %96 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %95, i8* %96, i64 1, i32 1, i1 false), !tbaa.struct !41
  %97 = bitcast %"class.thrust::zip_iterator.221"* %agg.tmp65 to { %"struct.thrust::pair"*, i32* }*
  %98 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %97, i32 0, i32 0
  %99 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %98, align 8
  %100 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %97, i32 0, i32 1
  %101 = load i32*, i32** %100, align 8
  %coerce.dive76 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp67, i32 0, i32 0
  %coerce.dive77 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive76, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive77, i32 0, i32 0
  %coerce.dive79 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive78, i32 0, i32 0
  %102 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive79, align 8
  %103 = bitcast %"class.thrust::zip_iterator.216"* %agg.tmp74 to { %"struct.thrust::pair"*, i32* }*
  %104 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %103, i32 0, i32 0
  %105 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %104, align 8
  %106 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %103, i32 0, i32 1
  %107 = load i32*, i32** %106, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured60, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp61, %"struct.thrust::pair"* %99, i32* %101, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %agg.tmp66, %"class.thrust::tuple.314"* %102, %"struct.thrust::pair"* %105, i32* %107)
          to label %invoke.cont80 unwind label %lpad32

invoke.cont80:                                    ; preds = %invoke.cont68
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured60) #5
  %108 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %108) #5
  %109 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %109) #5
  %110 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %110) #5
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.302"* %carries) #5
  %111 = bitcast %"class.thrust::detail::temporary_array.302"* %carries to i8*
  call void @llvm.lifetime.end(i64 24, i8* %111) #5
  %112 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.end(i64 40, i8* %112) #5
  %113 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %113) #5
  %114 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.end(i64 8, i8* %114) #5
  %115 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.end(i64 8, i8* %115) #5
  %116 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %116) #5
  %117 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %117) #5
  %118 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %118) #5
  br label %if.end

lpad:                                             ; preds = %invoke.cont19, %invoke.cont, %if.else
  %119 = landingpad { i8*, i32 }
          cleanup
  %120 = extractvalue { i8*, i32 } %119, 0
  store i8* %120, i8** %exn.slot, align 8
  %121 = extractvalue { i8*, i32 } %119, 1
  store i32 %121, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad32:                                           ; preds = %invoke.cont68, %invoke.cont62, %invoke.cont59, %invoke.cont44, %invoke.cont37, %invoke.cont33, %invoke.cont29
  %122 = landingpad { i8*, i32 }
          cleanup
  %123 = extractvalue { i8*, i32 } %122, 0
  store i8* %123, i8** %exn.slot, align 8
  %124 = extractvalue { i8*, i32 } %122, 1
  store i32 %124, i32* %ehselector.slot, align 4
  %125 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %125) #5
  %126 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %126) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad32, %lpad
  %127 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %127) #5
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.302"* %carries) #5
  %128 = bitcast %"class.thrust::detail::temporary_array.302"* %carries to i8*
  call void @llvm.lifetime.end(i64 24, i8* %128) #5
  %129 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.end(i64 40, i8* %129) #5
  %130 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %130) #5
  %131 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.end(i64 8, i8* %131) #5
  %132 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.end(i64 8, i8* %132) #5
  %133 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %133) #5
  %134 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %134) #5
  %135 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %135) #5
  %136 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.end(i64 8, i8* %136) #5
  %137 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %137) #5
  %138 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %138) #5
  br label %eh.resume

if.end:                                           ; preds = %invoke.cont80, %if.then
  %139 = bitcast %"class.thrust::zip_iterator.216"* %result to %"class.thrust::iterator_facade.217"*
  %140 = load i64, i64* %n, align 8, !tbaa !13
  %call90 = call { %"struct.thrust::pair"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE(%"class.thrust::iterator_facade.217"* dereferenceable(1) %139, i64 %140)
  %coerce.dive91 = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive92 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive91, i32 0, i32 0
  %141 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive92 to { %"struct.thrust::pair"*, i32* }*
  %142 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %141, i32 0, i32 0
  %143 = extractvalue { %"struct.thrust::pair"*, i32* } %call90, 0
  store %"struct.thrust::pair"* %143, %"struct.thrust::pair"** %142, align 8
  %144 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %141, i32 0, i32 1
  %145 = extractvalue { %"struct.thrust::pair"*, i32* } %call90, 1
  store i32* %145, i32** %144, align 8
  %146 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.end(i64 8, i8* %146) #5
  %147 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %147) #5
  %148 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %148) #5
  %coerce.dive96 = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive97 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive96, i32 0, i32 0
  %149 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive97 to { %"struct.thrust::pair"*, i32* }*
  %150 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %149, align 8
  ret { %"struct.thrust::pair"*, i32* } %150

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val98 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val98
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.222"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.222"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.222"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.222"*, align 8
  store %"class.thrust::iterator_facade.222"* %lhs, %"class.thrust::iterator_facade.222"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.222"* %rhs, %"class.thrust::iterator_facade.222"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.222"*, %"class.thrust::iterator_facade.222"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.222"* %0 to %"class.thrust::zip_iterator.221"*
  %2 = load %"class.thrust::iterator_facade.222"*, %"class.thrust::iterator_facade.222"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.222"* %2 to %"class.thrust::zip_iterator.221"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_(%"class.thrust::zip_iterator.221"* dereferenceable(16) %1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce0, i32* %arg2.coerce1, i64 %arg3, %"struct.thrust::pair"* %arg4.coerce0, i32* %arg4.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.221", align 8
  %arg4 = alloca %"class.thrust::zip_iterator.216", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %arg3.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %0 = bitcast %"class.thrust::zip_iterator.221"* %arg2 to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.216"* %arg4 to { %"struct.thrust::pair"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %arg4.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 1
  store i32* %arg4.coerce1, i32** %5, align 8
  store i64 %arg3, i64* %arg3.addr, align 8, !tbaa !13
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %arg2, i64* dereferenceable(8) %arg3.addr, %"class.thrust::zip_iterator.216"* dereferenceable(16) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_4gridILm512ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* noalias sret %agg.result, i64 %num_groups, i64 %heap_size, %struct.CUstream_st* %stream) #0 comdat {
entry:
  %num_groups.addr = alloca i64, align 8
  %heap_size.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %1 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm512ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %1)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 12, i32 4, i1 false)
  %4 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %5 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %8 = load i64, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %10 = load i32, i32* %9, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* sret %agg.result, %struct.CUstream_st* %0, i64 %8, i32 %10, i64 %4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE20hardware_concurrencyEv() #8 comdat align 2 {
entry:
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %tmp)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %tmp, i32 0, i32 5
  %0 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  ret i32 %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail21aligned_decompositionIlEC2Elll(%"class.thrust::system::cuda::detail::aligned_decomposition"* %this, i64 %n, i64 %num_partitions, i64 %aligned_size) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %n.addr = alloca i64, align 8
  %num_partitions.addr = alloca i64, align 8
  %aligned_size.addr = alloca i64, align 8
  %num_tiles = alloca i64, align 8
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i64 %num_partitions, i64* %num_partitions.addr, align 8, !tbaa !13
  store i64 %aligned_size, i64* %aligned_size.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %this.addr, align 8
  %m_n = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  store i64 %0, i64* %m_n, align 8, !tbaa !221
  %m_num_partitions = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 1
  %1 = load i64, i64* %num_partitions.addr, align 8, !tbaa !13
  store i64 %1, i64* %m_num_partitions, align 8, !tbaa !223
  %m_tile_size = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 3
  %2 = load i64, i64* %aligned_size.addr, align 8, !tbaa !13
  store i64 %2, i64* %m_tile_size, align 8, !tbaa !224
  %3 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_tile_size2 = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 3
  %5 = load i64, i64* %m_tile_size2, align 8, !tbaa !224
  %add = add nsw i64 %4, %5
  %sub = sub nsw i64 %add, 1
  %m_tile_size3 = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 3
  %6 = load i64, i64* %m_tile_size3, align 8, !tbaa !224
  %div = sdiv i64 %sub, %6
  store i64 %div, i64* %num_tiles, align 8, !tbaa !13
  %7 = load i64, i64* %num_tiles, align 8, !tbaa !13
  %call = call i64 @_ZNK6thrust6system4cuda6detail21aligned_decompositionIlE4sizeEv(%"class.thrust::system::cuda::detail::aligned_decomposition"* %this1)
  %div4 = sdiv i64 %7, %call
  %m_num_tiles_per_partition = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 2
  store i64 %div4, i64* %m_num_tiles_per_partition, align 8, !tbaa !225
  %8 = load i64, i64* %num_tiles, align 8, !tbaa !13
  %call5 = call i64 @_ZNK6thrust6system4cuda6detail21aligned_decompositionIlE4sizeEv(%"class.thrust::system::cuda::detail::aligned_decomposition"* %this1)
  %rem = srem i64 %8, %call5
  %m_last_partial_tile_size = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 4
  store i64 %rem, i64* %m_last_partial_tile_size, align 8, !tbaa !226
  %9 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm(%"class.thrust::detail::temporary_array.302"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.302"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.304", align 8
  %ref.tmp2 = alloca %"class.thrust::detail::temporary_allocator.305", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_array.302"* %this, %"class.thrust::detail::temporary_array.302"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_array.302"*, %"class.thrust::detail::temporary_array.302"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.302"* %this1 to %"class.thrust::detail::contiguous_storage.303"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE(%"class.thrust::detail::temporary_allocator.305"* %ref.tmp2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_(%"struct.thrust::detail::no_throw_allocator.304"* %ref.tmp, %"class.thrust::detail::temporary_allocator.305"* dereferenceable(8) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_(%"class.thrust::detail::contiguous_storage.303"* %0, i64 %1, %"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.306"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.304"*)*)(%"struct.thrust::detail::no_throw_allocator.304"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.306"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.305"*)*)(%"class.thrust::detail::temporary_allocator.305"* %ref.tmp2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.302"* dereferenceable(24) %this1, i64 %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.306"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.304"*)*)(%"struct.thrust::detail::no_throw_allocator.304"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.306"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.305"*)*)(%"class.thrust::detail::temporary_allocator.305"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::detail::temporary_array.302"* %this1 to %"class.thrust::detail::contiguous_storage.303"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.303"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val8 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce0, i32* %arg2.coerce1, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %arg3, %"class.thrust::tuple.314"* %arg4.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.221", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp6 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %0 = bitcast %"class.thrust::zip_iterator.221"* %arg2 to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %arg4, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg4.coerce, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* sret %agg.tmp6, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %arg2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %arg3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %agg.tmp6)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* noalias sret %agg.result, i64 %num_groups, i64 %heap_size, %struct.CUstream_st* %stream) #0 comdat {
entry:
  %num_groups.addr = alloca i64, align 8
  %heap_size.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %1 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm128ELm5EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %1)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 12, i32 4, i1 false)
  %4 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %5 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %8 = load i64, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %10 = load i32, i32* %9, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* sret %agg.result, %struct.CUstream_st* %0, i64 %8, i32 %10, i64 %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.303"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.308"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.308"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %2 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  ret %"class.thrust::tuple.314"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %g, %"class.thrust::tuple.314"* %arg2.coerce, i64 %arg3, %"class.thrust::tuple.314"* %arg4.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %arg3.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", align 8
  %agg.tmp11 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg2.coerce, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %arg4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive7, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg4.coerce, %"class.thrust::tuple.314"** %coerce.dive8, align 8
  store i64 %arg3, i64* %arg3.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* sret %agg.tmp10, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %arg2, i64* dereferenceable(8) %arg3.addr, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %agg.tmp10)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_4gridILm256ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* noalias sret %agg.result, i64 %num_groups, i64 %heap_size, %struct.CUstream_st* %stream) #0 comdat {
entry:
  %num_groups.addr = alloca i64, align 8
  %heap_size.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %1 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm256ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %1)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 12, i32 4, i1 false)
  %4 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %5 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %8 = load i64, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %10 = load i32, i32* %9, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* sret %agg.result, %struct.CUstream_st* %0, i64 %8, i32 %10, i64 %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce0, i32* %arg2.coerce1, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %arg3, %"class.thrust::tuple.314"* %arg4.coerce, %"struct.thrust::pair"* %arg5.coerce0, i32* %arg5.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.221", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %arg5 = alloca %"class.thrust::zip_iterator.216", align 8
  %arg6 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor", align 1
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp6 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %0 = bitcast %"class.thrust::zip_iterator.221"* %arg2 to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %arg4, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg4.coerce, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  %3 = bitcast %"class.thrust::zip_iterator.216"* %arg5 to { %"struct.thrust::pair"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %arg5.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %3, i32 0, i32 1
  store i32* %arg5.coerce1, i32** %5, align 8
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* sret %agg.tmp6, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %arg2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %arg3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %arg4, %"class.thrust::zip_iterator.216"* dereferenceable(16) %arg5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %arg6)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %agg.tmp6)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.302"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.302"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  store %"class.thrust::detail::temporary_array.302"* %this, %"class.thrust::detail::temporary_array.302"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.302"*, %"class.thrust::detail::temporary_array.302"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.302"* %this1 to %"class.thrust::detail::contiguous_storage.303"*
  %1 = bitcast %"class.thrust::detail::temporary_array.302"* %this1 to %"class.thrust::detail::contiguous_storage.303"*
  %call = invoke %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.303"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.302"* %this1 to %"class.thrust::detail::contiguous_storage.303"*
  %call7 = invoke %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.303"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive10, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call7, %"class.thrust::tuple.314"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive14, i32 0, i32 0
  %3 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive18, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_(%"class.thrust::detail::contiguous_storage.303"* %0, %"class.thrust::tuple.314"* %3, %"class.thrust::tuple.314"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.302"* %this1 to %"class.thrust::detail::contiguous_storage.303"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.303"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.302"* %this1 to %"class.thrust::detail::contiguous_storage.303"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.303"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE(%"class.thrust::iterator_facade.217"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.216", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.217"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.216", align 8
  store %"class.thrust::iterator_facade.217"* %i, %"class.thrust::iterator_facade.217"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.216"* %tmp to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.217"*, %"class.thrust::iterator_facade.217"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.217"* %1 to %"class.thrust::zip_iterator.216"*
  %3 = bitcast %"class.thrust::zip_iterator.216"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.216"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.216"* %tmp to %"class.thrust::iterator_facade.217"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.216"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl(%"class.thrust::iterator_facade.217"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.216"* %retval to i8*
  %8 = bitcast %"class.thrust::zip_iterator.216"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.216"* %tmp to i8*
  call void @llvm.lifetime.end(i64 16, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.218", %"class.thrust::tuple.218"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.219"* %coerce.dive1 to { %"struct.thrust::pair"*, i32* }*
  %11 = load { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair"*, i32* } %11
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_(%"class.thrust::zip_iterator.221"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.221"* %f1, %"class.thrust::zip_iterator.221"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %f2, %"class.thrust::zip_iterator.221"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.221"* dereferenceable(16) %0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.221"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  store %"class.thrust::zip_iterator.221"* %f1, %"class.thrust::zip_iterator.221"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %f2, %"class.thrust::zip_iterator.221"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.221"* %1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.221"* %this, %"class.thrust::zip_iterator.221"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  store %"class.thrust::zip_iterator.221"* %this, %"class.thrust::zip_iterator.221"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.221"* %other, %"class.thrust::zip_iterator.221"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %other.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.223"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.221"* %0)
  %1 = bitcast %"class.thrust::tuple.223"* %call to %"struct.thrust::detail::cons.224"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.224"* dereferenceable(16) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.212"* %call2 to %"class.thrust::iterator_facade.214"*
  %call3 = call dereferenceable(16) %"class.thrust::tuple.223"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.221"* %this1)
  %3 = bitcast %"class.thrust::tuple.223"* %call3 to %"struct.thrust::detail::cons.224"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.224"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.212"* %call4 to %"class.thrust::iterator_facade.214"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.214"* dereferenceable(1) %2, %"class.thrust::iterator_facade.214"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.214"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.214"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.214"*, align 8
  store %"class.thrust::iterator_facade.214"* %lhs, %"class.thrust::iterator_facade.214"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.214"* %rhs, %"class.thrust::iterator_facade.214"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.214"* %0 to %"class.thrust::detail::normal_iterator.212"*
  %2 = load %"class.thrust::iterator_facade.214"*, %"class.thrust::iterator_facade.214"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.214"* %2 to %"class.thrust::detail::normal_iterator.212"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.224"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.224"*, align 8
  store %"struct.thrust::detail::cons.224"* %c, %"struct.thrust::detail::cons.224"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.224"*, %"struct.thrust::detail::cons.224"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE(%"struct.thrust::detail::cons.224"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.212"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.223"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.221"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  store %"class.thrust::zip_iterator.221"* %this, %"class.thrust::zip_iterator.221"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.223"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.212"* %f1, %"class.thrust::detail::normal_iterator.212"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.212"* %f2, %"class.thrust::detail::normal_iterator.212"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  store %"class.thrust::detail::normal_iterator.212"* %f1, %"class.thrust::detail::normal_iterator.212"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.212"* %f2, %"class.thrust::detail::normal_iterator.212"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.212"* %1 to %"class.thrust::iterator_adaptor.213"*
  %3 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.212"* %3 to %"class.thrust::iterator_adaptor.213"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.213"* %2, %"class.thrust::iterator_adaptor.213"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.213"* %this, %"class.thrust::iterator_adaptor.213"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.213"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.213"*, align 8
  store %"class.thrust::iterator_adaptor.213"* %this, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.213"* %y, %"class.thrust::iterator_adaptor.213"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.213"*, %"class.thrust::iterator_adaptor.213"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.213"*, %"class.thrust::iterator_adaptor.213"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.213"* %0)
  %1 = bitcast %"class.thrust::pointer.141"* %call to %"class.thrust::iterator_facade.143"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.141"* %m_iterator to %"class.thrust::iterator_facade.143"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.143"* dereferenceable(1) %1, %"class.thrust::iterator_facade.143"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.143"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.143"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.143"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.143"*, align 8
  store %"class.thrust::iterator_facade.143"* %lhs, %"class.thrust::iterator_facade.143"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.143"* %rhs, %"class.thrust::iterator_facade.143"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.143"*, %"class.thrust::iterator_facade.143"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.143"* %0 to %"class.thrust::pointer.141"*
  %2 = load %"class.thrust::iterator_facade.143"*, %"class.thrust::iterator_facade.143"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.143"* %2 to %"class.thrust::pointer.141"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.141"* dereferenceable(8) %1, %"class.thrust::pointer.141"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.141"* dereferenceable(8) %f1, %"class.thrust::pointer.141"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.141"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.141"* %f1, %"class.thrust::pointer.141"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %f2, %"class.thrust::pointer.141"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.141"* dereferenceable(8) %0, %"class.thrust::pointer.141"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.141"* dereferenceable(8) %f1, %"class.thrust::pointer.141"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.141"*, align 8
  store %"class.thrust::pointer.141"* %f1, %"class.thrust::pointer.141"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %f2, %"class.thrust::pointer.141"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.141"* %1 to %"class.thrust::iterator_adaptor.142"*
  %3 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.141"* %3 to %"class.thrust::iterator_adaptor.142"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.142"* %2, %"class.thrust::iterator_adaptor.142"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.142"* %this, %"class.thrust::iterator_adaptor.142"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.142"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.142"*, align 8
  store %"class.thrust::iterator_adaptor.142"* %this, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.142"* %y, %"class.thrust::iterator_adaptor.142"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.142"*, %"class.thrust::iterator_adaptor.142"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.142"*, %"class.thrust::iterator_adaptor.142"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.142"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !109
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE(%"struct.thrust::detail::cons.224"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.224"*, align 8
  store %"struct.thrust::detail::cons.224"* %t, %"struct.thrust::detail::cons.224"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.224"*, %"struct.thrust::detail::cons.224"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.224", %"struct.thrust::detail::cons.224"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.212"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 64, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %a2, i64* dereferenceable(8) %a3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %a3.addr = alloca i64*, align 8
  %a4.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %ref.tmp = alloca %"class.thrust::tuple.330", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %a2, %"class.thrust::zip_iterator.221"** %a2.addr, align 8, !tbaa !7
  store i64* %a3, i64** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %a4, %"class.thrust::zip_iterator.216"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %a2.addr, align 8
  %2 = load i64*, i64** %a3.addr, align 8
  %3 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.330"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %1, i64* dereferenceable(8) %2, %"class.thrust::zip_iterator.216"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %agg.result, %"class.thrust::tuple.330"* dereferenceable(56) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 0
  %0 = load i8, i8* %stream_valid, align 8, !tbaa !227, !range !77
  %tobool = trunc i8 %0 to i1
  ret i1 %tobool
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.result to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %e to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8
  %s = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 2
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !230
  ret %struct.CUstream_st* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8
  %be = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 3
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %be, align 8, !tbaa !231
  ret %struct.CUevent_st* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 64, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 64, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.336"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_size, align 4, !tbaa !232
  ret i32 %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"** %this.addr, align 8
  ret i32 512
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"** %this.addr, align 8
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_heap_size, align 4, !tbaa !235
  ret i32 %0
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !236
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %tmp2 = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %size.addr, align 4, !tbaa !11
  %1 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive1, align 4
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEE4makeEiiS8_i(i32 %0, i32 %1, i32 %5, i32 %4)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %6 = bitcast { i64, i32 }* %tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 12, i32 4, i1 false)
  %8 = bitcast { i64, i32 }* %tmp2 to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = load { i64, i32 }, { i64, i32 }* %tmp2, align 8
  ret { i64, i32 } %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %this, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301"*, align 8
  %i.addr = alloca i32, align 4
  store %"class.thrust::system::cuda::detail::bulk_::agent.301"* %this, %"class.thrust::system::cuda::detail::bulk_::agent.301"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::agent.301"*, %"class.thrust::system::cuda::detail::bulk_::agent.301"** %this.addr, align 8
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %this1, i32 0, i32 0
  %0 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %0, i32* %m_index, align 4, !tbaa !238
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.337"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat align 2 {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %this, i32 %size, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"*, align 8
  %size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"** %this.addr, align 8, !tbaa !1
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"** %this.addr, align 8
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %5 = load i32, i32* %size.addr, align 4, !tbaa !11
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 12, i32 4, i1 false)
  %8 = load i32, i32* %i.addr, align 4, !tbaa !11
  %9 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %10 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 12, i32 4, i1 false)
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %12 = load i64, i64* %11, align 4
  %13 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %14 = load i32, i32* %13, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %4, i32 %5, i64 %12, i32 %14, i32 %8)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this, i32 %sz, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*, align 8
  %sz.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"** %this.addr, align 8, !tbaa !1
  store i32 %sz, i32* %sz.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this1, i32 0, i32 1
  %6 = load i32, i32* %sz.addr, align 4, !tbaa !11
  store i32 %6, i32* %m_size, align 4, !tbaa !232
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %this1, i32 0, i32 2
  %7 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %7, i32* %m_index, align 4, !tbaa !240
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEE4makeEiiS8_i(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive1, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %retval, i32 %0, i32 %4, i32 %3)
  %5 = bitcast { i64, i32 }* %tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this, i32 %heap_size, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"*, align 8
  %heap_size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"** %this.addr, align 8, !tbaa !1
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this1 to %"class.thrust::system::cuda::detail::bulk_::parallel_group.299"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm512EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.299"* %0, i32 %4, i32 %3)
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this1, i32 0, i32 1
  %5 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %5, i32* %m_heap_size, align 4, !tbaa !235
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm512EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.299"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.299"*, align 8
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.299"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.299"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.299"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.299"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.299"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %0, i32 %4, i32 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*, align 8
  %i.addr = alloca i32, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %this_exec to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 4, i32 4, i1 false), !tbaa.struct !151
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %this1, i32 0, i32 1
  %2 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %2, i32* %m_index, align 4, !tbaa !241
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.341"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.338"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.340"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.330"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t3, %"class.thrust::zip_iterator.216"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %2 = load i64*, i64** %t2.addr, align 8
  %3 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_(%"class.thrust::tuple.330"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %1, i64* dereferenceable(8) %2, %"class.thrust::zip_iterator.216"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %this, %"class.thrust::tuple.330"* dereferenceable(56) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"*, align 8
  %args.addr = alloca %"class.thrust::tuple.330"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.330"* %args, %"class.thrust::tuple.330"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.329", %"class.thrust::system::cuda::detail::bulk_::detail::closure.329"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.330"*, %"class.thrust::tuple.330"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.330"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.330"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 56, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_(%"class.thrust::tuple.330"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.330"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.330"* %this, %"class.thrust::tuple.330"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t3, %"class.thrust::zip_iterator.216"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.330"*, %"class.thrust::tuple.330"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.330"* %this1 to %"struct.thrust::detail::cons.331"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.331"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %2, i64* dereferenceable(8) %3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.331"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t2, i64* dereferenceable(8) %t3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.331"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.331"* %this, %"struct.thrust::detail::cons.331"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t2, %"class.thrust::zip_iterator.221"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t4, %"class.thrust::zip_iterator.216"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.331"*, %"struct.thrust::detail::cons.331"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.331", %"struct.thrust::detail::cons.331"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.331", %"struct.thrust::detail::cons.331"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.332"* %tail, %"class.thrust::zip_iterator.221"* dereferenceable(16) %3, i64* dereferenceable(8) %4, %"class.thrust::zip_iterator.216"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.332"* %this, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.332"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.332"* %this, %"struct.thrust::detail::cons.332"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t3, %"class.thrust::zip_iterator.216"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.332"*, %"struct.thrust::detail::cons.332"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.332", %"struct.thrust::detail::cons.332"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.221"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.221"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.332", %"struct.thrust::detail::cons.332"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.333"* %tail, i64* dereferenceable(8) %3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.333"* %this, i64* dereferenceable(8) %t1, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.333"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.333"* %this, %"struct.thrust::detail::cons.333"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t2, %"class.thrust::zip_iterator.216"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.333"*, %"struct.thrust::detail::cons.333"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.333", %"struct.thrust::detail::cons.333"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !243
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.333", %"struct.thrust::detail::cons.333"* %this1, i32 0, i32 1
  %2 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t2.addr, align 8
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.334"* %tail, %"class.thrust::zip_iterator.216"* dereferenceable(16) %2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.334"* %this, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.334"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t2.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.334"* %this, %"struct.thrust::detail::cons.334"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.216"* %t1, %"class.thrust::zip_iterator.216"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.334"*, %"struct.thrust::detail::cons.334"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.334", %"struct.thrust::detail::cons.334"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.216"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.216"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.334", %"struct.thrust::detail::cons.334"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.335"* %tail, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.335"* %this, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.335"*, align 8
  %t1.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.335"* %this, %"struct.thrust::detail::cons.335"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.335"*, %"struct.thrust::detail::cons.335"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.335", %"struct.thrust::detail::cons.335"* %this9, i32 0, i32 0
  %9 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t1.addr, align 8
  %10 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %head to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* noalias sret %agg.result, %struct.CUstream_st* %s, i64 %exec.coerce0, i32 %exec.coerce1, i64 %num_groups) #8 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %coerce = alloca { i64, i32 }, align 4
  %s.addr = alloca %struct.CUstream_st*, align 8
  %num_groups.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp1 to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %7 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.tmp, i64 %10, i32 %12, i64 %6)
  %13 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %struct.CUstream_st* %13, %struct.CUevent_st* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm512ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %heap_size) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %heap_size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  %0 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %conv = trunc i64 %0 to i32
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %1 = load i32, i32* %coerce.dive, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %retval, i32 %conv, i32 %1, i32 2147483647)
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  %4 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* noalias sret %agg.result, i64 %exec.coerce0, i32 %exec.coerce1, i64 %size) #0 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i64 %size, i64* %size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %size.addr, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.result, i32 %conv, i64 %10, i32 %12, i32 2147483647)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %exec, %struct.CUstream_st* %s, %struct.CUevent_st* %be) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, align 8
  %s.addr = alloca %struct.CUstream_st*, align 8
  %be.addr = alloca %struct.CUevent_st*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %be, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.295"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 0
  store i8 1, i8* %stream_valid, align 8, !tbaa !227
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %e to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  %s2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 2
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %2, %struct.CUstream_st** %s2, align 8, !tbaa !230
  %be3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.295", %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %this1, i32 0, i32 3
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %3, %struct.CUevent_st** %be3, align 8, !tbaa !231
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6system4cuda6detail21aligned_decompositionIlE4sizeEv(%"class.thrust::system::cuda::detail::aligned_decomposition"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %this.addr, align 8
  %m_num_partitions = getelementptr inbounds %"class.thrust::system::cuda::detail::aligned_decomposition", %"class.thrust::system::cuda::detail::aligned_decomposition"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_num_partitions, align 8, !tbaa !223
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE(%"class.thrust::detail::temporary_allocator.305"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.305"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.305"* %this, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.305"*, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.305"* %this1 to %"class.thrust::detail::tagged_allocator.306"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.306"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.305", %"class.thrust::detail::temporary_allocator.305"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cuda::detail::tag"* %call, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.305"* %this1 to %"class.thrust::detail::tagged_allocator.306"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev(%"class.thrust::detail::tagged_allocator.306"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_(%"struct.thrust::detail::no_throw_allocator.304"* %this, %"class.thrust::detail::temporary_allocator.305"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.305"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %this, %"struct.thrust::detail::no_throw_allocator.304"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.305"* %other, %"class.thrust::detail::temporary_allocator.305"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.304"* %this1 to %"class.thrust::detail::temporary_allocator.305"*
  %1 = load %"class.thrust::detail::temporary_allocator.305"*, %"class.thrust::detail::temporary_allocator.305"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.305"* %0, %"class.thrust::detail::temporary_allocator.305"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_(%"class.thrust::detail::contiguous_storage.303"* %this, i64 %n, %"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  %n.addr = alloca i64, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store %"struct.thrust::detail::no_throw_allocator.304"* %alloc, %"struct.thrust::detail::no_throw_allocator.304"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_(%"struct.thrust::detail::no_throw_allocator.304"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.311"* %agg.tmp, %"class.thrust::tuple.314"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  %1 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.308"* %m_begin, %"class.thrust::tuple.314"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !251
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.303"* %this1, i64 %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont3
  ret void

lpad:                                             ; preds = %invoke.cont3, %invoke.cont, %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.306"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.304"*)*)(%"struct.thrust::detail::no_throw_allocator.304"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev(%"class.thrust::detail::tagged_allocator.306"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.306"*, align 8
  store %"class.thrust::detail::tagged_allocator.306"* %this, %"class.thrust::detail::tagged_allocator.306"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.306"*, %"class.thrust::detail::tagged_allocator.306"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.302"* dereferenceable(24), i64) #1 comdat {
entry:
  %.addr = alloca %"class.thrust::detail::temporary_array.302"*, align 8
  %.addr1 = alloca i64, align 8
  store %"class.thrust::detail::temporary_array.302"* %0, %"class.thrust::detail::temporary_array.302"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr1, align 8, !tbaa !13
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.303"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.303"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.306"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.304"*)*)(%"struct.thrust::detail::no_throw_allocator.304"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.306"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.304"*)*)(%"struct.thrust::detail::no_throw_allocator.304"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.306"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.306"*, align 8
  store %"class.thrust::detail::tagged_allocator.306"* %this, %"class.thrust::detail::tagged_allocator.306"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.306"*, %"class.thrust::detail::tagged_allocator.306"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.305"* %this, %"class.thrust::detail::temporary_allocator.305"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.305"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.305"*, align 8
  store %"class.thrust::detail::temporary_allocator.305"* %this, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.305"* %other, %"class.thrust::detail::temporary_allocator.305"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.305"*, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.305"* %this1 to %"class.thrust::detail::tagged_allocator.306"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.306"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.305", %"class.thrust::detail::temporary_allocator.305"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.305"*, %"class.thrust::detail::temporary_allocator.305"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.305", %"class.thrust::detail::temporary_allocator.305"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::tag"* %ref, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_(%"struct.thrust::detail::no_throw_allocator.304"* %this, %"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %this, %"struct.thrust::detail::no_throw_allocator.304"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.304"* %0, %"struct.thrust::detail::no_throw_allocator.304"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.304"* %this1 to %"class.thrust::detail::temporary_allocator.305"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.304"* %2 to %"class.thrust::detail::temporary_allocator.305"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.305"* %1, %"class.thrust::detail::temporary_allocator.305"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.311"* %this, %"class.thrust::tuple.314"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.311"*, align 8
  %other.addr = alloca %"class.thrust::tuple.314"*, align 8
  store %"class.thrust::pointer.311"* %this, %"class.thrust::pointer.311"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.314"* %other, %"class.thrust::tuple.314"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.311"* %this1 to %"class.thrust::iterator_adaptor.312"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_(%"class.thrust::iterator_adaptor.312"* %0, %"class.thrust::tuple.314"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.308"* %this, %"class.thrust::tuple.314"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.308"* %this, %"class.thrust::detail::normal_iterator.308"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.308"* %this2 to %"class.thrust::iterator_adaptor.309"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_(%"class.thrust::iterator_adaptor.309"* %0, %"class.thrust::pointer.311"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.303"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.311", align 8
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.314"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call, %"class.thrust::tuple.314"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %2 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.308"* %ref.tmp, %"class.thrust::tuple.314"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.308"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.308"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !251
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.311"* %agg.tmp7, %"class.thrust::tuple.314"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive8, i32 0, i32 0
  %6 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.308"* %ref.tmp6, %"class.thrust::tuple.314"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.308"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.308"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !251
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_(%"class.thrust::iterator_adaptor.312"* %this, %"class.thrust::tuple.314"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.312"*, align 8
  %iter.addr = alloca %"class.thrust::tuple.314"**, align 8
  store %"class.thrust::iterator_adaptor.312"* %this, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.314"** %iter, %"class.thrust::tuple.314"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.312"*, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.312"* %this1 to %"class.thrust::iterator_facade.313"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::tuple.314"**, %"class.thrust::tuple.314"*** %iter.addr, align 8
  %2 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %1, align 8, !tbaa !1
  store %"class.thrust::tuple.314"* %2, %"class.thrust::tuple.314"** %m_iterator, align 8, !tbaa !255
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_(%"class.thrust::iterator_adaptor.309"* %this, %"class.thrust::pointer.311"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.309"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.311"*, align 8
  store %"class.thrust::iterator_adaptor.309"* %this, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.311"* %iter, %"class.thrust::pointer.311"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.309"*, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.309"* %this1 to %"class.thrust::iterator_facade.310"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.311"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.311"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.314"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  %2 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.314"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.304"* %0 to %"class.thrust::detail::temporary_allocator.305"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.314"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.305"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  %3 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.314"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.305"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.305"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.342", align 8
  %ref.tmp = alloca %"struct.thrust::pair.343", align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.305"* %this, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.305"*, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.342"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.305"* %this1)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.343"* %ref.tmp to { %"class.thrust::tuple.314"*, i64 }*
  %4 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call2, 0
  store %"class.thrust::tuple.314"* %5, %"class.thrust::tuple.314"** %4, align 8
  %6 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.342"* %result, %"struct.thrust::pair.343"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.342", %"struct.thrust::pair.342"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !257
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.342", %"struct.thrust::pair.342"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.311"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  %13 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.305"* %this1, %"class.thrust::tuple.314"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.342"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.342", %"struct.thrust::pair.342"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.311"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.311"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.342"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive11, i32 0, i32 0
  %25 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive12, align 8
  ret %"class.thrust::tuple.314"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.343", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.343", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.343"* %agg.tmp to { %"class.thrust::tuple.314"*, i64 }*
  %4 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call2, 0
  store %"class.thrust::tuple.314"* %5, %"class.thrust::tuple.314"** %4, align 8
  %6 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.343"* %agg.tmp to { %"class.thrust::tuple.314"*, i64 }*
  %9 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %8, i32 0, i32 0
  %10 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %9, align 8
  %11 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_(%"class.thrust::tuple.314"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.343"* %retval to { %"class.thrust::tuple.314"*, i64 }*
  %14 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call3, 0
  store %"class.thrust::tuple.314"* %15, %"class.thrust::tuple.314"** %14, align 8
  %16 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.343"* %retval to { %"class.thrust::tuple.314"*, i64 }*
  %19 = load { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %18, align 8
  ret { %"class.thrust::tuple.314"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.305"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.305"*, align 8
  store %"class.thrust::detail::temporary_allocator.305"* %this, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.305"*, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.305", %"class.thrust::detail::temporary_allocator.305"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cuda::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.342"* %this, %"struct.thrust::pair.343"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.342"*, align 8
  %p.addr = alloca %"struct.thrust::pair.343"*, align 8
  store %"struct.thrust::pair.342"* %this, %"struct.thrust::pair.342"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.343"* %p, %"struct.thrust::pair.343"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.342"*, %"struct.thrust::pair.342"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.342", %"struct.thrust::pair.342"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.343"*, %"struct.thrust::pair.343"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.343", %"struct.thrust::pair.343"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.311"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.342", %"struct.thrust::pair.342"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.343"*, %"struct.thrust::pair.343"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.343", %"struct.thrust::pair.343"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !260
  store i64 %4, i64* %second, align 8, !tbaa !257
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.305"* %this, %"class.thrust::tuple.314"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.305"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.305"* %this, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.305"*, %"class.thrust::detail::temporary_allocator.305"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.305"* %this2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %3 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0, %"class.thrust::tuple.314"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_(%"class.thrust::tuple.314"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.343", align 8
  %p = alloca %"struct.thrust::pair.343", align 8
  %ptr = alloca %"class.thrust::pointer.311", align 8
  %0 = bitcast %"struct.thrust::pair.343"* %p to { %"class.thrust::tuple.314"*, i64 }*
  %1 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %0, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce0, %"class.thrust::tuple.314"** %1, align 8
  %2 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.311"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.343", %"struct.thrust::pair.343"* %p, i32 0, i32 0
  %call = call %"class.thrust::tuple.314"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.311"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.311"* %ptr, %"class.thrust::tuple.314"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.343", %"struct.thrust::pair.343"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.343"* %retval, %"class.thrust::pointer.311"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.311"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.343"* %retval to { %"class.thrust::tuple.314"*, i64 }*
  %6 = load { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %5, align 8
  ret { %"class.thrust::tuple.314"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.343", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.311"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.314"* @_ZN6thrust6mallocINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  %call2 = call %"class.thrust::tuple.314"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.311"* %ptr)
  %tobool = icmp ne %"class.thrust::tuple.314"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.311"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %7 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  %call5 = call { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_(%"class.thrust::tuple.314"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.343"* %retval to { %"class.thrust::tuple.314"*, i64 }*
  %9 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call5, 0
  store %"class.thrust::tuple.314"* %10, %"class.thrust::tuple.314"** %9, align 8
  %11 = getelementptr inbounds { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"class.thrust::tuple.314"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.311"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.343"* %retval to { %"class.thrust::tuple.314"*, i64 }*
  %15 = load { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %14, align 8
  ret { %"class.thrust::tuple.314"*, i64 } %15
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.311"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.311"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  store %"class.thrust::pointer.311"* %ptr, %"class.thrust::pointer.311"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  %3 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  %call = call %"class.thrust::tuple.314"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_(%"class.thrust::tuple.314"* %3)
  ret %"class.thrust::tuple.314"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.343"* %this, %"class.thrust::pointer.311"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.343"*, align 8
  %x.addr = alloca %"class.thrust::pointer.311"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.343"* %this, %"struct.thrust::pair.343"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.311"* %x, %"class.thrust::pointer.311"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.343"*, %"struct.thrust::pair.343"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.343", %"struct.thrust::pair.343"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.343", %"struct.thrust::pair.343"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !260
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_(%"class.thrust::tuple.314"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %ptr.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  %call = call %"class.thrust::tuple.314"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.311"* %ptr)
  ret %"class.thrust::tuple.314"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.311"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.311"*, align 8
  store %"class.thrust::pointer.311"* %this, %"class.thrust::pointer.311"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.311"* %this1 to %"class.thrust::iterator_adaptor.312"*
  %call = call dereferenceable(8) %"class.thrust::tuple.314"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.312"* %0)
  %1 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %call, align 8, !tbaa !1
  ret %"class.thrust::tuple.314"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::tuple.314"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.312"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.312"*, align 8
  store %"class.thrust::iterator_adaptor.312"* %this, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.312"*, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.314"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6mallocINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"class.thrust::tuple.314"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.311", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::tuple.314"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"class.thrust::tuple.314"* @_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call2, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  %call4 = call %"class.thrust::tuple.314"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.311"* dereferenceable(8) %ref.tmp)
  store %"class.thrust::tuple.314"* %call4, %"class.thrust::tuple.314"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.311"* %retval, %"class.thrust::tuple.314"* %4)
  %5 = bitcast %"class.thrust::tuple.314"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive5, i32 0, i32 0
  %6 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive6, align 8
  ret %"class.thrust::tuple.314"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"class.thrust::tuple.314"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_(%"class.thrust::tuple.314"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.343", align 8
  %x = alloca %"class.thrust::pointer.311", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %x.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.343"* %retval, %"class.thrust::pointer.311"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.343"* %retval to { %"class.thrust::tuple.314"*, i64 }*
  %1 = load { %"class.thrust::tuple.314"*, i64 }, { %"class.thrust::tuple.314"*, i64 }* %0, align 8
  ret { %"class.thrust::tuple.314"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 8, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to %"class.thrust::tuple.314"*
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.311"* %retval, %"class.thrust::tuple.314"* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %6 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  ret %"class.thrust::tuple.314"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.314"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"class.thrust::tuple.314"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"class.thrust::tuple.314"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"class.thrust::tuple.314"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.314"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.311", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %ptr.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.311"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::tuple.314"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), %"class.thrust::tuple.314"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.311", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %ptr.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call %"class.thrust::tuple.314"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.311"* dereferenceable(8) %ptr)
  %1 = bitcast %"class.thrust::tuple.314"* %call to i8*
  %call2 = call i32 @cudaFree(i8* %1)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.303"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.311", align 8
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.303"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.308"* %m_begin to %"class.thrust::iterator_adaptor.309"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.311"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.309"* %0)
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.303"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  %3 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %m_allocator, %"class.thrust::tuple.314"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.311"* %agg.tmp6, %"class.thrust::tuple.314"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive7, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.308"* %ref.tmp, %"class.thrust::tuple.314"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.308"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.308"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !251
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.303"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !251
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a, %"class.thrust::tuple.314"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %0, %"class.thrust::tuple.314"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.311"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.309"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.309"*, align 8
  store %"class.thrust::iterator_adaptor.309"* %this, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.309"*, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.311"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a, %"class.thrust::tuple.314"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.304"* %0, %"class.thrust::tuple.314"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.304"* %this, %"class.thrust::tuple.314"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %this, %"struct.thrust::detail::no_throw_allocator.304"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.304"* %this2 to %"class.thrust::detail::temporary_allocator.305"*
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.305"* %0, %"class.thrust::tuple.314"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 88, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 88, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %a2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %a3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %a3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %ref.tmp = alloca %"class.thrust::tuple.345", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %a2, %"class.thrust::zip_iterator.221"** %a2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %a3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %a4, %"class.thrust::detail::normal_iterator.308"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %a2.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.345"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %agg.result, %"class.thrust::tuple.345"* dereferenceable(80) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 0
  %0 = load i8, i8* %stream_valid, align 8, !tbaa !262, !range !77
  %tobool = trunc i8 %0 to i1
  ret i1 %tobool
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.result to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %e to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8
  %s = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 2
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !265
  ret %struct.CUstream_st* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8
  %be = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 3
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %be, align 8, !tbaa !266
  ret %struct.CUevent_st* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 88, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %task to i8*
  call void @llvm.lifetime.start(i64 112, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 88, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 112, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %task to i8*
  call void @llvm.lifetime.end(i64 112, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.351"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_size, align 4, !tbaa !267
  ret i32 %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"** %this.addr, align 8
  ret i32 128
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"** %this.addr, align 8
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_heap_size, align 4, !tbaa !270
  ret i32 %0
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !271
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 112, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %tmp2 = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %size.addr, align 4, !tbaa !11
  %1 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive1, align 4
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEE4makeEiiS8_i(i32 %0, i32 %1, i32 %5, i32 %4)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %6 = bitcast { i64, i32 }* %tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 12, i32 4, i1 false)
  %8 = bitcast { i64, i32 }* %tmp2 to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = load { i64, i32 }, { i64, i32 }* %tmp2, align 8
  ret { i64, i32 } %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %this, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322"*, align 8
  %i.addr = alloca i32, align 4
  store %"class.thrust::system::cuda::detail::bulk_::agent.322"* %this, %"class.thrust::system::cuda::detail::bulk_::agent.322"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::agent.322"*, %"class.thrust::system::cuda::detail::bulk_::agent.322"** %this.addr, align 8
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %this1, i32 0, i32 0
  %0 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %0, i32* %m_index, align 4, !tbaa !273
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.352"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat align 2 {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %this, i32 %size, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"*, align 8
  %size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"** %this.addr, align 8, !tbaa !1
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"** %this.addr, align 8
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %5 = load i32, i32* %size.addr, align 4, !tbaa !11
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 12, i32 4, i1 false)
  %8 = load i32, i32* %i.addr, align 4, !tbaa !11
  %9 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %10 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 12, i32 4, i1 false)
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %12 = load i64, i64* %11, align 4
  %13 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %14 = load i32, i32* %13, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %4, i32 %5, i64 %12, i32 %14, i32 %8)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this, i32 %sz, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*, align 8
  %sz.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"** %this.addr, align 8, !tbaa !1
  store i32 %sz, i32* %sz.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this1, i32 0, i32 1
  %6 = load i32, i32* %sz.addr, align 4, !tbaa !11
  store i32 %6, i32* %m_size, align 4, !tbaa !267
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %this1, i32 0, i32 2
  %7 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %7, i32* %m_index, align 4, !tbaa !275
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEE4makeEiiS8_i(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive1, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %retval, i32 %0, i32 %4, i32 %3)
  %5 = bitcast { i64, i32 }* %tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this, i32 %heap_size, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"*, align 8
  %heap_size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"** %this.addr, align 8, !tbaa !1
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this1 to %"class.thrust::system::cuda::detail::bulk_::parallel_group.320"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm5EEELm128EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.320"* %0, i32 %4, i32 %3)
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this1, i32 0, i32 1
  %5 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %5, i32* %m_heap_size, align 4, !tbaa !270
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm5EEELm128EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.320"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.320"*, align 8
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.320"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.320"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.320"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.320"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.320"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %0, i32 %4, i32 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*, align 8
  %i.addr = alloca i32, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %this_exec to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.322"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 4, i32 4, i1 false), !tbaa.struct !151
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %this1, i32 0, i32 1
  %2 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %2, i32* %m_index, align 4, !tbaa !276
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 88, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.356"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.353"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 112, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 112, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 112, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.355"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.345"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_(%"class.thrust::tuple.345"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %this, %"class.thrust::tuple.345"* dereferenceable(80) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"*, align 8
  %args.addr = alloca %"class.thrust::tuple.345"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.345"* %args, %"class.thrust::tuple.345"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.344", %"class.thrust::system::cuda::detail::bulk_::detail::closure.344"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.345"*, %"class.thrust::tuple.345"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.345"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.345"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 80, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_(%"class.thrust::tuple.345"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.345"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.345"* %this, %"class.thrust::tuple.345"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.345"*, %"class.thrust::tuple.345"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.345"* %this1 to %"struct.thrust::detail::cons.346"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.346"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.346"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.346"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.346"* %this, %"struct.thrust::detail::cons.346"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t2, %"class.thrust::zip_iterator.221"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t4, %"class.thrust::detail::normal_iterator.308"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.346"*, %"struct.thrust::detail::cons.346"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.346", %"struct.thrust::detail::cons.346"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.346", %"struct.thrust::detail::cons.346"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t2.addr, align 8
  %4 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.347"* %tail, %"class.thrust::zip_iterator.221"* dereferenceable(16) %3, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %4, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.347"* %this, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.347"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.347"* %this, %"struct.thrust::detail::cons.347"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.347"*, %"struct.thrust::detail::cons.347"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.347", %"struct.thrust::detail::cons.347"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.221"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.221"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.347", %"struct.thrust::detail::cons.347"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.348"* %tail, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.348"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.348"*, align 8
  %t1.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.348"* %this, %"struct.thrust::detail::cons.348"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t2, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.348"*, %"struct.thrust::detail::cons.348"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.348", %"struct.thrust::detail::cons.348"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %head to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false), !tbaa.struct !220
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.348", %"struct.thrust::detail::cons.348"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.349"* %tail, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.349"* %this, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.349"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t2.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.349"* %this, %"struct.thrust::detail::cons.349"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.308"* %t1, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.349"*, %"struct.thrust::detail::cons.349"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.349", %"struct.thrust::detail::cons.349"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.308"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.308"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.349", %"struct.thrust::detail::cons.349"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.335"* %tail, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* noalias sret %agg.result, %struct.CUstream_st* %s, i64 %exec.coerce0, i32 %exec.coerce1, i64 %num_groups) #8 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %coerce = alloca { i64, i32 }, align 4
  %s.addr = alloca %struct.CUstream_st*, align 8
  %num_groups.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp1 to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %7 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp, i64 %10, i32 %12, i64 %6)
  %13 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %struct.CUstream_st* %13, %struct.CUevent_st* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm128ELm5EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %heap_size) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %heap_size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  %0 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %conv = trunc i64 %0 to i32
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp, i32 0, i32 0
  %1 = load i32, i32* %coerce.dive, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %retval, i32 %conv, i32 %1, i32 2147483647)
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  %4 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, i64 %exec.coerce0, i32 %exec.coerce1, i64 %size) #0 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i64 %size, i64* %size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %size.addr, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.result, i32 %conv, i64 %10, i32 %12, i32 2147483647)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %exec, %struct.CUstream_st* %s, %struct.CUevent_st* %be) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, align 8
  %s.addr = alloca %struct.CUstream_st*, align 8
  %be.addr = alloca %struct.CUevent_st*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %be, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.316"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 0
  store i8 1, i8* %stream_valid, align 8, !tbaa !262
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %e to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  %s2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 2
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %2, %struct.CUstream_st** %s2, align 8, !tbaa !265
  %be3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.316", %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %this1, i32 0, i32 3
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %3, %struct.CUevent_st** %be3, align 8, !tbaa !266
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %a2, i64* dereferenceable(8) %a3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %a3.addr = alloca i64*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %ref.tmp = alloca %"class.thrust::tuple.359", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %a2, %"class.thrust::detail::normal_iterator.308"** %a2.addr, align 8, !tbaa !7
  store i64* %a3, i64** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %a4, %"class.thrust::detail::normal_iterator.308"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %a2.addr, align 8
  %2 = load i64*, i64** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_(%"class.thrust::tuple.359"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %1, i64* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %agg.result, %"class.thrust::tuple.359"* dereferenceable(40) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 0
  %0 = load i8, i8* %stream_valid, align 8, !tbaa !278, !range !77
  %tobool = trunc i8 %0 to i1
  ret i1 %tobool
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 48, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.result to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %e to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8
  %s = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 2
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !281
  ret %struct.CUstream_st* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8
  %be = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 3
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %be, align 8, !tbaa !282
  ret %struct.CUevent_st* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 48, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 48, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.363"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_size, align 4, !tbaa !283
  ret i32 %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"** %this.addr, align 8
  ret i32 256
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"** %this.addr, align 8
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_heap_size, align 4, !tbaa !286
  ret i32 %0
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !287
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %tmp2 = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %size.addr, align 4, !tbaa !11
  %1 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive1, align 4
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEE4makeEiiS8_i(i32 %0, i32 %1, i32 %5, i32 %4)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %6 = bitcast { i64, i32 }* %tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 12, i32 4, i1 false)
  %8 = bitcast { i64, i32 }* %tmp2 to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = load { i64, i32 }, { i64, i32 }* %tmp2, align 8
  ret { i64, i32 } %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.364"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat align 2 {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %this, i32 %size, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"*, align 8
  %size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"** %this.addr, align 8, !tbaa !1
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"** %this.addr, align 8
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %5 = load i32, i32* %size.addr, align 4, !tbaa !11
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 12, i32 4, i1 false)
  %8 = load i32, i32* %i.addr, align 4, !tbaa !11
  %9 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %10 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 12, i32 4, i1 false)
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %12 = load i64, i64* %11, align 4
  %13 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %14 = load i32, i32* %13, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %4, i32 %5, i64 %12, i32 %14, i32 %8)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this, i32 %sz, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*, align 8
  %sz.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"** %this.addr, align 8, !tbaa !1
  store i32 %sz, i32* %sz.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this1, i32 0, i32 1
  %6 = load i32, i32* %sz.addr, align 4, !tbaa !11
  store i32 %6, i32* %m_size, align 4, !tbaa !283
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %this1, i32 0, i32 2
  %7 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %7, i32* %m_index, align 4, !tbaa !289
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEE4makeEiiS8_i(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive1, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %retval, i32 %0, i32 %4, i32 %3)
  %5 = bitcast { i64, i32 }* %tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this, i32 %heap_size, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"*, align 8
  %heap_size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"** %this.addr, align 8, !tbaa !1
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this1 to %"class.thrust::system::cuda::detail::bulk_::parallel_group.327"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm256EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.327"* %0, i32 %4, i32 %3)
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this1, i32 0, i32 1
  %5 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %5, i32* %m_heap_size, align 4, !tbaa !286
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm256EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.327"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.327"*, align 8
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.327"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.327"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.327"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.327"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.327"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %0, i32 %4, i32 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*, align 8
  %i.addr = alloca i32, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %this_exec to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 4, i32 4, i1 false), !tbaa.struct !151
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %this1, i32 0, i32 1
  %2 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %2, i32* %m_index, align 4, !tbaa !290
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.368"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.365"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.367"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_(%"class.thrust::tuple.359"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t1, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8
  %2 = load i64*, i64** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_(%"class.thrust::tuple.359"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %1, i64* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %this, %"class.thrust::tuple.359"* dereferenceable(40) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"*, align 8
  %args.addr = alloca %"class.thrust::tuple.359"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.359"* %args, %"class.thrust::tuple.359"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.358", %"class.thrust::system::cuda::detail::bulk_::detail::closure.358"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.359"*, %"class.thrust::tuple.359"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.359"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.359"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_(%"class.thrust::tuple.359"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.359"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.359"* %this, %"class.thrust::tuple.359"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t1, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.359"*, %"class.thrust::tuple.359"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.359"* %this1 to %"struct.thrust::detail::cons.360"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.360"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %2, i64* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.360"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t2, i64* dereferenceable(8) %t3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.360"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.360"* %this, %"struct.thrust::detail::cons.360"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t2, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t4, %"class.thrust::detail::normal_iterator.308"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.360"*, %"struct.thrust::detail::cons.360"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.360", %"struct.thrust::detail::cons.360"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.360", %"struct.thrust::detail::cons.360"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.361"* %tail, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, i64* dereferenceable(8) %4, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.361"* %this, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.361"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.361"* %this, %"struct.thrust::detail::cons.361"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.308"* %t1, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.361"*, %"struct.thrust::detail::cons.361"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.361", %"struct.thrust::detail::cons.361"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.308"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.308"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.361", %"struct.thrust::detail::cons.361"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.362"* %tail, i64* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.362"* %this, i64* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.362"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.362"* %this, %"struct.thrust::detail::cons.362"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t2, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.362"*, %"struct.thrust::detail::cons.362"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.362", %"struct.thrust::detail::cons.362"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !292
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.362", %"struct.thrust::detail::cons.362"* %this1, i32 0, i32 1
  %2 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.349"* %tail, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* noalias sret %agg.result, %struct.CUstream_st* %s, i64 %exec.coerce0, i32 %exec.coerce1, i64 %num_groups) #8 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %coerce = alloca { i64, i32 }, align 4
  %s.addr = alloca %struct.CUstream_st*, align 8
  %num_groups.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp1 to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %7 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.tmp, i64 %10, i32 %12, i64 %6)
  %13 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %struct.CUstream_st* %13, %struct.CUevent_st* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm256ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %heap_size) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %heap_size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  %0 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %conv = trunc i64 %0 to i32
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %1 = load i32, i32* %coerce.dive, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %retval, i32 %conv, i32 %1, i32 2147483647)
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  %4 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* noalias sret %agg.result, i64 %exec.coerce0, i32 %exec.coerce1, i64 %size) #0 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i64 %size, i64* %size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %size.addr, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.result, i32 %conv, i64 %10, i32 %12, i32 2147483647)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %exec, %struct.CUstream_st* %s, %struct.CUevent_st* %be) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, align 8
  %s.addr = alloca %struct.CUstream_st*, align 8
  %be.addr = alloca %struct.CUevent_st*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %be, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.323"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 0
  store i8 1, i8* %stream_valid, align 8, !tbaa !278
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %e to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  %s2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 2
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %2, %struct.CUstream_st** %s2, align 8, !tbaa !281
  %be3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.323", %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %this1, i32 0, i32 3
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %3, %struct.CUevent_st** %be3, align 8, !tbaa !282
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 104, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 104, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %a2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %a3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %a4, %"class.thrust::zip_iterator.216"* dereferenceable(16) %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %a6) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %a3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %a5.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %a6.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %ref.tmp = alloca %"class.thrust::tuple.371", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %a2, %"class.thrust::zip_iterator.221"** %a2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %a3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %a4, %"class.thrust::detail::normal_iterator.308"** %a4.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %a5, %"class.thrust::zip_iterator.216"** %a5.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %a6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a6.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %a2.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %a4.addr, align 8
  %4 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %a5.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %a6.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_(%"class.thrust::tuple.371"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %agg.result, %"class.thrust::tuple.371"* dereferenceable(96) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 104, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 104, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %task to i8*
  call void @llvm.lifetime.start(i64 128, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 104, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 128, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %task to i8*
  call void @llvm.lifetime.end(i64 128, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.376"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 104, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !295
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 128, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.377"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 104, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.381"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.378"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 128, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 128, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 128, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.380"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_(%"class.thrust::tuple.371"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t5) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t4, %"class.thrust::zip_iterator.216"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %4 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t4.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_(%"class.thrust::tuple.371"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %this, %"class.thrust::tuple.371"* dereferenceable(96) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"*, align 8
  %args.addr = alloca %"class.thrust::tuple.371"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.371"* %args, %"class.thrust::tuple.371"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.370", %"class.thrust::system::cuda::detail::bulk_::detail::closure.370"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.371"*, %"class.thrust::tuple.371"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.371"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.371"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 96, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_(%"class.thrust::tuple.371"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t5) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.371"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.371"* %this, %"class.thrust::tuple.371"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t4, %"class.thrust::zip_iterator.216"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.371"*, %"class.thrust::tuple.371"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.371"* %this1 to %"struct.thrust::detail::cons.372"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.372"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %4, %"class.thrust::zip_iterator.216"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.372"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t4, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.372"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t5.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t6.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.372"* %this, %"struct.thrust::detail::cons.372"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.221"* %t2, %"class.thrust::zip_iterator.221"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t4, %"class.thrust::detail::normal_iterator.308"** %t4.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t5, %"class.thrust::zip_iterator.216"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.372"*, %"struct.thrust::detail::cons.372"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.372", %"struct.thrust::detail::cons.372"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.372", %"struct.thrust::detail::cons.372"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t2.addr, align 8
  %4 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t4.addr, align 8
  %6 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t5.addr, align 8
  %7 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.373"* %tail, %"class.thrust::zip_iterator.221"* dereferenceable(16) %3, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %4, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %5, %"class.thrust::zip_iterator.216"* dereferenceable(16) %6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.373"* %this, %"class.thrust::zip_iterator.221"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.373"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.373"* %this, %"struct.thrust::detail::cons.373"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.221"* %t1, %"class.thrust::zip_iterator.221"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t3, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t4, %"class.thrust::zip_iterator.216"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.373"*, %"struct.thrust::detail::cons.373"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.373", %"struct.thrust::detail::cons.373"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.221"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.221"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.373", %"struct.thrust::detail::cons.373"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.374"* %tail, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %4, %"class.thrust::zip_iterator.216"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.374"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t2, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.374"*, align 8
  %t1.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.374"* %this, %"struct.thrust::detail::cons.374"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %t2, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t3, %"class.thrust::zip_iterator.216"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.374"*, %"struct.thrust::detail::cons.374"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.374", %"struct.thrust::detail::cons.374"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %head to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false), !tbaa.struct !220
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.374", %"struct.thrust::detail::cons.374"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.375"* %tail, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3, %"class.thrust::zip_iterator.216"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.375"* %this, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %t1, %"class.thrust::zip_iterator.216"* dereferenceable(16) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.375"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.375"* %this, %"struct.thrust::detail::cons.375"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.308"* %t1, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.216"* %t2, %"class.thrust::zip_iterator.216"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.375"*, %"struct.thrust::detail::cons.375"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.375", %"struct.thrust::detail::cons.375"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.308"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.308"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.375", %"struct.thrust::detail::cons.375"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %t2.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.334"* %tail, %"class.thrust::zip_iterator.216"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_(%"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::tuple.314"* %first.coerce, %"class.thrust::tuple.314"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  store %"class.thrust::tuple.314"* %first.coerce, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive6, i32 0, i32 0
  store %"class.thrust::tuple.314"* %last.coerce, %"class.thrust::tuple.314"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.308"* %first to %"class.thrust::iterator_adaptor.309"*
  %call = call dereferenceable(8) %"class.thrust::pointer.311"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.309"* %0)
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.308"* %last to %"class.thrust::iterator_facade.310"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.308"* %first to %"class.thrust::iterator_facade.310"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_(%"class.thrust::iterator_facade.310"* dereferenceable(1) %3, %"class.thrust::iterator_facade.310"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive10, i32 0, i32 0
  %5 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %m_allocator, %"class.thrust::tuple.314"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.303"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.303"*, align 8
  store %"class.thrust::detail::contiguous_storage.303"* %this, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.303"*, %"class.thrust::detail::contiguous_storage.303"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.303", %"class.thrust::detail::contiguous_storage.303"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.308"* %m_begin to %"class.thrust::iterator_facade.310"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.303"* %this1)
  %call2 = call %"class.thrust::tuple.314"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE(%"class.thrust::iterator_facade.310"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive4, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call2, %"class.thrust::tuple.314"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive8, i32 0, i32 0
  %1 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive9, align 8
  ret %"class.thrust::tuple.314"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a, %"class.thrust::tuple.314"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %0, %"class.thrust::tuple.314"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_(%"class.thrust::iterator_facade.310"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.310"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.310"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.310"*, align 8
  store %"class.thrust::iterator_facade.310"* %lhs, %"class.thrust::iterator_facade.310"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.310"* %rhs, %"class.thrust::iterator_facade.310"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.310"*, %"class.thrust::iterator_facade.310"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.310"* %0 to %"class.thrust::detail::normal_iterator.308"*
  %2 = load %"class.thrust::iterator_facade.310"*, %"class.thrust::iterator_facade.310"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.310"* %2 to %"class.thrust::detail::normal_iterator.308"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_(%"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a, %"class.thrust::tuple.314"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.311", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.311", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %p.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.311"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %5 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  %call5 = call %"class.thrust::tuple.314"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"class.thrust::tuple.314"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive6, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call5, %"class.thrust::tuple.314"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.314"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %first = alloca %"class.thrust::pointer.311", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %first.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.311"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive4, i32 0, i32 0
  %5 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive5, align 8
  %call6 = call %"class.thrust::tuple.314"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::tuple.314"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive7, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call6, %"class.thrust::tuple.314"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive9, i32 0, i32 0
  %6 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive10, align 8
  ret %"class.thrust::tuple.314"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::tuple.314"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %first = alloca %"class.thrust::pointer.311", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %first.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive4, align 8
  %call = call %"class.thrust::tuple.314"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::tuple.314"* %4, i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive5, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call, %"class.thrust::tuple.314"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive7, i32 0, i32 0
  %5 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive8, align 8
  ret %"class.thrust::tuple.314"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::tuple.314"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %first = alloca %"class.thrust::pointer.311", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp5 = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp6 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce13 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp16 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp17 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp18 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp19 = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp20 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp25 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp28 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp31 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp32 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp33 = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp34 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp37 = alloca i32, align 4
  %agg.tmp.ensured40 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp41 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp46 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp47 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp48 = alloca %"class.thrust::pointer.311", align 8
  %agg.tmp49 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %first.coerce, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive2 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::pointer.311"* %agg.tmp5 to i8*
  %12 = bitcast %"class.thrust::pointer.311"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp6 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp5, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive7, i32 0, i32 0
  %16 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive8, align 8
  %call9 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::tuple.314"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call9, i64* %17, align 4
  %call10 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call11 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call11, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call12 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce13, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive14 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call12, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call12, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp16, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::pointer.311"* %agg.tmp19 to i8*
  %30 = bitcast %"class.thrust::pointer.311"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp20 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp19, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive21, i32 0, i32 0
  %34 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive22, align 8
  %call23 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp16, %"class.thrust::tuple.314"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp15 to i64*
  store i64 %call23, i64* %35, align 4
  %call24 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce13, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp15)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call26 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call26, i64* %ref.tmp25, align 8, !tbaa !13
  %call27 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp25)
  store i64 %call27, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call29 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call30 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp28, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call30)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp32 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::pointer.311"* %agg.tmp33 to i8*
  %45 = bitcast %"class.thrust::pointer.311"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp34 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp33, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive35, i32 0, i32 0
  %49 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive36, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp28, %"class.thrust::tuple.314"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call38 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call38, i32* %ref.tmp37, align 4, !tbaa !11
  %call39 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp37)
  store i32 %call39, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv42 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv43 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call44 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call44 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call45 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp41, i64 %conv42, i64 %conv43, i64 0, %struct.CUstream_st* %call45)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp47 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::pointer.311"* %agg.tmp48 to i8*
  %61 = bitcast %"class.thrust::pointer.311"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp49 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %agg.tmp48, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive50, i32 0, i32 0
  %65 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive51, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured40, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp41, %"class.thrust::tuple.314"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured40) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::pointer.311"* %first to %"class.thrust::iterator_facade.313"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call52 = call %"class.thrust::tuple.314"* @_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.313"* dereferenceable(1) %66, i64 %67)
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive53, i32 0, i32 0
  store %"class.thrust::tuple.314"* %call52, %"class.thrust::tuple.314"** %coerce.dive54, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive55, i32 0, i32 0
  %72 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive56, align 8
  ret %"class.thrust::tuple.314"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::tuple.314"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.311", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg2.coerce, %"class.thrust::tuple.314"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.311"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIaaEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::tuple.314"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.311", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg2.coerce, %"class.thrust::tuple.314"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.311"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIaaEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::tuple.314"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.311", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg2.coerce, %"class.thrust::tuple.314"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.311"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::tuple.314"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.311", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.314"* %arg2.coerce, %"class.thrust::tuple.314"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.311"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.313"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.311", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.313"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.311", align 8
  store %"class.thrust::iterator_facade.313"* %i, %"class.thrust::iterator_facade.313"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.311"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.313"*, %"class.thrust::iterator_facade.313"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.313"* %1 to %"class.thrust::pointer.311"*
  %3 = bitcast %"class.thrust::pointer.311"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.311"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.311"* %tmp to %"class.thrust::iterator_facade.313"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.311"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.313"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.311"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.311"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.311"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive, i32 0, i32 0
  %10 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive1, align 8
  ret %"class.thrust::tuple.314"* %10
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIaaEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.311"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.311"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.384", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %a2, %"class.thrust::pointer.311"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.384"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.311"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %agg.result, %"class.thrust::tuple.384"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.384"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.311"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %t1, %"class.thrust::pointer.311"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj(%"class.thrust::tuple.384"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.311"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %this, %"class.thrust::tuple.384"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"*, align 8
  %args.addr = alloca %"class.thrust::tuple.384"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.384"* %args, %"class.thrust::tuple.384"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.384"*, %"class.thrust::tuple.384"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.384"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.384"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj(%"class.thrust::tuple.384"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.311"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.384"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.384"* %this, %"class.thrust::tuple.384"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %t1, %"class.thrust::pointer.311"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.384"*, %"class.thrust::tuple.384"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.384"* %this1 to %"struct.thrust::detail::cons.385"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.385"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.311"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.385"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.311"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.385"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.385"* %this, %"struct.thrust::detail::cons.385"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %t2, %"class.thrust::pointer.311"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.385"*, %"struct.thrust::detail::cons.385"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.385", %"struct.thrust::detail::cons.385"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.385", %"struct.thrust::detail::cons.385"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.386"* %tail, %"class.thrust::pointer.311"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.386"* %this, %"class.thrust::pointer.311"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.386"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.386"* %this, %"struct.thrust::detail::cons.386"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.311"* %t1, %"class.thrust::pointer.311"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.386"*, %"struct.thrust::detail::cons.386"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.386", %"struct.thrust::detail::cons.386"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.386", %"struct.thrust::detail::cons.386"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIaaEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.311"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.311"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.395", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %a2, %"class.thrust::pointer.311"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.395"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.311"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %agg.result, %"class.thrust::tuple.395"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.395"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.311"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %t1, %"class.thrust::pointer.311"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl(%"class.thrust::tuple.395"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.311"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIaaEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %this, %"class.thrust::tuple.395"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"*, align 8
  %args.addr = alloca %"class.thrust::tuple.395"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.395"* %args, %"class.thrust::tuple.395"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.395"*, %"class.thrust::tuple.395"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.395"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.395"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIaaEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl(%"class.thrust::tuple.395"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.311"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.395"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.395"* %this, %"class.thrust::tuple.395"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %t1, %"class.thrust::pointer.311"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.395"*, %"class.thrust::tuple.395"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.395"* %this1 to %"struct.thrust::detail::cons.396"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.396"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.311"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.396"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.311"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.396"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.396"* %this, %"struct.thrust::detail::cons.396"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %t2, %"class.thrust::pointer.311"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.396"*, %"struct.thrust::detail::cons.396"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.396", %"struct.thrust::detail::cons.396"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.396", %"struct.thrust::detail::cons.396"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.397"* %tail, %"class.thrust::pointer.311"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.397"* %this, %"class.thrust::pointer.311"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.397"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.397"* %this, %"struct.thrust::detail::cons.397"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.311"* %t1, %"class.thrust::pointer.311"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.397"*, %"struct.thrust::detail::cons.397"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.397", %"struct.thrust::detail::cons.397"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.311"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.397", %"struct.thrust::detail::cons.397"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.398"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.394", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !297
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.399"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.394"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.403"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.400"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.402"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.387"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.383", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !299
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.388"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.383"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.392"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.389"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIaaEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIaaEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.391"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.311"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.313"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.313"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.313"* %this, %"class.thrust::iterator_facade.313"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.313"*, %"class.thrust::iterator_facade.313"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.311"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.313"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE(%"class.thrust::pointer.311"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.311"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.313"* %this1)
  ret %"class.thrust::pointer.311"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE(%"class.thrust::pointer.311"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.311"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.311"* %f, %"class.thrust::pointer.311"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.311"* %0 to %"class.thrust::iterator_adaptor.312"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl(%"class.thrust::iterator_adaptor.312"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.311"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.313"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.313"*, align 8
  store %"class.thrust::iterator_facade.313"* %this, %"class.thrust::iterator_facade.313"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.313"*, %"class.thrust::iterator_facade.313"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.313"* %this1 to %"class.thrust::pointer.311"*
  ret %"class.thrust::pointer.311"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl(%"class.thrust::iterator_adaptor.312"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.312"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.312"* %this, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.312"*, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %m_iterator, align 8, !tbaa !255
  %add.ptr = getelementptr inbounds %"class.thrust::tuple.314", %"class.thrust::tuple.314"* %1, i64 %0
  store %"class.thrust::tuple.314"* %add.ptr, %"class.thrust::tuple.314"** %m_iterator, align 8, !tbaa !255
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_(%"struct.thrust::detail::no_throw_allocator.304"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.304"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.304"* %a, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.304"*, %"struct.thrust::detail::no_throw_allocator.304"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.304"* %0 to %"class.thrust::detail::temporary_allocator.305"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.305"* %1)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_(%"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.308"* %f1, %"class.thrust::detail::normal_iterator.308"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %f2, %"class.thrust::detail::normal_iterator.308"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  store %"class.thrust::detail::normal_iterator.308"* %f1, %"class.thrust::detail::normal_iterator.308"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.308"* %f2, %"class.thrust::detail::normal_iterator.308"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.308"* %1 to %"class.thrust::iterator_adaptor.309"*
  %3 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.308"* %3 to %"class.thrust::iterator_adaptor.309"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.309"* %2, %"class.thrust::iterator_adaptor.309"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.309"* %this, %"class.thrust::iterator_adaptor.309"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.309"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.309"*, align 8
  store %"class.thrust::iterator_adaptor.309"* %this, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.309"* %y, %"class.thrust::iterator_adaptor.309"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.309"*, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.309"*, %"class.thrust::iterator_adaptor.309"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.311"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.309"* %0)
  %1 = bitcast %"class.thrust::pointer.311"* %call to %"class.thrust::iterator_facade.313"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.311"* %m_iterator to %"class.thrust::iterator_facade.313"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_(%"class.thrust::iterator_facade.313"* dereferenceable(1) %1, %"class.thrust::iterator_facade.313"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_(%"class.thrust::iterator_facade.313"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.313"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.313"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.313"*, align 8
  store %"class.thrust::iterator_facade.313"* %lhs, %"class.thrust::iterator_facade.313"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.313"* %rhs, %"class.thrust::iterator_facade.313"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.313"*, %"class.thrust::iterator_facade.313"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.313"* %0 to %"class.thrust::pointer.311"*
  %2 = load %"class.thrust::iterator_facade.313"*, %"class.thrust::iterator_facade.313"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.313"* %2 to %"class.thrust::pointer.311"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_(%"class.thrust::pointer.311"* dereferenceable(8) %1, %"class.thrust::pointer.311"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_(%"class.thrust::pointer.311"* dereferenceable(8) %f1, %"class.thrust::pointer.311"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.311"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.311"* %f1, %"class.thrust::pointer.311"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %f2, %"class.thrust::pointer.311"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.311"* dereferenceable(8) %0, %"class.thrust::pointer.311"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.311"* dereferenceable(8) %f1, %"class.thrust::pointer.311"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.311"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.311"*, align 8
  store %"class.thrust::pointer.311"* %f1, %"class.thrust::pointer.311"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.311"* %f2, %"class.thrust::pointer.311"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.311"* %1 to %"class.thrust::iterator_adaptor.312"*
  %3 = load %"class.thrust::pointer.311"*, %"class.thrust::pointer.311"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.311"* %3 to %"class.thrust::iterator_adaptor.312"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.312"* %2, %"class.thrust::iterator_adaptor.312"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.312"* %this, %"class.thrust::iterator_adaptor.312"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.312"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.312"*, align 8
  store %"class.thrust::iterator_adaptor.312"* %this, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.312"* %y, %"class.thrust::iterator_adaptor.312"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.312"*, %"class.thrust::iterator_adaptor.312"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.312"*, %"class.thrust::iterator_adaptor.312"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::tuple.314"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.312"* %0)
  %1 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %this1, i32 0, i32 0
  %2 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %m_iterator, align 8, !tbaa !255
  %sub.ptr.lhs.cast = ptrtoint %"class.thrust::tuple.314"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"class.thrust::tuple.314"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.314"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE(%"class.thrust::iterator_facade.310"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.308", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.310"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.308", align 8
  store %"class.thrust::iterator_facade.310"* %i, %"class.thrust::iterator_facade.310"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.308"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.310"*, %"class.thrust::iterator_facade.310"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.310"* %1 to %"class.thrust::detail::normal_iterator.308"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.308"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.308"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.308"* %tmp to %"class.thrust::iterator_facade.310"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.308"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl(%"class.thrust::iterator_facade.310"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.308"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.308"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.308"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.308", %"class.thrust::detail::normal_iterator.308"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.311", %"class.thrust::pointer.311"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.312", %"class.thrust::iterator_adaptor.312"* %coerce.dive2, i32 0, i32 0
  %10 = load %"class.thrust::tuple.314"*, %"class.thrust::tuple.314"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.314"* %10
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.308"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl(%"class.thrust::iterator_facade.310"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.310"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.310"* %this, %"class.thrust::iterator_facade.310"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.310"*, %"class.thrust::iterator_facade.310"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.308"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.310"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE(%"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.308"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.310"* %this1)
  ret %"class.thrust::detail::normal_iterator.308"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE(%"class.thrust::detail::normal_iterator.308"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.308"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.308"* %f, %"class.thrust::detail::normal_iterator.308"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.308"*, %"class.thrust::detail::normal_iterator.308"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.308"* %0 to %"class.thrust::iterator_adaptor.309"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl(%"class.thrust::iterator_adaptor.309"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.308"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.310"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.310"*, align 8
  store %"class.thrust::iterator_facade.310"* %this, %"class.thrust::iterator_facade.310"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.310"*, %"class.thrust::iterator_facade.310"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.310"* %this1 to %"class.thrust::detail::normal_iterator.308"*
  ret %"class.thrust::detail::normal_iterator.308"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl(%"class.thrust::iterator_adaptor.309"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.309"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.309"* %this, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.309"*, %"class.thrust::iterator_adaptor.309"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.309", %"class.thrust::iterator_adaptor.309"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.311"* %m_iterator to %"class.thrust::iterator_facade.313"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.311"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.313"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.216"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl(%"class.thrust::iterator_facade.217"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.217"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.217"* %this, %"class.thrust::iterator_facade.217"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.217"*, %"class.thrust::iterator_facade.217"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.216"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.217"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE(%"class.thrust::zip_iterator.216"* dereferenceable(16) %call, i64 %0)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.216"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.217"* %this1)
  ret %"class.thrust::zip_iterator.216"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE(%"class.thrust::zip_iterator.216"* dereferenceable(16) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.216"* %f, %"class.thrust::zip_iterator.216"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl(%"class.thrust::zip_iterator.216"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.216"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.217"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.217"*, align 8
  store %"class.thrust::iterator_facade.217"* %this, %"class.thrust::iterator_facade.217"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.217"*, %"class.thrust::iterator_facade.217"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.217"* %this1 to %"class.thrust::zip_iterator.216"*
  ret %"class.thrust::zip_iterator.216"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl(%"class.thrust::zip_iterator.216"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.216"* %this, %"class.thrust::zip_iterator.216"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_(%"class.thrust::tuple.218"* dereferenceable(16) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_(%"class.thrust::tuple.218"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.218"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.218"* %t, %"class.thrust::tuple.218"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.218"*, %"class.thrust::tuple.218"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.218"* %0 to %"struct.thrust::detail::cons.219"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.219"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.218"*, %"class.thrust::tuple.218"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.218"* %2 to %"struct.thrust::detail::cons.219"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.219"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.66"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.219"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.219"*, align 8
  store %"struct.thrust::detail::cons.219"* %this, %"struct.thrust::detail::cons.219"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.219"*, %"struct.thrust::detail::cons.219"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.219", %"struct.thrust::detail::cons.219"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.66"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.219"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.219"*, align 8
  store %"struct.thrust::detail::cons.219"* %this, %"struct.thrust::detail::cons.219"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.219"*, %"struct.thrust::detail::cons.219"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.219", %"struct.thrust::detail::cons.219"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_(%"class.thrust::zip_iterator.221"* %this, %"struct.thrust::pair"* %iterator_tuple.coerce0, i32* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.223", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %0 = bitcast %"class.thrust::tuple.223"* %iterator_tuple to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %iterator_tuple.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %iterator_tuple.coerce1, i32** %2, align 8
  store %"class.thrust::zip_iterator.221"* %this, %"class.thrust::zip_iterator.221"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.221"* %this1 to %"class.thrust::iterator_facade.222"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.223"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.223"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_(%"class.thrust::tuple.223"* %this, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.223"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.223"* %this, %"class.thrust::tuple.223"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.212"* %t0, %"class.thrust::detail::normal_iterator.212"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.223"*, %"class.thrust::tuple.223"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.223"* %this1 to %"struct.thrust::detail::cons.224"*
  %1 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.224"* %0, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.224"* %this, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.224"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.212"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.224"* %this, %"struct.thrust::detail::cons.224"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.212"* %t1, %"class.thrust::detail::normal_iterator.212"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.224"*, %"struct.thrust::detail::cons.224"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.224", %"struct.thrust::detail::cons.224"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.212"*, %"class.thrust::detail::normal_iterator.212"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.212"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.212"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.224", %"struct.thrust::detail::cons.224"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.221"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl(%"class.thrust::iterator_facade.222"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.222"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.222"* %this, %"class.thrust::iterator_facade.222"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.222"*, %"class.thrust::iterator_facade.222"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.221"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.222"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE(%"class.thrust::zip_iterator.221"* dereferenceable(16) %call, i64 %0)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.221"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.222"* %this1)
  ret %"class.thrust::zip_iterator.221"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE(%"class.thrust::zip_iterator.221"* dereferenceable(16) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.221"* %f, %"class.thrust::zip_iterator.221"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl(%"class.thrust::zip_iterator.221"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.221"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.222"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.222"*, align 8
  store %"class.thrust::iterator_facade.222"* %this, %"class.thrust::iterator_facade.222"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.222"*, %"class.thrust::iterator_facade.222"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.222"* %this1 to %"class.thrust::zip_iterator.221"*
  ret %"class.thrust::zip_iterator.221"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl(%"class.thrust::zip_iterator.221"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.221"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.221"* %this, %"class.thrust::zip_iterator.221"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.221"*, %"class.thrust::zip_iterator.221"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.221", %"class.thrust::zip_iterator.221"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_(%"class.thrust::tuple.223"* dereferenceable(16) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_(%"class.thrust::tuple.223"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.223"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.223"* %t, %"class.thrust::tuple.223"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.223"*, %"class.thrust::tuple.223"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.223"* %0 to %"struct.thrust::detail::cons.224"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.224"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.212"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.223"*, %"class.thrust::tuple.223"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.223"* %2 to %"struct.thrust::detail::cons.224"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.224"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.212"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.224"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.224"*, align 8
  store %"struct.thrust::detail::cons.224"* %this, %"struct.thrust::detail::cons.224"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.224"*, %"struct.thrust::detail::cons.224"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.224", %"struct.thrust::detail::cons.224"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.212"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.224"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.224"*, align 8
  store %"struct.thrust::detail::cons.224"* %this, %"struct.thrust::detail::cons.224"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.224"*, %"struct.thrust::detail::cons.224"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.224", %"struct.thrust::detail::cons.224"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_(%"class.thrust::zip_iterator.216"* %this, %"struct.thrust::pair"* %iterator_tuple.coerce0, i32* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.218", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.216"*, align 8
  %0 = bitcast %"class.thrust::tuple.218"* %iterator_tuple to { %"struct.thrust::pair"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %iterator_tuple.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i32* }, { %"struct.thrust::pair"*, i32* }* %0, i32 0, i32 1
  store i32* %iterator_tuple.coerce1, i32** %2, align 8
  store %"class.thrust::zip_iterator.216"* %this, %"class.thrust::zip_iterator.216"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.216"*, %"class.thrust::zip_iterator.216"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.216"* %this1 to %"class.thrust::iterator_facade.217"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.216", %"class.thrust::zip_iterator.216"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.218"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.218"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_(%"class.thrust::tuple.218"* %this, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.218"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.218"* %this, %"class.thrust::tuple.218"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.66"* %t0, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.218"*, %"class.thrust::tuple.218"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.218"* %this1 to %"struct.thrust::detail::cons.219"*
  %1 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.219"* %0, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.219"* %this, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.219"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.219"* %this, %"struct.thrust::detail::cons.219"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.66"* %t1, %"class.thrust::detail::normal_iterator.66"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.219"*, %"struct.thrust::detail::cons.219"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.219", %"struct.thrust::detail::cons.219"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.66"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.66"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.219", %"struct.thrust::detail::cons.219"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.207"* %this, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %first to %"class.thrust::iterator_adaptor.213"*
  %call = call dereferenceable(8) %"class.thrust::pointer.141"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.213"* %0)
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.212"* %last to %"class.thrust::iterator_facade.214"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.212"* %first to %"class.thrust::iterator_facade.214"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.214"* dereferenceable(1) %3, %"class.thrust::iterator_facade.214"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive10, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %m_allocator, %"struct.thrust::pair"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.207"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.212", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.207"*, align 8
  store %"class.thrust::detail::contiguous_storage.207"* %this, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.207"*, %"class.thrust::detail::contiguous_storage.207"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.207", %"class.thrust::detail::contiguous_storage.207"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.212"* %m_begin to %"class.thrust::iterator_facade.214"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.207"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.214"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.212", %"class.thrust::detail::normal_iterator.212"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.213", %"class.thrust::iterator_adaptor.213"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive8, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.141", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.141", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.141"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %call5, %"struct.thrust::pair"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %first = alloca %"class.thrust::pointer.141", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.141"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive4, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair"* %call6, %"struct.thrust::pair"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive9, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %first = alloca %"class.thrust::pointer.141", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  %call = call %"struct.thrust::pair"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"struct.thrust::pair"* %4, i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  ret %"struct.thrust::pair"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.141", align 8
  %first = alloca %"class.thrust::pointer.141", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp5 = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp6 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce13 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp16 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp17 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp18 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp19 = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp20 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp25 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp28 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp31 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp32 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp33 = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp34 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp37 = alloca i32, align 4
  %agg.tmp.ensured40 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp41 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp46 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp47 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp48 = alloca %"class.thrust::pointer.141", align 8
  %agg.tmp49 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive2 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::pointer.141"* %agg.tmp5 to i8*
  %12 = bitcast %"class.thrust::pointer.141"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp6 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp5, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive7, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  %call9 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"struct.thrust::pair"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call9, i64* %17, align 4
  %call10 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call11 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call11, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call12 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce13, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive14 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call12, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call12, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp16, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::pointer.141"* %agg.tmp19 to i8*
  %30 = bitcast %"class.thrust::pointer.141"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp20 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp19, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive21, i32 0, i32 0
  %34 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  %call23 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp16, %"struct.thrust::pair"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp15 to i64*
  store i64 %call23, i64* %35, align 4
  %call24 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce13, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp15)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call26 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call26, i64* %ref.tmp25, align 8, !tbaa !13
  %call27 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp25)
  store i64 %call27, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call29 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call30 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp28, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call30)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp32 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::pointer.141"* %agg.tmp33 to i8*
  %45 = bitcast %"class.thrust::pointer.141"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp34 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp33, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive35, i32 0, i32 0
  %49 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive36, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp28, %"struct.thrust::pair"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call38 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call38, i32* %ref.tmp37, align 4, !tbaa !11
  %call39 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp37)
  store i32 %call39, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv42 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv43 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call44 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call44 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call45 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp41, i64 %conv42, i64 %conv43, i64 0, %struct.CUstream_st* %call45)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp47 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::pointer.141"* %agg.tmp48 to i8*
  %61 = bitcast %"class.thrust::pointer.141"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp49 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %agg.tmp48, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive50, i32 0, i32 0
  %65 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive51, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured40, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp41, %"struct.thrust::pair"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured40) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::pointer.141"* %first to %"class.thrust::iterator_facade.143"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call52 = call %"struct.thrust::pair"* @_ZN6thrustplINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.143"* dereferenceable(1) %66, i64 %67)
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive53, i32 0, i32 0
  store %"struct.thrust::pair"* %call52, %"struct.thrust::pair"** %coerce.dive54, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %retval, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive55, i32 0, i32 0
  %72 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive56, align 8
  ret %"struct.thrust::pair"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.141", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.141"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.141", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.141"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.141", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.141"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.141", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.141", %"class.thrust::pointer.141"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.142", %"class.thrust::iterator_adaptor.142"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %arg2.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.141"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.141"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.141"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.406", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %a2, %"class.thrust::pointer.141"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.406"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.141"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %agg.result, %"class.thrust::tuple.406"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.406"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.141"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %t1, %"class.thrust::pointer.141"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj(%"class.thrust::tuple.406"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.141"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %this, %"class.thrust::tuple.406"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"*, align 8
  %args.addr = alloca %"class.thrust::tuple.406"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.406"* %args, %"class.thrust::tuple.406"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.406"*, %"class.thrust::tuple.406"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.406"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.406"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj(%"class.thrust::tuple.406"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.141"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.406"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.406"* %this, %"class.thrust::tuple.406"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %t1, %"class.thrust::pointer.141"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.406"*, %"class.thrust::tuple.406"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.406"* %this1 to %"struct.thrust::detail::cons.407"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.407"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.141"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.407"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.141"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.407"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.407"* %this, %"struct.thrust::detail::cons.407"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %t2, %"class.thrust::pointer.141"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.407"*, %"struct.thrust::detail::cons.407"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.407", %"struct.thrust::detail::cons.407"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.407", %"struct.thrust::detail::cons.407"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.408"* %tail, %"class.thrust::pointer.141"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.408"* %this, %"class.thrust::pointer.141"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.408"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.408"* %this, %"struct.thrust::detail::cons.408"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.141"* %t1, %"class.thrust::pointer.141"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.408"*, %"struct.thrust::detail::cons.408"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.408", %"struct.thrust::detail::cons.408"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.408", %"struct.thrust::detail::cons.408"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.141"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.141"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.417", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %a2, %"class.thrust::pointer.141"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.417"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.141"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %agg.result, %"class.thrust::tuple.417"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.417"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.141"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %t1, %"class.thrust::pointer.141"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl(%"class.thrust::tuple.417"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.141"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %this, %"class.thrust::tuple.417"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"*, align 8
  %args.addr = alloca %"class.thrust::tuple.417"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.417"* %args, %"class.thrust::tuple.417"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.417"*, %"class.thrust::tuple.417"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.417"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.417"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIaaEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl(%"class.thrust::tuple.417"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.141"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.417"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.417"* %this, %"class.thrust::tuple.417"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %t1, %"class.thrust::pointer.141"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.417"*, %"class.thrust::tuple.417"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.417"* %this1 to %"struct.thrust::detail::cons.418"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.418"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.141"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIaaEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.418"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.141"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.418"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.418"* %this, %"struct.thrust::detail::cons.418"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.141"* %t2, %"class.thrust::pointer.141"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.418"*, %"struct.thrust::detail::cons.418"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.418", %"struct.thrust::detail::cons.418"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.418", %"struct.thrust::detail::cons.418"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.419"* %tail, %"class.thrust::pointer.141"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.419"* %this, %"class.thrust::pointer.141"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.419"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.141"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.419"* %this, %"struct.thrust::detail::cons.419"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.141"* %t1, %"class.thrust::pointer.141"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.419"*, %"struct.thrust::detail::cons.419"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.419", %"struct.thrust::detail::cons.419"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.141"*, %"class.thrust::pointer.141"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.141"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.141"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.419", %"struct.thrust::detail::cons.419"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.420"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.416", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !301
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.421"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.416"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.425"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.422"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.424"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.409"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.405", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !303
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.410"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.405"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.414"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.411"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIaaEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.413"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.208"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.208"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.208"* %a, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.208"*, %"struct.thrust::detail::no_throw_allocator.208"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.208"* %0 to %"class.thrust::detail::temporary_allocator.209"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.209"* %1)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIjS7_NS_11use_defaultESD_EEEESF_(%"class.thrust::detail::contiguous_storage.198"* %this, i32* %first.coerce, i32* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive6, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %first to %"class.thrust::iterator_adaptor.200"*
  %call = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.200"* %0)
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.199"* %last to %"class.thrust::iterator_facade.201"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.199"* %first to %"class.thrust::iterator_facade.201"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElSA_jS7_SB_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.201"* dereferenceable(1) %3, %"class.thrust::iterator_facade.201"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive10, i32 0, i32 0
  %5 = load i32*, i32** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEENS_7pointerIjS7_NS_11use_defaultESB_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %m_allocator, i32* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.198"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.198"*, align 8
  store %"class.thrust::detail::contiguous_storage.198"* %this, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.198"*, %"class.thrust::detail::contiguous_storage.198"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.198", %"class.thrust::detail::contiguous_storage.198"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.199"* %m_begin to %"class.thrust::iterator_facade.201"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.198"* %this1)
  %call2 = call i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive4, i32 0, i32 0
  store i32* %call2, i32** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive8, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive9, align 8
  ret i32* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEENS_7pointerIjS7_NS_11use_defaultESB_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %a, i32* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.202", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.202", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %a, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator"*, %"struct.thrust::detail::no_throw_allocator"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.202"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.202"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive2, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEENS_7pointerIjS8_NS_11use_defaultESC_EElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERSF_SG_T1_(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8) %0, i32* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElSA_jS7_SB_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.201"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.201"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.201"*, align 8
  store %"class.thrust::iterator_facade.201"* %lhs, %"class.thrust::iterator_facade.201"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.201"* %rhs, %"class.thrust::iterator_facade.201"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.201"* %0 to %"class.thrust::detail::normal_iterator.199"*
  %2 = load %"class.thrust::iterator_facade.201"*, %"class.thrust::iterator_facade.201"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.201"* %2 to %"class.thrust::detail::normal_iterator.199"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEESB_EENS2_20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEENS_7pointerIjS8_NS_11use_defaultESC_EElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERSF_SG_T1_(%"struct.thrust::detail::no_throw_allocator"* dereferenceable(8), i32* %.coerce, i64) #1 comdat {
entry:
  %2 = alloca %"class.thrust::pointer.202", align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator"*, align 8
  %.addr2 = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %2, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive, i32 0, i32 0
  store i32* %.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator"* %0, %"struct.thrust::detail::no_throw_allocator"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr2, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEESB_EENS2_20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.199"* %f1, %"class.thrust::detail::normal_iterator.199"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %f2, %"class.thrust::detail::normal_iterator.199"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEESB_EENT_15difference_typeERKSC_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES9_EEEESB_EENT_15difference_typeERKSC_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.199"* %f1, %"class.thrust::detail::normal_iterator.199"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %f2, %"class.thrust::detail::normal_iterator.199"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.199"* %1 to %"class.thrust::iterator_adaptor.200"*
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.199"* %3 to %"class.thrust::iterator_adaptor.200"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E11distance_toISA_S9_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.200"* %2, %"class.thrust::iterator_adaptor.200"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E11distance_toISA_S9_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.200"* %this, %"class.thrust::iterator_adaptor.200"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.200"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.200"*, align 8
  store %"class.thrust::iterator_adaptor.200"* %this, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.200"* %y, %"class.thrust::iterator_adaptor.200"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.200"*, %"class.thrust::iterator_adaptor.200"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.200"*, %"class.thrust::iterator_adaptor.200"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.202"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEES9_S8_S8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.200"* %0)
  %1 = bitcast %"class.thrust::pointer.202"* %call to %"class.thrust::iterator_facade.204"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.202"* %m_iterator to %"class.thrust::iterator_facade.204"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElS7_jS5_S8_SA_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.204"* dereferenceable(1) %1, %"class.thrust::iterator_facade.204"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElS7_jS5_S8_SA_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.204"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.204"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.204"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.204"*, align 8
  store %"class.thrust::iterator_facade.204"* %lhs, %"class.thrust::iterator_facade.204"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.204"* %rhs, %"class.thrust::iterator_facade.204"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.204"*, %"class.thrust::iterator_facade.204"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.204"* %0 to %"class.thrust::pointer.202"*
  %2 = load %"class.thrust::iterator_facade.204"*, %"class.thrust::iterator_facade.204"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.204"* %2 to %"class.thrust::pointer.202"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EES8_EENS_6detail20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::pointer.202"* dereferenceable(8) %1, %"class.thrust::pointer.202"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EES8_EENS_6detail20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::pointer.202"* dereferenceable(8) %f1, %"class.thrust::pointer.202"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.202"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.202"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.202"* %f1, %"class.thrust::pointer.202"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.202"* %f2, %"class.thrust::pointer.202"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EES8_EENT_15difference_typeERKS9_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.202"* dereferenceable(8) %0, %"class.thrust::pointer.202"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EES8_EENT_15difference_typeERKS9_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.202"* dereferenceable(8) %f1, %"class.thrust::pointer.202"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.202"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.202"*, align 8
  store %"class.thrust::pointer.202"* %f1, %"class.thrust::pointer.202"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.202"* %f2, %"class.thrust::pointer.202"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.202"* %1 to %"class.thrust::iterator_adaptor.203"*
  %3 = load %"class.thrust::pointer.202"*, %"class.thrust::pointer.202"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.202"* %3 to %"class.thrust::iterator_adaptor.203"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE11distance_toIS7_S8_jS5_S9_SB_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.203"* %2, %"class.thrust::iterator_adaptor.203"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE11distance_toIS7_S8_jS5_S9_SB_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.203"* %this, %"class.thrust::iterator_adaptor.203"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.203"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.203"*, align 8
  store %"class.thrust::iterator_adaptor.203"* %this, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.203"* %y, %"class.thrust::iterator_adaptor.203"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.203"*, %"class.thrust::iterator_adaptor.203"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.203"*, %"class.thrust::iterator_adaptor.203"** %y.addr, align 8
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.203"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %this1, i32 0, i32 0
  %2 = load i32*, i32** %m_iterator, align 8, !tbaa !192
  %sub.ptr.lhs.cast = ptrtoint i32* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i32* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.120"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2) #0 comdat {
entry:
  %system1.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  store %"struct.thrust::execution_policy.120"* %system1, %"struct.thrust::execution_policy.120"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1.addr, align 8
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS0_4cuda6detail3tagEEERT_RNS_16execution_policyIS8_EESC_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %1)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic20select_system_detail10min_systemINS0_4cuda6detail3tagEEERT_RNS_16execution_policyIS8_EESC_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1)) #1 comdat {
entry:
  %system1.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  store %"struct.thrust::execution_policy.120"* %system1, %"struct.thrust::execution_policy.120"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %0, %"struct.thrust::execution_policy.120"** %.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEE4sizeEv(%"class.thrust::detail::vector_base.54"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.54"*, align 8
  store %"class.thrust::detail::vector_base.54"* %this, %"class.thrust::detail::vector_base.54"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.54"*, %"class.thrust::detail::vector_base.54"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.54", %"class.thrust::detail::vector_base.54"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !63
  ret i64 %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_4pairIaaEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE(%"class.thrust::detail::vector_base.46"* dereferenceable(32) %lhs, %"class.thrust::detail::vector_base.62"* dereferenceable(32) %rhs) #0 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  %rhs.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  store %"class.thrust::detail::vector_base.46"* %lhs, %"class.thrust::detail::vector_base.46"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::detail::vector_base.62"* %rhs, %"class.thrust::detail::vector_base.62"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %lhs.addr, align 8
  %call = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.46"* %0)
  %1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %rhs.addr, align 8
  %call1 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.62"* %1)
  %cmp = icmp eq i64 %call, %call1
  br i1 %cmp, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %2 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %lhs.addr, align 8
  %call2 = call %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive3, align 8
  %3 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %lhs.addr, align 8
  %call5 = call %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.46"* %3)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp4, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %call5, %"struct.thrust::pair"** %coerce.dive7, align 8
  %4 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %rhs.addr, align 8
  %call9 = call %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.62"* %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp8, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair"* %call9, %"struct.thrust::pair"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive15, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp4, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive17, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp8, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive22, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  %call24 = call zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIaaEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_(%"struct.thrust::pair"* %5, %"struct.thrust::pair"* %6, %"struct.thrust::pair"* %7)
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %8 = phi i1 [ false, %entry ], [ %call24, %land.rhs ]
  ret i1 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest15UnitTestFailureC2Ev(%"class.unittest::UnitTestFailure"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.unittest::UnitTestFailure"*, align 8
  store %"class.unittest::UnitTestFailure"* %this, %"class.unittest::UnitTestFailure"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.unittest::UnitTestFailure"*, %"class.unittest::UnitTestFailure"** %this.addr, align 8
  %0 = bitcast %"class.unittest::UnitTestFailure"* %this1 to %"class.unittest::UnitTestException"*
  call void @_ZN8unittest17UnitTestExceptionC2Ev(%"class.unittest::UnitTestException"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_(%"class.unittest::UnitTestException"* %this, [2 x i8]* dereferenceable(2) %t) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  %t.addr = alloca [2 x i8]*, align 8
  %oss = alloca %"class.std::basic_ostringstream", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  store [2 x i8]* %t, [2 x i8]** %t.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.start(i64 352, i8* %0) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode(%"class.std::basic_ostringstream"* %oss, i32 16)
  %1 = bitcast %"class.std::basic_ostringstream"* %oss to %"class.std::basic_ostream"*
  %2 = load [2 x i8]*, [2 x i8]** %t.addr, align 8
  %arraydecay = getelementptr inbounds [2 x i8], [2 x i8]* %2, i32 0, i32 0
  %call = invoke dereferenceable(272) %"class.std::basic_ostream"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream"* dereferenceable(272) %1, i8* %arraydecay)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  invoke void @_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* sret %ref.tmp, %"class.std::basic_ostringstream"* %oss)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %message, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %3 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %3) #5
  ret %"class.unittest::UnitTestException"* %this1

lpad:                                             ; preds = %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont2
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %10 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %10) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val7 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val7
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_(%"class.unittest::UnitTestException"* %this, %"class.std::basic_string"* dereferenceable(8) %t) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  %t.addr = alloca %"class.std::basic_string"*, align 8
  %oss = alloca %"class.std::basic_ostringstream", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  store %"class.std::basic_string"* %t, %"class.std::basic_string"** %t.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.start(i64 352, i8* %0) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode(%"class.std::basic_ostringstream"* %oss, i32 16)
  %1 = bitcast %"class.std::basic_ostringstream"* %oss to %"class.std::basic_ostream"*
  %2 = load %"class.std::basic_string"*, %"class.std::basic_string"** %t.addr, align 8
  %call = invoke dereferenceable(272) %"class.std::basic_ostream"* @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E(%"class.std::basic_ostream"* dereferenceable(272) %1, %"class.std::basic_string"* dereferenceable(8) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  invoke void @_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* sret %ref.tmp, %"class.std::basic_ostringstream"* %oss)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %message, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %3 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %3) #5
  ret %"class.unittest::UnitTestException"* %this1

lpad:                                             ; preds = %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont2
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %10 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %10) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val7 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val7
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIiEERS0_RKT_(%"class.unittest::UnitTestException"* %this, i32* dereferenceable(4) %t) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  %t.addr = alloca i32*, align 8
  %oss = alloca %"class.std::basic_ostringstream", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  store i32* %t, i32** %t.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.start(i64 352, i8* %0) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode(%"class.std::basic_ostringstream"* %oss, i32 16)
  %1 = bitcast %"class.std::basic_ostringstream"* %oss to %"class.std::basic_ostream"*
  %2 = load i32*, i32** %t.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  %call = invoke dereferenceable(272) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"* %1, i32 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  invoke void @_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* sret %ref.tmp, %"class.std::basic_ostringstream"* %oss)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %message, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %4 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %4) #5
  ret %"class.unittest::UnitTestException"* %this1

lpad:                                             ; preds = %invoke.cont, %entry
  %5 = landingpad { i8*, i32 }
          cleanup
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont2
  %8 = landingpad { i8*, i32 }
          cleanup
  %9 = extractvalue { i8*, i32 } %8, 0
  store i8* %9, i8** %exn.slot, align 8
  %10 = extractvalue { i8*, i32 } %8, 1
  store i32 %10, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %11 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %11) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val7 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val7
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_(%"class.unittest::UnitTestException"* %this, [3 x i8]* dereferenceable(3) %t) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  %t.addr = alloca [3 x i8]*, align 8
  %oss = alloca %"class.std::basic_ostringstream", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  store [3 x i8]* %t, [3 x i8]** %t.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.start(i64 352, i8* %0) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode(%"class.std::basic_ostringstream"* %oss, i32 16)
  %1 = bitcast %"class.std::basic_ostringstream"* %oss to %"class.std::basic_ostream"*
  %2 = load [3 x i8]*, [3 x i8]** %t.addr, align 8
  %arraydecay = getelementptr inbounds [3 x i8], [3 x i8]* %2, i32 0, i32 0
  %call = invoke dereferenceable(272) %"class.std::basic_ostream"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream"* dereferenceable(272) %1, i8* %arraydecay)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  invoke void @_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* sret %ref.tmp, %"class.std::basic_ostringstream"* %oss)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %message, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %3 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %3) #5
  ret %"class.unittest::UnitTestException"* %this1

lpad:                                             ; preds = %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont2
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %10 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %10) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val7 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val7
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA22_cEERS0_RKT_(%"class.unittest::UnitTestException"* %this, [22 x i8]* dereferenceable(22) %t) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  %t.addr = alloca [22 x i8]*, align 8
  %oss = alloca %"class.std::basic_ostringstream", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  store [22 x i8]* %t, [22 x i8]** %t.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.start(i64 352, i8* %0) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode(%"class.std::basic_ostringstream"* %oss, i32 16)
  %1 = bitcast %"class.std::basic_ostringstream"* %oss to %"class.std::basic_ostream"*
  %2 = load [22 x i8]*, [22 x i8]** %t.addr, align 8
  %arraydecay = getelementptr inbounds [22 x i8], [22 x i8]* %2, i32 0, i32 0
  %call = invoke dereferenceable(272) %"class.std::basic_ostream"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream"* dereferenceable(272) %1, i8* %arraydecay)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  invoke void @_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* sret %ref.tmp, %"class.std::basic_ostringstream"* %oss)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %message, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %3 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %3) #5
  ret %"class.unittest::UnitTestException"* %this1

lpad:                                             ; preds = %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont2
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %10 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %10) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val7 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val7
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA9_cEERS0_RKT_(%"class.unittest::UnitTestException"* %this, [9 x i8]* dereferenceable(9) %t) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  %t.addr = alloca [9 x i8]*, align 8
  %oss = alloca %"class.std::basic_ostringstream", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  store [9 x i8]* %t, [9 x i8]** %t.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.start(i64 352, i8* %0) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode(%"class.std::basic_ostringstream"* %oss, i32 16)
  %1 = bitcast %"class.std::basic_ostringstream"* %oss to %"class.std::basic_ostream"*
  %2 = load [9 x i8]*, [9 x i8]** %t.addr, align 8
  %arraydecay = getelementptr inbounds [9 x i8], [9 x i8]* %2, i32 0, i32 0
  %call = invoke dereferenceable(272) %"class.std::basic_ostream"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream"* dereferenceable(272) %1, i8* %arraydecay)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  invoke void @_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* sret %ref.tmp, %"class.std::basic_ostringstream"* %oss)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSspLERKSs(%"class.std::basic_string"* %message, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %3 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %3) #5
  ret %"class.unittest::UnitTestException"* %this1

lpad:                                             ; preds = %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont2
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %oss) #5
  %10 = bitcast %"class.std::basic_ostringstream"* %oss to i8*
  call void @llvm.lifetime.end(i64 352, i8* %10) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val7 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIaaEESaIS4_EEEEESsv(%"class.std::basic_string"* noalias sret %agg.result) #0 comdat {
entry:
  %call = call i8* @_ZNKSt9type_info4nameEv(%"class.std::type_info"* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust11host_vectorINS_4pairIaaEESaIS2_EEE to %"class.std::type_info"*)) #5
  call void @_ZN8unittest8demangleEPKc(%"class.std::basic_string"* sret %agg.result, i8* %call)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN8unittest15UnitTestFailureC2EOS0_(%"class.unittest::UnitTestFailure"* %this, %"class.unittest::UnitTestFailure"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.unittest::UnitTestFailure"*, align 8
  %.addr = alloca %"class.unittest::UnitTestFailure"*, align 8
  store %"class.unittest::UnitTestFailure"* %this, %"class.unittest::UnitTestFailure"** %this.addr, align 8, !tbaa !1
  store %"class.unittest::UnitTestFailure"* %0, %"class.unittest::UnitTestFailure"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestFailure"*, %"class.unittest::UnitTestFailure"** %this.addr, align 8
  %1 = bitcast %"class.unittest::UnitTestFailure"* %this1 to %"class.unittest::UnitTestException"*
  %2 = load %"class.unittest::UnitTestFailure"*, %"class.unittest::UnitTestFailure"** %.addr, align 8
  %3 = bitcast %"class.unittest::UnitTestFailure"* %2 to %"class.unittest::UnitTestException"*
  call void @_ZN8unittest17UnitTestExceptionC2EOS0_(%"class.unittest::UnitTestException"* %1, %"class.unittest::UnitTestException"* dereferenceable(8) %3) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN8unittest17UnitTestExceptionD2Ev(%"class.unittest::UnitTestException"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %message) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.62"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !99
  ret i64 %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIaaEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_(%"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp11 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %ref.tmp = alloca %"struct.thrust::detail::is_same", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive8, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp9 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp10 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::is_same"* %ref.tmp to %"struct.thrust::detail::integral_constant.197"*
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive12, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive14, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp10, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive19, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive20, align 8
  %call = call zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIaaEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE(%"struct.thrust::pair"* %7, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.62"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.62", %"class.thrust::detail::vector_base.62"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.63"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive9, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIaaEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE(%"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first1 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %0 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %from_system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %from_system2 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %to_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %rng1 = alloca %"class.thrust::detail::move_to_system", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp15 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %rng2 = alloca %"class.thrust::detail::move_to_system.432", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp38 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp44 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp51 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive8, align 8
  %1 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp9 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive10, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive12, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive13, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair"* %6, %"struct.thrust::pair"* %7)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %8) #5
  %9 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %9) #5
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %10) #5
  %11 = bitcast %"class.thrust::detail::move_to_system"* %rng1 to i8*
  call void @llvm.lifetime.start(i64 16, i8* %11) #5
  %12 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to %"struct.thrust::execution_policy.88"*
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to %"struct.thrust::execution_policy.88"*
  %14 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp14 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.134"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp15 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.134"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp14, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive16, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp15, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive18, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  call void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_(%"class.thrust::detail::move_to_system"* %rng1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %12, %"struct.thrust::execution_policy.88"* dereferenceable(1) %13, %"struct.thrust::pair"* %18, %"struct.thrust::pair"* %19)
  %20 = bitcast %"class.thrust::detail::move_to_system.432"* %rng2 to i8*
  call void @llvm.lifetime.start(i64 24, i8* %20) #5
  %21 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to %"struct.thrust::execution_policy.120"*
  %22 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to %"struct.thrust::execution_policy.88"*
  %23 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp20 to i8*
  %24 = bitcast %"class.thrust::detail::normal_iterator.427"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %23, i8* %24, i64 8, i32 8, i1 false)
  %25 = bitcast %"class.thrust::detail::normal_iterator.427"* %first2 to %"class.thrust::iterator_facade.429"*
  %26 = load i64, i64* %n, align 8, !tbaa !13
  %call22 = call %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.429"* dereferenceable(1) %25, i64 %26)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp21, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive26, i32 0, i32 0
  store %"struct.thrust::pair"* %call22, %"struct.thrust::pair"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp20, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive31, i32 0, i32 0
  %27 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp21, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive36, i32 0, i32 0
  %28 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive37, align 8
  call void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_(%"class.thrust::detail::move_to_system.432"* %rng2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %21, %"struct.thrust::execution_policy.88"* dereferenceable(1) %22, %"struct.thrust::pair"* %27, %"struct.thrust::pair"* %28)
  %29 = bitcast %"class.thrust::detail::move_to_system"* %rng1 to %"class.thrust::detail::tagged_iterator_range"*
  %call39 = invoke %"struct.thrust::pair"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEE5beginEv(%"class.thrust::detail::tagged_iterator_range"* %29)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive40 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp38, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive41, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive42, i32 0, i32 0
  store %"struct.thrust::pair"* %call39, %"struct.thrust::pair"** %coerce.dive43, align 8
  %30 = bitcast %"class.thrust::detail::move_to_system"* %rng1 to %"class.thrust::detail::tagged_iterator_range"*
  %call46 = invoke %"struct.thrust::pair"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEE3endEv(%"class.thrust::detail::tagged_iterator_range"* %30)
          to label %invoke.cont45 unwind label %lpad

invoke.cont45:                                    ; preds = %invoke.cont
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp44, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive49, i32 0, i32 0
  store %"struct.thrust::pair"* %call46, %"struct.thrust::pair"** %coerce.dive50, align 8
  %31 = bitcast %"class.thrust::detail::move_to_system.432"* %rng2 to %"class.thrust::detail::contiguous_storage.434"*
  %call53 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.434"* %31)
          to label %invoke.cont52 unwind label %lpad

invoke.cont52:                                    ; preds = %invoke.cont45
  %coerce.dive54 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp51, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive56, i32 0, i32 0
  store %"struct.thrust::pair"* %call53, %"struct.thrust::pair"** %coerce.dive57, align 8
  %coerce.dive58 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp38, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive60, i32 0, i32 0
  %32 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive61, align 8
  %coerce.dive62 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp44, i32 0, i32 0
  %coerce.dive63 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive62, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive64, i32 0, i32 0
  %33 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive65, align 8
  %coerce.dive66 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp51, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive66, i32 0, i32 0
  %coerce.dive68 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive67, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive68, i32 0, i32 0
  %34 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive69, align 8
  %call71 = invoke zeroext i1 @_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_(%"struct.thrust::pair"* %32, %"struct.thrust::pair"* %33, %"struct.thrust::pair"* %34)
          to label %invoke.cont70 unwind label %lpad

invoke.cont70:                                    ; preds = %invoke.cont52
  call void bitcast (void (%"class.thrust::detail::temporary_array.433"*)* @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system3cpp6detail3tagEED2Ev to void (%"class.thrust::detail::move_to_system.432"*)*)(%"class.thrust::detail::move_to_system.432"* %rng2) #5
  %35 = bitcast %"class.thrust::detail::move_to_system.432"* %rng2 to i8*
  call void @llvm.lifetime.end(i64 24, i8* %35) #5
  %36 = bitcast %"class.thrust::detail::move_to_system"* %rng1 to i8*
  call void @llvm.lifetime.end(i64 16, i8* %36) #5
  %37 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %37) #5
  %38 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %38) #5
  %39 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %39) #5
  %40 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %40) #5
  ret i1 %call71

lpad:                                             ; preds = %invoke.cont52, %invoke.cont45, %invoke.cont, %entry
  %41 = landingpad { i8*, i32 }
          cleanup
  %42 = extractvalue { i8*, i32 } %41, 0
  store i8* %42, i8** %exn.slot, align 8
  %43 = extractvalue { i8*, i32 } %41, 1
  store i32 %43, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::temporary_array.433"*)* @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system3cpp6detail3tagEED2Ev to void (%"class.thrust::detail::move_to_system.432"*)*)(%"class.thrust::detail::move_to_system.432"* %rng2) #5
  %44 = bitcast %"class.thrust::detail::move_to_system.432"* %rng2 to i8*
  call void @llvm.lifetime.end(i64 24, i8* %44) #5
  %45 = bitcast %"class.thrust::detail::move_to_system"* %rng1 to i8*
  call void @llvm.lifetime.end(i64 16, i8* %45) #5
  %46 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %46) #5
  %47 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %47) #5
  %48 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %48) #5
  %49 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %49) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val72 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val72
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_(%"class.thrust::detail::move_to_system"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"struct.thrust::execution_policy.88"* dereferenceable(1) %to_system, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::move_to_system"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %to_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store %"class.thrust::detail::move_to_system"* %this, %"class.thrust::detail::move_to_system"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %to_system, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::move_to_system"*, %"class.thrust::detail::move_to_system"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::move_to_system"* %this4 to %"class.thrust::detail::tagged_iterator_range"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8
  %2 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive8, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_(%"class.thrust::detail::tagged_iterator_range"* %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::pair"* %7, %"struct.thrust::pair"* %8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.429"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.429"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  store %"class.thrust::iterator_facade.429"* %i, %"class.thrust::iterator_facade.429"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.427"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.429"*, %"class.thrust::iterator_facade.429"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.429"* %1 to %"class.thrust::detail::normal_iterator.427"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %tmp to %"class.thrust::iterator_facade.429"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.427"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl(%"class.thrust::iterator_facade.429"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.427"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.427"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.427"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_(%"class.thrust::detail::move_to_system.432"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::execution_policy.88"* dereferenceable(1) %to_system, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %this.addr = alloca %"class.thrust::detail::move_to_system.432"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %to_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  store %"class.thrust::detail::move_to_system.432"* %this, %"class.thrust::detail::move_to_system.432"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %to_system, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8, !tbaa !7
  %this10 = load %"class.thrust::detail::move_to_system.432"*, %"class.thrust::detail::move_to_system.432"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::move_to_system.432"* %this10 to %"class.thrust::detail::temporary_array.433"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp11 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive15, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp11, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive20, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_(%"class.thrust::detail::temporary_array.433"* %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, %"struct.thrust::pair"* %7, %"struct.thrust::pair"* %8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_(%"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %5 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::detail::tagged_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::detail::tagged_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.439"* %agg.tmp13 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.439"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive16, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp12, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive20, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp13, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive24, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive25, align 8
  %call26 = call zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4, %"struct.thrust::pair"* %11, %"struct.thrust::pair"* %12, %"struct.thrust::pair"* %13)
  %14 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %14) #5
  %15 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %15) #5
  ret i1 %call26
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEE5beginEv(%"class.thrust::detail::tagged_iterator_range"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tagged_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range"*, align 8
  store %"class.thrust::detail::tagged_iterator_range"* %this, %"class.thrust::detail::tagged_iterator_range"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_iterator_range"*, %"class.thrust::detail::tagged_iterator_range"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range", %"class.thrust::detail::tagged_iterator_range"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::tagged_iterator"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEE3endEv(%"class.thrust::detail::tagged_iterator_range"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tagged_iterator", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range"*, align 8
  store %"class.thrust::detail::tagged_iterator_range"* %this, %"class.thrust::detail::tagged_iterator_range"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_iterator_range"*, %"class.thrust::detail::tagged_iterator_range"** %this.addr, align 8
  %m_end = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range", %"class.thrust::detail::tagged_iterator_range"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::tagged_iterator"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %m_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.434"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.439"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.439"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system3cpp6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.433"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.433"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  store %"class.thrust::detail::temporary_array.433"* %this, %"class.thrust::detail::temporary_array.433"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.433"*, %"class.thrust::detail::temporary_array.433"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.433"* %this1 to %"class.thrust::detail::contiguous_storage.434"*
  %1 = bitcast %"class.thrust::detail::temporary_array.433"* %this1 to %"class.thrust::detail::contiguous_storage.434"*
  %call = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.434"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.433"* %this1 to %"class.thrust::detail::contiguous_storage.434"*
  %call7 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.434"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %call7, %"struct.thrust::pair"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive14, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive18, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.434"* %0, %"struct.thrust::pair"* %3, %"struct.thrust::pair"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.433"* %this1 to %"class.thrust::detail::contiguous_storage.434"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.434"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.433"* %this1 to %"class.thrust::detail::contiguous_storage.434"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.434"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_(%"class.thrust::detail::tagged_iterator_range"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1), %"struct.thrust::execution_policy.88"* dereferenceable(1), %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range"*, align 8
  %.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %.addr4 = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store %"class.thrust::detail::tagged_iterator_range"* %this, %"class.thrust::detail::tagged_iterator_range"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %0, %"struct.thrust::execution_policy.88"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %1, %"struct.thrust::execution_policy.88"** %.addr4, align 8, !tbaa !7
  %this5 = load %"class.thrust::detail::tagged_iterator_range"*, %"class.thrust::detail::tagged_iterator_range"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range", %"class.thrust::detail::tagged_iterator_range"* %this5, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  call void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator"* %m_begin, %"struct.thrust::pair"* %4)
  %m_end = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range", %"class.thrust::detail::tagged_iterator_range"* %this5, i32 0, i32 1
  %5 = bitcast %"class.thrust::detail::normal_iterator.134"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.134"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %agg.tmp8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive9, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator"* %m_end, %"struct.thrust::pair"* %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator"* %this, %"struct.thrust::pair"* %x.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %x = alloca %"class.thrust::detail::normal_iterator.134", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %x.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"class.thrust::detail::tagged_iterator"* %this, %"class.thrust::detail::tagged_iterator"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tagged_iterator"* %this2 to %"class.thrust::iterator_adaptor.430"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_(%"class.thrust::iterator_adaptor.430"* %0, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %x)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_(%"class.thrust::iterator_adaptor.430"* %this, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.430"*, align 8
  %iter.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  store %"class.thrust::iterator_adaptor.430"* %this, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.134"* %iter, %"class.thrust::detail::normal_iterator.134"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.430"*, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.430"* %this1 to %"class.thrust::iterator_facade.431"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.427"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl(%"class.thrust::iterator_facade.429"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.429"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.429"* %this, %"class.thrust::iterator_facade.429"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.429"*, %"class.thrust::iterator_facade.429"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.427"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.429"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEEvRT_NSA_15difference_typeE(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.427"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.429"* %this1)
  ret %"class.thrust::detail::normal_iterator.427"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEEvRT_NSA_15difference_typeE(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.427"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.427"* %f, %"class.thrust::detail::normal_iterator.427"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.427"*, %"class.thrust::detail::normal_iterator.427"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.427"* %0 to %"class.thrust::iterator_adaptor.428"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl(%"class.thrust::iterator_adaptor.428"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.427"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.429"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.429"*, align 8
  store %"class.thrust::iterator_facade.429"* %this, %"class.thrust::iterator_facade.429"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.429"*, %"class.thrust::iterator_facade.429"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.429"* %this1 to %"class.thrust::detail::normal_iterator.427"*
  ret %"class.thrust::detail::normal_iterator.427"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl(%"class.thrust::iterator_adaptor.428"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.428"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.428"* %this, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.428"*, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.137"* %m_iterator to %"class.thrust::iterator_facade.140"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl(%"class.thrust::iterator_facade.140"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl(%"class.thrust::iterator_facade.140"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.140"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.140"* %this, %"class.thrust::iterator_facade.140"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.140"*, %"class.thrust::iterator_facade.140"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.140"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIaaEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::device_ptr.137"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.140"* %this1)
  ret %"class.thrust::device_ptr.137"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIaaEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::device_ptr.137"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.137"* %f, %"class.thrust::device_ptr.137"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.137"* %0 to %"class.thrust::iterator_adaptor.139"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl(%"class.thrust::iterator_adaptor.139"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.140"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.140"*, align 8
  store %"class.thrust::iterator_facade.140"* %this, %"class.thrust::iterator_facade.140"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.140"*, %"class.thrust::iterator_facade.140"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.140"* %this1 to %"class.thrust::device_ptr.137"*
  ret %"class.thrust::device_ptr.137"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl(%"class.thrust::iterator_adaptor.139"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.139"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.139"* %this, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.139"*, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !111
  %add.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %1, i64 %0
  store %"struct.thrust::pair"* %add.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !111
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIaaEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_(%"class.thrust::detail::temporary_array.433"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system, %"struct.thrust::execution_policy.120"* dereferenceable(1) %input_system, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_array.433"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %input_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.435", align 8
  %ref.tmp11 = alloca %"class.thrust::detail::temporary_allocator.436", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp28 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp29 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp30 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  store %"class.thrust::detail::temporary_array.433"* %this, %"class.thrust::detail::temporary_array.433"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %system, %"struct.thrust::execution_policy.88"** %system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %input_system, %"struct.thrust::execution_policy.120"** %input_system.addr, align 8, !tbaa !7
  %this10 = load %"class.thrust::detail::temporary_array.433"*, %"class.thrust::detail::temporary_array.433"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.433"* %this10 to %"class.thrust::detail::contiguous_storage.434"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.436"* %ref.tmp11, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.435"* %ref.tmp, %"class.thrust::detail::temporary_allocator.436"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_(%"class.thrust::detail::contiguous_storage.434"* %0, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont13 unwind label %lpad12

invoke.cont13:                                    ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.437"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.435"*)*)(%"struct.thrust::detail::no_throw_allocator.435"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.437"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.436"*)*)(%"class.thrust::detail::temporary_allocator.436"* %ref.tmp11) #5
  %2 = bitcast %"class.thrust::detail::temporary_array.433"* %this10 to %"class.thrust::detail::contiguous_storage.434"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp14 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive18, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp14, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive23, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive24, align 8
  %call = invoke i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(%"struct.thrust::pair"* %7, %"struct.thrust::pair"* %8)
          to label %invoke.cont26 unwind label %lpad25

invoke.cont26:                                    ; preds = %invoke.cont13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.434"* %2, i64 %call)
          to label %invoke.cont27 unwind label %lpad25

invoke.cont27:                                    ; preds = %invoke.cont26
  %9 = bitcast %"class.thrust::detail::temporary_array.433"* %this10 to %"class.thrust::detail::contiguous_storage.434"*
  %10 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %input_system.addr, align 8
  %11 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp28 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp29 to i8*
  %14 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 8, i32 8, i1 false)
  %15 = bitcast %"class.thrust::detail::temporary_array.433"* %this10 to %"class.thrust::detail::contiguous_storage.434"*
  %call32 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.434"* %15)
          to label %invoke.cont31 unwind label %lpad25

invoke.cont31:                                    ; preds = %invoke.cont27
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp30, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive35, i32 0, i32 0
  store %"struct.thrust::pair"* %call32, %"struct.thrust::pair"** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp28, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive40, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive41, align 8
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp29, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive45, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive46, align 8
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp30, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive49, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive50, align 8
  %call52 = invoke %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_(%"class.thrust::detail::contiguous_storage.434"* %9, %"struct.thrust::execution_policy.120"* dereferenceable(1) %10, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %17, %"struct.thrust::pair"* %18)
          to label %invoke.cont51 unwind label %lpad25

invoke.cont51:                                    ; preds = %invoke.cont31
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %coerce, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive55, i32 0, i32 0
  store %"struct.thrust::pair"* %call52, %"struct.thrust::pair"** %coerce.dive56, align 8
  ret void

lpad:                                             ; preds = %entry
  %19 = landingpad { i8*, i32 }
          cleanup
  %20 = extractvalue { i8*, i32 } %19, 0
  store i8* %20, i8** %exn.slot, align 8
  %21 = extractvalue { i8*, i32 } %19, 1
  store i32 %21, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad12:                                           ; preds = %invoke.cont
  %22 = landingpad { i8*, i32 }
          cleanup
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.437"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.435"*)*)(%"struct.thrust::detail::no_throw_allocator.435"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad12, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.437"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.436"*)*)(%"class.thrust::detail::temporary_allocator.436"* %ref.tmp11) #5
  br label %eh.resume

lpad25:                                           ; preds = %invoke.cont31, %invoke.cont27, %invoke.cont26, %invoke.cont13
  %25 = landingpad { i8*, i32 }
          cleanup
  %26 = extractvalue { i8*, i32 } %25, 0
  store i8* %26, i8** %exn.slot, align 8
  %27 = extractvalue { i8*, i32 } %25, 1
  store i32 %27, i32* %ehselector.slot, align 4
  %28 = bitcast %"class.thrust::detail::temporary_array.433"* %this10 to %"class.thrust::detail::contiguous_storage.434"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.434"* %28) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad25, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val58 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val58
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.436"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.436"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.436"* %this, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %system, %"struct.thrust::execution_policy.88"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.436"*, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.436"* %this1 to %"class.thrust::detail::tagged_allocator.437"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.437"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.436", %"class.thrust::detail::temporary_allocator.436"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cpp::detail::tag"* %call, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.436"* %this1 to %"class.thrust::detail::tagged_allocator.437"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.437"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.435"* %this, %"class.thrust::detail::temporary_allocator.436"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.436"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %this, %"struct.thrust::detail::no_throw_allocator.435"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.436"* %other, %"class.thrust::detail::temporary_allocator.436"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.435"* %this1 to %"class.thrust::detail::temporary_allocator.436"*
  %1 = load %"class.thrust::detail::temporary_allocator.436"*, %"class.thrust::detail::temporary_allocator.436"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.436"* %0, %"class.thrust::detail::temporary_allocator.436"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_(%"class.thrust::detail::contiguous_storage.434"* %this, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.435"* %alloc, %"struct.thrust::detail::no_throw_allocator.435"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.435"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.442"* %agg.tmp, %"struct.thrust::pair"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.439"* %m_begin, %"struct.thrust::pair"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !305
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.437"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.435"*)*)(%"struct.thrust::detail::no_throw_allocator.435"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.437"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.437"*, align 8
  store %"class.thrust::detail::tagged_allocator.437"* %this, %"class.thrust::detail::tagged_allocator.437"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.437"*, %"class.thrust::detail::tagged_allocator.437"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.434"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.442", align 8
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.439"* %ref.tmp, %"struct.thrust::pair"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.439"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.439"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !305
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.442"* %agg.tmp7, %"struct.thrust::pair"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive8, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.439"* %ref.tmp6, %"struct.thrust::pair"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.439"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.439"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !305
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(%"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive14, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp10, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive19, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive20, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_(%"struct.thrust::pair"* %4, %"struct.thrust::pair"* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_(%"class.thrust::detail::contiguous_storage.434"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp15 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp16 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp17 = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive13, align 8
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  %this14 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this14, i32 0, i32 0
  %1 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp15 to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp16 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.439"* %result to %"class.thrust::iterator_adaptor.440"*
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.440"* %5)
  %6 = bitcast %"class.thrust::pointer.442"* %agg.tmp17 to i8*
  %7 = bitcast %"class.thrust::pointer.442"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp15, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive21, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp16, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive26, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp17, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive28, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive29, align 8
  %call30 = call %"struct.thrust::pair"* @_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %m_allocator, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair"* %call30, %"struct.thrust::pair"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive33, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive34, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.439"* %retval, %"struct.thrust::pair"* %11)
  %coerce.dive35 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %retval, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive37, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive38, align 8
  ret %"struct.thrust::pair"* %12
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.434"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.434"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.437"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.435"*)*)(%"struct.thrust::detail::no_throw_allocator.435"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.437"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.435"*)*)(%"struct.thrust::detail::no_throw_allocator.435"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.437"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.437"*, align 8
  store %"class.thrust::detail::tagged_allocator.437"* %this, %"class.thrust::detail::tagged_allocator.437"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.437"*, %"class.thrust::detail::tagged_allocator.437"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.436"* %this, %"class.thrust::detail::temporary_allocator.436"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.436"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.436"*, align 8
  store %"class.thrust::detail::temporary_allocator.436"* %this, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.436"* %other, %"class.thrust::detail::temporary_allocator.436"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.436"*, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.436"* %this1 to %"class.thrust::detail::tagged_allocator.437"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.437"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.436", %"class.thrust::detail::temporary_allocator.436"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.436"*, %"class.thrust::detail::temporary_allocator.436"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.436", %"class.thrust::detail::temporary_allocator.436"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cpp::detail::tag"* %ref, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.435"* %this, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %this, %"struct.thrust::detail::no_throw_allocator.435"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.435"* %0, %"struct.thrust::detail::no_throw_allocator.435"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.435"* %this1 to %"class.thrust::detail::temporary_allocator.436"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.435"* %2 to %"class.thrust::detail::temporary_allocator.436"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.436"* %1, %"class.thrust::detail::temporary_allocator.436"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.442"* %this, %"struct.thrust::pair"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.442"*, align 8
  %other.addr = alloca %"struct.thrust::pair"*, align 8
  store %"class.thrust::pointer.442"* %this, %"class.thrust::pointer.442"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %other, %"struct.thrust::pair"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.442"* %this1 to %"class.thrust::iterator_adaptor.443"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.443"* %0, %"struct.thrust::pair"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.439"* %this, %"struct.thrust::pair"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.439"* %this, %"class.thrust::detail::normal_iterator.439"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.439"* %this2 to %"class.thrust::iterator_adaptor.440"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.440"* %0, %"class.thrust::pointer.442"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.443"* %this, %"struct.thrust::pair"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.443"*, align 8
  %iter.addr = alloca %"struct.thrust::pair"**, align 8
  store %"class.thrust::iterator_adaptor.443"* %this, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"** %iter, %"struct.thrust::pair"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.443"*, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.443"* %this1 to %"class.thrust::iterator_facade.444"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"**, %"struct.thrust::pair"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !309
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::pointer.442"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.440"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.442"*, align 8
  store %"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.442"* %iter, %"class.thrust::pointer.442"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.440"*, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.440"* %this1 to %"class.thrust::iterator_facade.441"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.442"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.442"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.435"* %0 to %"class.thrust::detail::temporary_allocator.436"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.436"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.436"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.436"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.445", align 8
  %ref.tmp = alloca %"struct.thrust::pair.446", align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.436"* %this, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.436"*, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.445"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.436"* %this1)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIaaEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.446"* %ref.tmp to { %"struct.thrust::pair"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 0
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.445"* %result, %"struct.thrust::pair.446"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.445", %"struct.thrust::pair.445"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !311
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.445", %"struct.thrust::pair.445"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.442"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  %13 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.436"* %this1, %"struct.thrust::pair"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.445"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.445", %"struct.thrust::pair.445"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.442"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.442"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.445"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive11, i32 0, i32 0
  %25 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive12, align 8
  ret %"struct.thrust::pair"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIaaEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.446", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.446", align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIaaEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.446"* %agg.tmp to { %"struct.thrust::pair"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 0
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.446"* %agg.tmp to { %"struct.thrust::pair"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIaaEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.446"* %retval to { %"struct.thrust::pair"*, i64 }*
  %14 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"struct.thrust::pair"*, i64 } %call3, 0
  store %"struct.thrust::pair"* %15, %"struct.thrust::pair"** %14, align 8
  %16 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"struct.thrust::pair"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.446"* %retval to { %"struct.thrust::pair"*, i64 }*
  %19 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %18, align 8
  ret { %"struct.thrust::pair"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.436"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.436"*, align 8
  store %"class.thrust::detail::temporary_allocator.436"* %this, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.436"*, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.436", %"class.thrust::detail::temporary_allocator.436"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cpp::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.445"* %this, %"struct.thrust::pair.446"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.445"*, align 8
  %p.addr = alloca %"struct.thrust::pair.446"*, align 8
  store %"struct.thrust::pair.445"* %this, %"struct.thrust::pair.445"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.446"* %p, %"struct.thrust::pair.446"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.445"*, %"struct.thrust::pair.445"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.445", %"struct.thrust::pair.445"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.446"*, %"struct.thrust::pair.446"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.446", %"struct.thrust::pair.446"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.442"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.445", %"struct.thrust::pair.445"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.446"*, %"struct.thrust::pair.446"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.446", %"struct.thrust::pair.446"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !314
  store i64 %4, i64* %second, align 8, !tbaa !311
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.436"* %this, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.436"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.436"* %this, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.436"*, %"class.thrust::detail::temporary_allocator.436"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.436"* %this2)
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0, %"struct.thrust::pair"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIaaEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.446", align 8
  %p = alloca %"struct.thrust::pair.446", align 8
  %ptr = alloca %"class.thrust::pointer.442", align 8
  %0 = bitcast %"struct.thrust::pair.446"* %p to { %"struct.thrust::pair"*, i64 }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.442"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.446", %"struct.thrust::pair.446"* %p, i32 0, i32 0
  %call = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.442"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.442"* %ptr, %"struct.thrust::pair"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.446", %"struct.thrust::pair.446"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.446"* %retval, %"class.thrust::pointer.442"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.442"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.446"* %retval to { %"struct.thrust::pair"*, i64 }*
  %6 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %5, align 8
  ret { %"struct.thrust::pair"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIaaEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.446", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.442"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust6mallocINS_4pairIaaEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.442"* %ptr)
  %tobool = icmp ne %"struct.thrust::pair"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.442"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  %call5 = call { %"struct.thrust::pair"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.446"* %retval to { %"struct.thrust::pair"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair"*, i64 } %call5, 0
  store %"struct.thrust::pair"* %10, %"struct.thrust::pair"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.442"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.446"* %retval to { %"struct.thrust::pair"*, i64 }*
  %15 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %14, align 8
  ret { %"struct.thrust::pair"*, i64 } %15
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.442"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.442"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  store %"class.thrust::pointer.442"* %ptr, %"class.thrust::pointer.442"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair"* %3)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.446"* %this, %"class.thrust::pointer.442"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.446"*, align 8
  %x.addr = alloca %"class.thrust::pointer.442"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.446"* %this, %"struct.thrust::pair.446"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.442"* %x, %"class.thrust::pointer.442"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.446"*, %"struct.thrust::pair.446"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.446", %"struct.thrust::pair.446"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.446", %"struct.thrust::pair.446"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !314
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.442"* %ptr)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.442"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.442"*, align 8
  store %"class.thrust::pointer.442"* %this, %"class.thrust::pointer.442"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.442"* %this1 to %"class.thrust::iterator_adaptor.443"*
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.443"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.443"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.443"*, align 8
  store %"class.thrust::iterator_adaptor.443"* %this, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.443"*, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6mallocINS_4pairIaaEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.442", align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::pair"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIaaEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.442"* dereferenceable(8) %ref.tmp)
  store %"struct.thrust::pair"* %call4, %"struct.thrust::pair"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.442"* %retval, %"struct.thrust::pair"* %4)
  %5 = bitcast %"struct.thrust::pair"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive5, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  ret %"struct.thrust::pair"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.446", align 8
  %x = alloca %"class.thrust::pointer.442", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %x.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.446"* %retval, %"class.thrust::pointer.442"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.446"* %retval to { %"struct.thrust::pair"*, i64 }*
  %1 = load { %"struct.thrust::pair"*, i64 }, { %"struct.thrust::pair"*, i64 }* %0, align 8
  ret { %"struct.thrust::pair"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIaaEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.447", align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.447"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 2, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system3cpp6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.447", %"class.thrust::pointer.447"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.448", %"class.thrust::iterator_adaptor.448"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.447"* %void_ptr)
  %4 = bitcast i8* %call2 to %"struct.thrust::pair"*
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.442"* %retval, %"struct.thrust::pair"* %4)
  %5 = bitcast %"class.thrust::pointer.447"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  ret %"struct.thrust::pair"* %6
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZN6thrust6mallocINS_6system3cpp6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.447", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call i8* @_ZN6thrust6system6detail10sequential6mallocINS0_3cpp6detail3tagEEEPvRNS2_16execution_policyIT_EEm(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %2, i64 %3)
  store i8* %call2, i8** %ref.tmp, align 8, !tbaa !1
  %call3 = call i8* @_ZN6thrust16raw_pointer_castIPvEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i8** dereferenceable(8) %ref.tmp)
  store i8* %call3, i8** %raw_ptr, align 8, !tbaa !1
  %4 = load i8*, i8** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_EC2IvEEPT_(%"class.thrust::pointer.447"* %retval, i8* %4)
  %5 = bitcast i8** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.447", %"class.thrust::pointer.447"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.448", %"class.thrust::iterator_adaptor.448"* %coerce.dive, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive4, align 8
  ret i8* %6
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNK6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.447"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.447"*, align 8
  store %"class.thrust::pointer.447"* %this, %"class.thrust::pointer.447"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.447"*, %"class.thrust::pointer.447"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.447"* %this1 to %"class.thrust::iterator_adaptor.448"*
  %call = call dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlE4baseEv(%"class.thrust::iterator_adaptor.448"* %0)
  %1 = load i8*, i8** %call, align 8, !tbaa !1
  ret i8* %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i8* @_ZN6thrust6system6detail10sequential6mallocINS0_3cpp6detail3tagEEEPvRNS2_16execution_policyIT_EEm(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i64 %n) #9 comdat {
entry:
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call noalias i8* @malloc(i64 %1) #5
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_EC2IvEEPT_(%"class.thrust::pointer.447"* %this, i8* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.447"*, align 8
  %other.addr = alloca i8*, align 8
  store %"class.thrust::pointer.447"* %this, %"class.thrust::pointer.447"** %this.addr, align 8, !tbaa !1
  store i8* %other, i8** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.447"*, %"class.thrust::pointer.447"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.447"* %this1 to %"class.thrust::iterator_adaptor.448"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEC2ERKS8_(%"class.thrust::iterator_adaptor.448"* %0, i8** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: nounwind
declare noalias i8* @malloc(i64) #4

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEC2ERKS8_(%"class.thrust::iterator_adaptor.448"* %this, i8** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.448"*, align 8
  %iter.addr = alloca i8**, align 8
  store %"class.thrust::iterator_adaptor.448"* %this, %"class.thrust::iterator_adaptor.448"** %this.addr, align 8, !tbaa !1
  store i8** %iter, i8*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.448"*, %"class.thrust::iterator_adaptor.448"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.448"* %this1 to %"class.thrust::iterator_facade.449"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.448", %"class.thrust::iterator_adaptor.448"* %this1, i32 0, i32 0
  %1 = load i8**, i8*** %iter.addr, align 8
  %2 = load i8*, i8** %1, align 8, !tbaa !1
  store i8* %2, i8** %m_iterator, align 8, !tbaa !316
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i8** @_ZNK6thrust16iterator_adaptorINS_7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlE4baseEv(%"class.thrust::iterator_adaptor.448"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.448"*, align 8
  store %"class.thrust::iterator_adaptor.448"* %this, %"class.thrust::iterator_adaptor.448"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.448"*, %"class.thrust::iterator_adaptor.448"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.448", %"class.thrust::iterator_adaptor.448"* %this1, i32 0, i32 0
  ret i8** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.442", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.442"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair"* %4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair"* %ptr.coerce) #8 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.442", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %call = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.442"* dereferenceable(8) %ptr)
  %1 = bitcast %"struct.thrust::pair"* %call to i8*
  call void @free(i8* %1) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_(%"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive15, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp10, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive20, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE(%"struct.thrust::pair"* %4, %"struct.thrust::pair"* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE(%"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to %"class.thrust::iterator_facade.429"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to %"class.thrust::iterator_facade.429"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.429"* dereferenceable(1) %1, %"class.thrust::iterator_facade.429"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.429"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.429"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.429"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.429"*, align 8
  store %"class.thrust::iterator_facade.429"* %lhs, %"class.thrust::iterator_facade.429"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.429"* %rhs, %"class.thrust::iterator_facade.429"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.429"*, %"class.thrust::iterator_facade.429"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.429"* %0 to %"class.thrust::detail::normal_iterator.427"*
  %2 = load %"class.thrust::iterator_facade.429"*, %"class.thrust::iterator_facade.429"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.429"* %2 to %"class.thrust::detail::normal_iterator.427"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.427"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.427"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.427"* %f1, %"class.thrust::detail::normal_iterator.427"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.427"* %f2, %"class.thrust::detail::normal_iterator.427"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.427"*, %"class.thrust::detail::normal_iterator.427"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.427"*, %"class.thrust::detail::normal_iterator.427"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.427"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.427"*, align 8
  store %"class.thrust::detail::normal_iterator.427"* %f1, %"class.thrust::detail::normal_iterator.427"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.427"* %f2, %"class.thrust::detail::normal_iterator.427"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.427"*, %"class.thrust::detail::normal_iterator.427"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.427"* %1 to %"class.thrust::iterator_adaptor.428"*
  %3 = load %"class.thrust::detail::normal_iterator.427"*, %"class.thrust::detail::normal_iterator.427"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %3 to %"class.thrust::iterator_adaptor.428"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.428"* %2, %"class.thrust::iterator_adaptor.428"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.428"* %this, %"class.thrust::iterator_adaptor.428"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.428"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.428"*, align 8
  store %"class.thrust::iterator_adaptor.428"* %this, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.428"* %y, %"class.thrust::iterator_adaptor.428"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.428"*, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.428"*, %"class.thrust::iterator_adaptor.428"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv(%"class.thrust::iterator_adaptor.428"* %0)
  %1 = bitcast %"class.thrust::device_ptr.137"* %call to %"class.thrust::iterator_facade.140"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.137"* %m_iterator to %"class.thrust::iterator_facade.140"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.140"* dereferenceable(1) %1, %"class.thrust::iterator_facade.140"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.140"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.140"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.140"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.140"*, align 8
  store %"class.thrust::iterator_facade.140"* %lhs, %"class.thrust::iterator_facade.140"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.140"* %rhs, %"class.thrust::iterator_facade.140"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.140"*, %"class.thrust::iterator_facade.140"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.140"* %0 to %"class.thrust::device_ptr.137"*
  %2 = load %"class.thrust::iterator_facade.140"*, %"class.thrust::iterator_facade.140"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.140"* %2 to %"class.thrust::device_ptr.137"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIaaEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::device_ptr.137"* dereferenceable(8) %1, %"class.thrust::device_ptr.137"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv(%"class.thrust::iterator_adaptor.428"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.428"*, align 8
  store %"class.thrust::iterator_adaptor.428"* %this, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.428"*, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.137"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIaaEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::device_ptr.137"* dereferenceable(8) %f1, %"class.thrust::device_ptr.137"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.137"* %f1, %"class.thrust::device_ptr.137"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.137"* %f2, %"class.thrust::device_ptr.137"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIaaEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.137"* dereferenceable(8) %0, %"class.thrust::device_ptr.137"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIaaEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.137"* dereferenceable(8) %f1, %"class.thrust::device_ptr.137"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  store %"class.thrust::device_ptr.137"* %f1, %"class.thrust::device_ptr.137"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.137"* %f2, %"class.thrust::device_ptr.137"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.137"* %1 to %"class.thrust::iterator_adaptor.139"*
  %3 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.137"* %3 to %"class.thrust::iterator_adaptor.139"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.139"* %2, %"class.thrust::iterator_adaptor.139"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.139"* %this, %"class.thrust::iterator_adaptor.139"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.139"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.139"*, align 8
  store %"class.thrust::iterator_adaptor.139"* %this, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.139"* %y, %"class.thrust::iterator_adaptor.139"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.139"*, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.139"*, %"class.thrust::iterator_adaptor.139"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.139"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !111
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.139"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.139"*, align 8
  store %"class.thrust::iterator_adaptor.139"* %this, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.139"*, %"class.thrust::iterator_adaptor.139"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp13 = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %1 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::pointer.442"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp13, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive24, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive25, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %1, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive26, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive28, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive29, align 8
  ret %"struct.thrust::pair"* %11
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.442"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.440"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.440"*, align 8
  store %"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.440"*, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.442"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp13 = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %1 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %1)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::pointer.442"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive17, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive22, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp13, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive24, i32 0, i32 0
  %11 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive25, align 8
  %call26 = call %"struct.thrust::pair"* @_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10, %"struct.thrust::pair"* %11)
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive27, i32 0, i32 0
  store %"struct.thrust::pair"* %call26, %"struct.thrust::pair"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive29, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive30, align 8
  ret %"struct.thrust::pair"* %12
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp16 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp17 = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %system1, %"struct.thrust::execution_policy.120"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call12 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %3 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.88"* %3 to %"struct.thrust::detail::execution_policy_base.85"*
  %call13 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4)
  %call14 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call13)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call14 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call15 = call { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call15, 0
  store %"struct.thrust::execution_policy.120"* %8, %"struct.thrust::execution_policy.120"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call15, 1
  store %"struct.thrust::execution_policy.88"* %10, %"struct.thrust::execution_policy.88"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.229"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp16 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::pointer.442"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive21, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp16, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive26, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp17, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive28, i32 0, i32 0
  %20 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive29, align 8
  %call30 = call %"struct.thrust::pair"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %11, %"struct.thrust::pair"* %18, %"struct.thrust::pair"* %19, %"struct.thrust::pair"* %20)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair"* %call30, %"struct.thrust::pair"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive33, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive34, align 8
  ret %"struct.thrust::pair"* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.229"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp15 = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.229"* %exec, %"struct.thrust::detail::execution_policy_base.229"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.229"*, %"struct.thrust::detail::execution_policy_base.229"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.229"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %0)
  %call12 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %call12 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp13 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp14 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::pointer.442"* %agg.tmp15 to i8*
  %8 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp13, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive19, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive20, align 8
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp14, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive24, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive25, align 8
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp15, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive26, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  %call28 = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %11, %"struct.thrust::execution_policy.88"* %13, %"struct.thrust::pair"* %14, %"struct.thrust::pair"* %15, %"struct.thrust::pair"* %16)
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive29, i32 0, i32 0
  store %"struct.thrust::pair"* %call28, %"struct.thrust::pair"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive31, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive32, align 8
  ret %"struct.thrust::pair"* %17
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.442", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.427"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.442"* %agg.tmp14 to i8*
  %10 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp12, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive18, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive23, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive24, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp14, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive25, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %17, %"struct.thrust::pair"* %18)
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive27, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive29, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive30, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::detail::execution_policy_base.229"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %x) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::detail::execution_policy_base.229"*, align 8
  store %"struct.thrust::detail::execution_policy_base.229"* %x, %"struct.thrust::detail::execution_policy_base.229"** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.229"*, %"struct.thrust::detail::execution_policy_base.229"** %x.addr, align 8
  ret %"struct.thrust::detail::execution_policy_base.229"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp15 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp16 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.427"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.427"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.442"* %agg.tmp14 to i8*
  %10 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive20, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp13, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive25, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp14, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive27, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive28, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %17, %"struct.thrust::pair"* %18)
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive29, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive31, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive32, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp15 = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp16 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp17 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp18 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp13 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.427"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp14 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.427"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.442"* %agg.tmp15 to i8*
  %10 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp13, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive22, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive27, i32 0, i32 0
  %17 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp15, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive29, i32 0, i32 0
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive30, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %17, %"struct.thrust::pair"* %18)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive33, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive34, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.442", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %begin.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %end.coerce, %"struct.thrust::pair"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.427"* %end to %"class.thrust::iterator_facade.429"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.427"* %begin to %"class.thrust::iterator_facade.429"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.429"* dereferenceable(1) %7, %"class.thrust::iterator_facade.429"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.427"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.427"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::pointer.442"* %agg.tmp14 to i8*
  %13 = bitcast %"class.thrust::pointer.442"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive18, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp14, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive20, i32 0, i32 0
  %15 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive21, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair"* %14, i64 %11, %"struct.thrust::pair"* %15)
  %16 = bitcast %"class.thrust::pointer.442"* %result to %"class.thrust::iterator_facade.444"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call22 = call %"struct.thrust::pair"* @_ZN6thrustplINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.444"* dereferenceable(1) %16, i64 %17)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive23, i32 0, i32 0
  store %"struct.thrust::pair"* %call22, %"struct.thrust::pair"** %coerce.dive24, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive25, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  ret %"struct.thrust::pair"* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair"* %first.coerce, i64 %n, %"struct.thrust::pair"* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %result = alloca %"class.thrust::pointer.442", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce = alloca %"class.thrust::reference.450", align 8
  %src = alloca i8*, align 8
  %ref.tmp14 = alloca %"class.thrust::device_ptr.137", align 8
  %coerce16 = alloca %"class.thrust::device_reference.451", align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %result, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %result.coerce, %"struct.thrust::pair"** %coerce.dive6, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::pointer.442"* %result to %"class.thrust::iterator_facade.444"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.444"* %1)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %coerce, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive9, align 8
  %call10 = call %"struct.thrust::pair"* @_ZNK6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.450"* %coerce)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive11, i32 0, i32 0
  store %"struct.thrust::pair"* %call10, %"struct.thrust::pair"** %coerce.dive12, align 8
  %call13 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.442"* dereferenceable(8) %ref.tmp)
  %2 = bitcast %"struct.thrust::pair"* %call13 to i8*
  store i8* %2, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = bitcast %"class.thrust::detail::normal_iterator.427"* %first to %"class.thrust::iterator_facade.429"*
  %call15 = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv(%"class.thrust::iterator_facade.429"* %4)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %coerce16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair"* %call15, %"struct.thrust::pair"** %coerce.dive21, align 8
  %5 = bitcast %"class.thrust::device_reference.451"* %coerce16 to %"class.thrust::reference.452"*
  %call22 = call %"struct.thrust::pair"* @_ZNK6thrust9referenceIKNS_4pairIaaEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv(%"class.thrust::reference.452"* %5)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %ref.tmp14, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive24, i32 0, i32 0
  store %"struct.thrust::pair"* %call22, %"struct.thrust::pair"** %coerce.dive25, align 8
  %call26 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIaaEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_(%"class.thrust::device_ptr.137"* dereferenceable(8) %ref.tmp14)
  %6 = bitcast %"struct.thrust::pair"* %call26 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.120"* %ref to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %11, i32 0, i32 1
  %ref28 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.88"* %ref28 to %"struct.thrust::detail::execution_policy_base.85"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call29 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call30 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS2_3tagENS0_3cpp6detail3tagEEE14cudaMemcpyKindRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %10, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %13)
  store i32 %call30, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system131 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %15, i32 0, i32 0
  %ref32 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system131, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.120"* %ref32 to %"struct.thrust::detail::execution_policy_base.121"*
  %call33 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call33 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system234 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %18, i32 0, i32 1
  %ref35 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system234, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.88"* %ref35 to %"struct.thrust::detail::execution_policy_base.85"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call36 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS2_3tagENS0_3cpp6detail3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %17, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call37, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 2
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrustplINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.444"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.442", align 8
  store %"class.thrust::iterator_facade.444"* %i, %"class.thrust::iterator_facade.444"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.442"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.444"* %1 to %"class.thrust::pointer.442"*
  %3 = bitcast %"class.thrust::pointer.442"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.442"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.442"* %tmp to %"class.thrust::iterator_facade.444"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.444"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.442"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.442"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.442"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive1, align 8
  ret %"struct.thrust::pair"* %10
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.444"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.450", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  store %"class.thrust::iterator_facade.444"* %this, %"class.thrust::iterator_facade.444"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.444"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.442"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.450"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %this.addr = alloca %"class.thrust::reference.450"*, align 8
  store %"class.thrust::reference.450"* %this, %"class.thrust::reference.450"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.442"* %retval to i8*
  %1 = bitcast %"class.thrust::pointer.442"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIaaEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_(%"class.thrust::device_ptr.137"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.137", align 8
  store %"class.thrust::device_ptr.137"* %ptr, %"class.thrust::device_ptr.137"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.137"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.137"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive1, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIaaEEEEE3getES6_(%"struct.thrust::pair"* %3)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv(%"class.thrust::iterator_facade.429"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.451", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.429"*, align 8
  store %"class.thrust::iterator_facade.429"* %this, %"class.thrust::iterator_facade.429"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.429"*, %"class.thrust::iterator_facade.429"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.427"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.429"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENT_9referenceERKSA_(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust9referenceIKNS_4pairIaaEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv(%"class.thrust::reference.452"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.137", align 8
  %this.addr = alloca %"class.thrust::reference.452"*, align 8
  store %"class.thrust::reference.452"* %this, %"class.thrust::reference.452"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.452"*, %"class.thrust::reference.452"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.137"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.137"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS2_3tagENS0_3cpp6detail3tagEEE14cudaMemcpyKindRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1)) #1 comdat {
entry:
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %.addr1 = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %1, %"struct.thrust::system::cpp::detail::execution_policy.86"** %.addr1, align 8, !tbaa !7
  ret i32 2
}

; Function Attrs: uwtable
define linkonce_odr %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS2_3tagENS0_3cpp6detail3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1)) #0 comdat {
entry:
  %retval = alloca %struct.CUstream_st*, align 8
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %.addr = alloca %"struct.thrust::system::cpp::detail::execution_policy.86"*, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cpp::detail::execution_policy.86"* %0, %"struct.thrust::system::cpp::detail::execution_policy.86"** %.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %call = call zeroext i1 @_ZN6thrust6system4cuda6detail19trivial_copy_detail12_GLOBAL__N_115is_valid_policyINS2_16execution_policyINS2_3tagEEEEEbRKT_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1)
  br i1 %call, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %2 to %"struct.thrust::detail::execution_policy_base.121"*
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERKT_RKNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call2 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %4)
  store %struct.CUstream_st* %call2, %struct.CUstream_st** %retval, align 8
  br label %return

if.end:                                           ; preds = %entry
  %call3 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail13legacy_streamEv()
  store %struct.CUstream_st* %call3, %struct.CUstream_st** %retval, align 8
  br label %return

return:                                           ; preds = %if.end, %if.then
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %retval, align 8
  ret %struct.CUstream_st* %5
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.442"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.450", align 8
  %f.addr = alloca %"class.thrust::pointer.442"*, align 8
  store %"class.thrust::pointer.442"* %f, %"class.thrust::pointer.442"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %f.addr, align 8
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.442"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.442"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.444"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  store %"class.thrust::iterator_facade.444"* %this, %"class.thrust::iterator_facade.444"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.444"* %this1 to %"class.thrust::pointer.442"*
  ret %"class.thrust::pointer.442"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.442"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.450", align 8
  %this.addr = alloca %"class.thrust::pointer.442"*, align 8
  store %"class.thrust::pointer.442"* %this, %"class.thrust::pointer.442"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %this.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.450"* %retval, %"class.thrust::pointer.442"* dereferenceable(8) %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.450"* %this, %"class.thrust::pointer.442"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.450"*, align 8
  %ptr.addr = alloca %"class.thrust::pointer.442"*, align 8
  store %"class.thrust::reference.450"* %this, %"class.thrust::reference.450"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.442"* %ptr, %"class.thrust::pointer.442"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIaaEEEEE3getES6_(%"struct.thrust::pair"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.137", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %ptr.coerce, %"struct.thrust::pair"** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.137"* %ptr to %"class.thrust::pointer.138"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv(%"class.thrust::pointer.138"* %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv(%"class.thrust::pointer.138"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.138"*, align 8
  store %"class.thrust::pointer.138"* %this, %"class.thrust::pointer.138"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.138"*, %"class.thrust::pointer.138"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.138"* %this1 to %"class.thrust::iterator_adaptor.139"*
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.139"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEEEENT_9referenceERKSA_(%"class.thrust::detail::normal_iterator.427"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.451", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.427"*, align 8
  store %"class.thrust::detail::normal_iterator.427"* %f, %"class.thrust::detail::normal_iterator.427"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.427"*, %"class.thrust::detail::normal_iterator.427"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.427"* %0 to %"class.thrust::iterator_adaptor.428"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv(%"class.thrust::iterator_adaptor.428"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.427"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.429"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.429"*, align 8
  store %"class.thrust::iterator_facade.429"* %this, %"class.thrust::iterator_facade.429"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.429"*, %"class.thrust::iterator_facade.429"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.429"* %this1 to %"class.thrust::detail::normal_iterator.427"*
  ret %"class.thrust::detail::normal_iterator.427"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv(%"class.thrust::iterator_adaptor.428"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.451", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.428"*, align 8
  store %"class.thrust::iterator_adaptor.428"* %this, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.428"*, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.137"* %m_iterator to %"class.thrust::iterator_facade.140"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv(%"class.thrust::iterator_facade.140"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive9, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv(%"class.thrust::iterator_facade.140"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.451", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.140"*, align 8
  store %"class.thrust::iterator_facade.140"* %this, %"class.thrust::iterator_facade.140"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.140"*, %"class.thrust::iterator_facade.140"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.140"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIaaEEEEEENT_9referenceERKS7_(%"class.thrust::device_ptr.137"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIaaEEEEEENT_9referenceERKS7_(%"class.thrust::device_ptr.137"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.451", align 8
  %f.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  store %"class.thrust::device_ptr.137"* %f, %"class.thrust::device_ptr.137"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.137"* %0 to %"class.thrust::pointer.138"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv(%"class.thrust::pointer.138"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.137"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIaaEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.140"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.140"*, align 8
  store %"class.thrust::iterator_facade.140"* %this, %"class.thrust::iterator_facade.140"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.140"*, %"class.thrust::iterator_facade.140"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.140"* %this1 to %"class.thrust::device_ptr.137"*
  ret %"class.thrust::device_ptr.137"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv(%"class.thrust::pointer.138"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.451", align 8
  %this.addr = alloca %"class.thrust::pointer.138"*, align 8
  store %"class.thrust::pointer.138"* %this, %"class.thrust::pointer.138"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.138"*, %"class.thrust::pointer.138"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.138"* %this1 to %"class.thrust::device_ptr.137"*
  call void @_ZN6thrust16device_referenceIKNS_4pairIaaEEEC2ERKNS_10device_ptrIS3_EE(%"class.thrust::device_reference.451"* %retval, %"class.thrust::device_ptr.137"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.451", %"class.thrust::device_reference.451"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceIKNS_4pairIaaEEEC2ERKNS_10device_ptrIS3_EE(%"class.thrust::device_reference.451"* %this, %"class.thrust::device_ptr.137"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.451"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  store %"class.thrust::device_reference.451"* %this, %"class.thrust::device_reference.451"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.137"* %ptr, %"class.thrust::device_ptr.137"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.451"*, %"class.thrust::device_reference.451"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.451"* %this1 to %"class.thrust::reference.452"*
  %1 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceIKNS_4pairIaaEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_(%"class.thrust::reference.452"* %0, %"class.thrust::device_ptr.137"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceIKNS_4pairIaaEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_(%"class.thrust::reference.452"* %this, %"class.thrust::device_ptr.137"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.452"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  store %"class.thrust::reference.452"* %this, %"class.thrust::reference.452"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.137"* %ptr, %"class.thrust::device_ptr.137"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.452"*, %"class.thrust::reference.452"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.452", %"class.thrust::reference.452"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.137"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.137"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.444"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.444"* %this, %"class.thrust::iterator_facade.444"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.444"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.442"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.444"* %this1)
  ret %"class.thrust::pointer.442"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.442"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.442"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.442"* %f, %"class.thrust::pointer.442"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %0 to %"class.thrust::iterator_adaptor.443"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.443"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.444"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  store %"class.thrust::iterator_facade.444"* %this, %"class.thrust::iterator_facade.444"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.444"* %this1 to %"class.thrust::pointer.442"*
  ret %"class.thrust::pointer.442"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.443"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.443"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.443"* %this, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.443"*, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !309
  %add.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %1, i64 %0
  store %"struct.thrust::pair"* %add.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !309
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.435"* %0 to %"class.thrust::detail::temporary_allocator.436"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.436"* %1)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.434"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.442", align 8
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.434"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.439"* %m_begin to %"class.thrust::iterator_adaptor.440"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.440"* %0)
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.434"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %m_allocator, %"struct.thrust::pair"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.442"* %agg.tmp6, %"struct.thrust::pair"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.439"* %ref.tmp, %"struct.thrust::pair"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.439"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.439"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !305
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.434"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !305
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.435"* %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.435"* %this, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %this, %"struct.thrust::detail::no_throw_allocator.435"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.435"* %this2 to %"class.thrust::detail::temporary_allocator.436"*
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.436"* %0, %"struct.thrust::pair"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %system, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %system.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %system, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.439"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.439"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp13, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp14, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  %call27 = call zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  ret i1 %call27
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %agg.tmp14 = alloca %"struct.thrust::detail::equal_to", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.439"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.439"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp13, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  %call = call zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %system, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %binary_pred = alloca %"struct.thrust::detail::equal_to", align 1
  %system.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %agg.tmp15 = alloca %"struct.thrust::detail::equal_to", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %system, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.439"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.439"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive18, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive26, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  %call28 = call zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  ret i1 %call28
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %binary_pred = alloca %"struct.thrust::detail::equal_to", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.453", align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %agg.tmp14 = alloca %"struct.thrust::detail::equal_to", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.439"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.439"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp13, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive26, align 8
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  %11 = bitcast %"struct.thrust::pair.453"* %ref.tmp to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %13, %"struct.thrust::pair"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %15, %"struct.thrust::pair"** %14, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.453", %"struct.thrust::pair.453"* %ref.tmp, i32 0, i32 0
  %16 = bitcast %"class.thrust::detail::tagged_iterator"* %first to %"class.thrust::iterator_facade.431"*
  %17 = bitcast %"class.thrust::detail::tagged_iterator"* %last1 to %"class.thrust::iterator_facade.431"*
  %call27 = call zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.431"* dereferenceable(1) %16, %"class.thrust::iterator_facade.431"* dereferenceable(1) %17)
  ret i1 %call27
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.431"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.431"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.431"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.431"*, align 8
  store %"class.thrust::iterator_facade.431"* %lhs, %"class.thrust::iterator_facade.431"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.431"* %rhs, %"class.thrust::iterator_facade.431"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.431"*, %"class.thrust::iterator_facade.431"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.431"* %0 to %"class.thrust::detail::tagged_iterator"*
  %2 = load %"class.thrust::iterator_facade.431"*, %"class.thrust::iterator_facade.431"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.431"* %2 to %"class.thrust::detail::tagged_iterator"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %1, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.453", align 8
  %first1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %pred = alloca %"struct.thrust::detail::equal_to", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %agg.tmp15 = alloca %"struct.thrust::detail::equal_to", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.439"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.439"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive18, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive26, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive27, align 8
  %call28 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair"* %8, %"struct.thrust::pair"* %9, %"struct.thrust::pair"* %10)
  %11 = bitcast %"struct.thrust::pair.453"* %retval to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call28, 0
  store %"struct.thrust::pair"* %13, %"struct.thrust::pair"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call28, 1
  store %"struct.thrust::pair"* %15, %"struct.thrust::pair"** %14, align 8
  %16 = bitcast %"struct.thrust::pair.453"* %retval to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %17 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %16, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %17
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %f1, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  %f2.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  store %"class.thrust::detail::tagged_iterator"* %f1, %"class.thrust::detail::tagged_iterator"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::tagged_iterator"* %f2, %"class.thrust::detail::tagged_iterator"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %0 to %"class.thrust::iterator_adaptor.430"*
  %2 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::tagged_iterator"* %2 to %"class.thrust::iterator_adaptor.430"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.430"* %1, %"class.thrust::iterator_adaptor.430"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.430"* %this, %"class.thrust::iterator_adaptor.430"* dereferenceable(8) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.430"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.430"*, align 8
  store %"class.thrust::iterator_adaptor.430"* %this, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.430"* %x, %"class.thrust::iterator_adaptor.430"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.430"*, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.134"* %m_iterator to %"class.thrust::iterator_facade.136"*
  %1 = load %"class.thrust::iterator_adaptor.430"*, %"class.thrust::iterator_adaptor.430"** %x.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv(%"class.thrust::iterator_adaptor.430"* %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.134"* %call to %"class.thrust::iterator_facade.136"*
  %call2 = call zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.136"* dereferenceable(1) %0, %"class.thrust::iterator_facade.136"* dereferenceable(1) %2)
  ret i1 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.136"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.136"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  store %"class.thrust::iterator_facade.136"* %lhs, %"class.thrust::iterator_facade.136"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.136"* %rhs, %"class.thrust::iterator_facade.136"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.136"* %0 to %"class.thrust::detail::normal_iterator.134"*
  %2 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.136"* %2 to %"class.thrust::detail::normal_iterator.134"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv(%"class.thrust::iterator_adaptor.430"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.430"*, align 8
  store %"class.thrust::iterator_adaptor.430"* %this, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.430"*, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.134"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES8_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  store %"class.thrust::detail::normal_iterator.134"* %f1, %"class.thrust::detail::normal_iterator.134"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.134"* %f2, %"class.thrust::detail::normal_iterator.134"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %0 to %"class.thrust::iterator_adaptor.135"*
  %2 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.134"* %2 to %"class.thrust::iterator_adaptor.135"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.135"* %1, %"class.thrust::iterator_adaptor.135"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"* dereferenceable(8) %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  store %"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.135"* %x, %"class.thrust::iterator_adaptor.135"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  %1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %x.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.135"* %1)
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %cmp = icmp eq %"struct.thrust::pair"* %0, %2
  ret i1 %cmp
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"* %first2.coerce) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.453", align 8
  %first1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %pred = alloca %"struct.thrust::detail::equal_to", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_first = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp = alloca %"class.thrust::tuple.456", align 8
  %zipped_last = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp16 = alloca %"class.thrust::tuple.456", align 8
  %result = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp22 = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp23 = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp24 = alloca %"struct.thrust::detail::tuple_binary_predicate", align 1
  %agg.tmp28 = alloca %"class.thrust::detail::tagged_iterator", align 8
  %agg.tmp31 = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first1.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last1.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair"* %first2.coerce, %"struct.thrust::pair"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.454"* %zipped_first to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %first2)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %agg.tmp, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive12 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %3, %"struct.thrust::pair"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %6 = bitcast %"class.thrust::tuple.456"* %agg.tmp to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %7 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %6, i32 0, i32 0
  %8 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %6, i32 0, i32 1
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %9, align 8
  %call13 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair"* %8, %"struct.thrust::pair"* %10)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %zipped_first, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive14, i32 0, i32 0
  %11 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive15 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call13, 0
  store %"struct.thrust::pair"* %13, %"struct.thrust::pair"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call13, 1
  store %"struct.thrust::pair"* %15, %"struct.thrust::pair"** %14, align 8
  %16 = bitcast %"class.thrust::zip_iterator.454"* %zipped_last to i8*
  call void @llvm.lifetime.start(i64 16, i8* %16) #5
  %call17 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %first2)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %agg.tmp16, i32 0, i32 0
  %17 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive18 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %18 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %17, i32 0, i32 0
  %19 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call17, 0
  store %"struct.thrust::pair"* %19, %"struct.thrust::pair"** %18, align 8
  %20 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %17, i32 0, i32 1
  %21 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call17, 1
  store %"struct.thrust::pair"* %21, %"struct.thrust::pair"** %20, align 8
  %22 = bitcast %"class.thrust::tuple.456"* %agg.tmp16 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %23 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %22, i32 0, i32 0
  %24 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %23, align 8
  %25 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %22, i32 0, i32 1
  %26 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %25, align 8
  %call19 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair"* %24, %"struct.thrust::pair"* %26)
  %coerce.dive20 = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %zipped_last, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive20, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive21 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %28 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %27, i32 0, i32 0
  %29 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call19, 0
  store %"struct.thrust::pair"* %29, %"struct.thrust::pair"** %28, align 8
  %30 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %27, i32 0, i32 1
  %31 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call19, 1
  store %"struct.thrust::pair"* %31, %"struct.thrust::pair"** %30, align 8
  %32 = bitcast %"class.thrust::zip_iterator.454"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %32) #5
  %33 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %34 = bitcast %"struct.thrust::execution_policy.88"* %33 to %"struct.thrust::detail::execution_policy_base.85"*
  %35 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp22 to i8*
  %36 = bitcast %"class.thrust::zip_iterator.454"* %zipped_first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %35, i8* %36, i64 16, i32 8, i1 false)
  %37 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp23 to i8*
  %38 = bitcast %"class.thrust::zip_iterator.454"* %zipped_last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %37, i8* %38, i64 16, i32 8, i1 false)
  call void @_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEC2ERKS5_(%"struct.thrust::detail::tuple_binary_predicate"* %agg.tmp24, %"struct.thrust::detail::equal_to"* dereferenceable(1) %pred)
  %39 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp22 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %40 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %39, i32 0, i32 0
  %41 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %40, align 8
  %42 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %39, i32 0, i32 1
  %43 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %42, align 8
  %44 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp23 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %45 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %44, i32 0, i32 0
  %46 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %45, align 8
  %47 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %44, i32 0, i32 1
  %48 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %47, align 8
  %call25 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %34, %"struct.thrust::pair"* %41, %"struct.thrust::pair"* %43, %"struct.thrust::pair"* %46, %"struct.thrust::pair"* %48)
  %coerce.dive26 = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %result, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive26, i32 0, i32 0
  %49 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive27 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %50 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %49, i32 0, i32 0
  %51 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call25, 0
  store %"struct.thrust::pair"* %51, %"struct.thrust::pair"** %50, align 8
  %52 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %49, i32 0, i32 1
  %53 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call25, 1
  store %"struct.thrust::pair"* %53, %"struct.thrust::pair"** %52, align 8
  %call29 = call dereferenceable(16) %"class.thrust::tuple.456"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.454"* %result)
  %54 = bitcast %"class.thrust::tuple.456"* %call29 to %"struct.thrust::detail::cons.457"*
  %call30 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %54)
  %55 = bitcast %"class.thrust::detail::tagged_iterator"* %agg.tmp28 to i8*
  %56 = bitcast %"class.thrust::detail::tagged_iterator"* %call30 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %55, i8* %56, i64 8, i32 8, i1 false)
  %call32 = call dereferenceable(16) %"class.thrust::tuple.456"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.454"* %result)
  %57 = bitcast %"class.thrust::tuple.456"* %call32 to %"struct.thrust::detail::cons.457"*
  %call33 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %57)
  %58 = bitcast %"class.thrust::detail::normal_iterator.439"* %agg.tmp31 to i8*
  %59 = bitcast %"class.thrust::detail::normal_iterator.439"* %call33 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %58, i8* %59, i64 8, i32 8, i1 false)
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %agg.tmp28, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive36, i32 0, i32 0
  %60 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %agg.tmp31, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive40, i32 0, i32 0
  %61 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive41, align 8
  %call42 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_(%"struct.thrust::pair"* %60, %"struct.thrust::pair"* %61)
  %62 = bitcast %"struct.thrust::pair.453"* %retval to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %63 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %62, i32 0, i32 0
  %64 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call42, 0
  store %"struct.thrust::pair"* %64, %"struct.thrust::pair"** %63, align 8
  %65 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %62, i32 0, i32 1
  %66 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call42, 1
  store %"struct.thrust::pair"* %66, %"struct.thrust::pair"** %65, align 8
  %67 = bitcast %"class.thrust::zip_iterator.454"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %67) #5
  %68 = bitcast %"class.thrust::zip_iterator.454"* %zipped_last to i8*
  call void @llvm.lifetime.end(i64 16, i8* %68) #5
  %69 = bitcast %"class.thrust::zip_iterator.454"* %zipped_first to i8*
  call void @llvm.lifetime.end(i64 16, i8* %69) #5
  %70 = bitcast %"struct.thrust::pair.453"* %retval to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %71 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %70, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %71
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair"* %t.coerce0, %"struct.thrust::pair"* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.454", align 8
  %t = alloca %"class.thrust::tuple.456", align 8
  %agg.tmp = alloca %"class.thrust::tuple.456", align 8
  %0 = bitcast %"class.thrust::tuple.456"* %t to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %t.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair"* %t.coerce1, %"struct.thrust::pair"** %2, align 8
  %3 = bitcast %"class.thrust::tuple.456"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.456"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.456"* %agg.tmp to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %5, i32 0, i32 1
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.454"* %retval, %"struct.thrust::pair"* %7, %"struct.thrust::pair"* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive1 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %11 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %10, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.456", align 8
  %t0.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  store %"class.thrust::detail::tagged_iterator"* %t0, %"class.thrust::detail::tagged_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.439"* %t1, %"class.thrust::detail::normal_iterator.439"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_(%"class.thrust::tuple.456"* %retval, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %3 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %2, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %3
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.454", align 8
  %first = alloca %"class.thrust::zip_iterator.454", align 8
  %last = alloca %"class.thrust::zip_iterator.454", align 8
  %pred = alloca %"struct.thrust::detail::tuple_binary_predicate", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::tuple_binary_predicate", align 1
  %0 = bitcast %"class.thrust::zip_iterator.454"* %first to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.454"* %last to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair"* %last.coerce1, %"struct.thrust::pair"** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %8 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.454"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.454"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::detail::tuple_binary_predicate"* %agg.tmp3 to i8*
  %13 = bitcast %"struct.thrust::detail::tuple_binary_predicate"* %pred to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 1, i32 1, i1 false), !tbaa.struct !41
  %14 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %15 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %14, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %15, align 8
  %17 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %14, i32 0, i32 1
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %17, align 8
  %19 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp2 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %20 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %19, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %20, align 8
  %22 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %19, i32 0, i32 1
  %23 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %22, align 8
  %call4 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIaaEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %7, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %18, %"struct.thrust::pair"* %21, %"struct.thrust::pair"* %23)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive, i32 0, i32 0
  %24 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive5 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %25 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %24, i32 0, i32 0
  %26 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call4, 0
  store %"struct.thrust::pair"* %26, %"struct.thrust::pair"** %25, align 8
  %27 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %24, i32 0, i32 1
  %28 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call4, 1
  store %"struct.thrust::pair"* %28, %"struct.thrust::pair"** %27, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive6, i32 0, i32 0
  %29 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive7 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %30 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %29, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %30
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEC2ERKS5_(%"struct.thrust::detail::tuple_binary_predicate"* %this, %"struct.thrust::detail::equal_to"* dereferenceable(1) %p) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::tuple_binary_predicate"*, align 8
  %p.addr = alloca %"struct.thrust::detail::equal_to"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate"* %this, %"struct.thrust::detail::tuple_binary_predicate"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::equal_to"* %p, %"struct.thrust::detail::equal_to"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::tuple_binary_predicate"*, %"struct.thrust::detail::tuple_binary_predicate"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::tuple_binary_predicate", %"struct.thrust::detail::tuple_binary_predicate"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::equal_to"*, %"struct.thrust::detail::equal_to"** %p.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_(%"struct.thrust::pair"* %x.coerce, %"struct.thrust::pair"* %y.coerce) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.453", align 8
  %x = alloca %"class.thrust::detail::tagged_iterator", align 8
  %y = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator", %"class.thrust::detail::tagged_iterator"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.134", %"class.thrust::detail::normal_iterator.134"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %x.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %y, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %y.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  call void @_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_(%"struct.thrust::pair.453"* %retval, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %x, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %y)
  %0 = bitcast %"struct.thrust::pair.453"* %retval to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.457"*, align 8
  store %"struct.thrust::detail::cons.457"* %c, %"struct.thrust::detail::cons.457"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.457"*, %"struct.thrust::detail::cons.457"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.457"* dereferenceable(16) %0)
  ret %"class.thrust::detail::tagged_iterator"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.456"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.454"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  store %"class.thrust::zip_iterator.454"* %this, %"class.thrust::zip_iterator.454"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.456"* %m_iterator_tuple
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.457"*, align 8
  store %"struct.thrust::detail::cons.457"* %c, %"struct.thrust::detail::cons.457"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.457"*, %"struct.thrust::detail::cons.457"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE(%"struct.thrust::detail::cons.457"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.439"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.454"* %this, %"struct.thrust::pair"* %iterator_tuple.coerce0, %"struct.thrust::pair"* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.456", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  %0 = bitcast %"class.thrust::tuple.456"* %iterator_tuple to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %iterator_tuple.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair"* %iterator_tuple.coerce1, %"struct.thrust::pair"** %2, align 8
  store %"class.thrust::zip_iterator.454"* %this, %"class.thrust::zip_iterator.454"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.454"* %this1 to %"class.thrust::iterator_facade.455"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.456"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.456"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_(%"class.thrust::tuple.456"* %this, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.456"*, align 8
  %t0.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.456"* %this, %"class.thrust::tuple.456"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator"* %t0, %"class.thrust::detail::tagged_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.439"* %t1, %"class.thrust::detail::normal_iterator.439"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.456"*, %"class.thrust::tuple.456"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.456"* %this1 to %"struct.thrust::detail::cons.457"*
  %1 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.457"* %0, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.457"* %this, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.457"*, align 8
  %t1.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.457"* %this, %"struct.thrust::detail::cons.457"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator"* %t1, %"class.thrust::detail::tagged_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.439"* %t2, %"class.thrust::detail::normal_iterator.439"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.457"*, %"struct.thrust::detail::cons.457"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.457", %"struct.thrust::detail::cons.457"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %head to i8*
  %2 = bitcast %"class.thrust::detail::tagged_iterator"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.457", %"struct.thrust::detail::cons.457"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.458"* %tail, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.458"* %this, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.458"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.458"* %this, %"struct.thrust::detail::cons.458"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.439"* %t1, %"class.thrust::detail::normal_iterator.439"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.458"*, %"struct.thrust::detail::cons.458"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.458", %"struct.thrust::detail::cons.458"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.439"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.439"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIaaEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.454", align 8
  %first = alloca %"class.thrust::zip_iterator.454", align 8
  %last = alloca %"class.thrust::zip_iterator.454", align 8
  %pred = alloca %"struct.thrust::detail::tuple_binary_predicate", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::unary_negate", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::unary_negate", align 1
  %0 = bitcast %"class.thrust::zip_iterator.454"* %first to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.454"* %last to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair"* %last.coerce1, %"struct.thrust::pair"** %5, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %7 = bitcast %"struct.thrust::execution_policy.88"* %6 to %"struct.thrust::detail::execution_policy_base.85"*
  %8 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.454"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp1 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.454"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  call void @_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEENS0_12unary_negateIT_EERKS9_(%"struct.thrust::detail::tuple_binary_predicate"* dereferenceable(1) %pred)
  %12 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %13 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %12, i32 0, i32 0
  %14 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %13, align 8
  %15 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %12, i32 0, i32 1
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %15, align 8
  %17 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp1 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %18 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %17, i32 0, i32 0
  %19 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %18, align 8
  %20 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %17, i32 0, i32 1
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %20, align 8
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %7, %"struct.thrust::pair"* %14, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %19, %"struct.thrust::pair"* %21)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive3 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %23 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %22, i32 0, i32 0
  %24 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %24, %"struct.thrust::pair"** %23, align 8
  %25 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %22, i32 0, i32 1
  %26 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %26, %"struct.thrust::pair"** %25, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive4, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive5 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %28 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %27, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %28
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIaaEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.454", align 8
  %first = alloca %"class.thrust::zip_iterator.454", align 8
  %last = alloca %"class.thrust::zip_iterator.454", align 8
  %pred = alloca %"struct.thrust::detail::unary_negate", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.454", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::unary_negate", align 1
  %0 = bitcast %"class.thrust::zip_iterator.454"* %first to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.454"* %last to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair"* %last.coerce1, %"struct.thrust::pair"** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %8 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.454"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.454"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::detail::unary_negate"* %agg.tmp3 to i8*
  %13 = bitcast %"struct.thrust::detail::unary_negate"* %pred to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 1, i32 1, i1 false), !tbaa.struct !41
  %14 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %15 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %14, i32 0, i32 0
  %16 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %15, align 8
  %17 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %14, i32 0, i32 1
  %18 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %17, align 8
  %19 = bitcast %"class.thrust::zip_iterator.454"* %agg.tmp2 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %20 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %19, i32 0, i32 0
  %21 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %20, align 8
  %22 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %19, i32 0, i32 1
  %23 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %22, align 8
  %call4 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIaaEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %7, %"struct.thrust::pair"* %16, %"struct.thrust::pair"* %18, %"struct.thrust::pair"* %21, %"struct.thrust::pair"* %23)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive, i32 0, i32 0
  %24 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive5 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %25 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %24, i32 0, i32 0
  %26 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call4, 0
  store %"struct.thrust::pair"* %26, %"struct.thrust::pair"** %25, align 8
  %27 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %24, i32 0, i32 1
  %28 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call4, 1
  store %"struct.thrust::pair"* %28, %"struct.thrust::pair"** %27, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive6, i32 0, i32 0
  %29 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive7 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %30 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %29, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %30
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEENS0_12unary_negateIT_EERKS9_(%"struct.thrust::detail::tuple_binary_predicate"* dereferenceable(1) %pred) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::unary_negate", align 1
  %pred.addr = alloca %"struct.thrust::detail::tuple_binary_predicate"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate"* %pred, %"struct.thrust::detail::tuple_binary_predicate"** %pred.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::tuple_binary_predicate"*, %"struct.thrust::detail::tuple_binary_predicate"** %pred.addr, align 8
  call void @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEC2ERKS7_(%"struct.thrust::detail::unary_negate"* %retval, %"struct.thrust::detail::tuple_binary_predicate"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIaaEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.454", align 8
  %first = alloca %"class.thrust::zip_iterator.454", align 8
  %last = alloca %"class.thrust::zip_iterator.454", align 8
  %pred = alloca %"struct.thrust::detail::unary_negate", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_pred = alloca %"struct.thrust::detail::wrapped_function.459", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.460", align 8
  %cleanup.dest.slot = alloca i32
  %1 = bitcast %"class.thrust::zip_iterator.454"* %first to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce0, %"struct.thrust::pair"** %2, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 1
  store %"struct.thrust::pair"* %first.coerce1, %"struct.thrust::pair"** %3, align 8
  %4 = bitcast %"class.thrust::zip_iterator.454"* %last to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %4, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce0, %"struct.thrust::pair"** %5, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %4, i32 0, i32 1
  store %"struct.thrust::pair"* %last.coerce1, %"struct.thrust::pair"** %6, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %7 = bitcast %"struct.thrust::detail::wrapped_function.459"* %wrapped_pred to i8*
  call void @llvm.lifetime.start(i64 1, i8* %7) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEEbEC2ERKS9_(%"struct.thrust::detail::wrapped_function.459"* %wrapped_pred, %"struct.thrust::detail::unary_negate"* dereferenceable(1) %pred)
  br label %while.cond

while.cond:                                       ; preds = %if.end, %entry
  %8 = bitcast %"class.thrust::zip_iterator.454"* %first to %"class.thrust::iterator_facade.455"*
  %9 = bitcast %"class.thrust::zip_iterator.454"* %last to %"class.thrust::iterator_facade.455"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.455"* dereferenceable(1) %8, %"class.thrust::iterator_facade.455"* dereferenceable(1) %9)
  br i1 %call, label %while.body, label %while.end

while.body:                                       ; preds = %while.cond
  %10 = bitcast %"class.thrust::zip_iterator.454"* %first to %"class.thrust::iterator_facade.455"*
  %call1 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv(%"class.thrust::iterator_facade.455"* %10)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.460", %"class.thrust::detail::tuple_of_iterator_references.460"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %coerce.dive, i32 0, i32 0
  %11 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive2 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call1, 0
  store %"struct.thrust::pair"* %13, %"struct.thrust::pair"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call1, 1
  store %"struct.thrust::pair"* %15, %"struct.thrust::pair"** %14, align 8
  %call3 = call zeroext i1 @_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_(%"struct.thrust::detail::wrapped_function.459"* %wrapped_pred, %"class.thrust::detail::tuple_of_iterator_references.460"* dereferenceable(16) %ref.tmp)
  br i1 %call3, label %if.then, label %if.end

if.then:                                          ; preds = %while.body
  %16 = bitcast %"class.thrust::zip_iterator.454"* %retval to i8*
  %17 = bitcast %"class.thrust::zip_iterator.454"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 16, i32 8, i1 false)
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %while.body
  %18 = bitcast %"class.thrust::zip_iterator.454"* %first to %"class.thrust::iterator_facade.455"*
  %call4 = call dereferenceable(16) %"class.thrust::zip_iterator.454"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv(%"class.thrust::iterator_facade.455"* %18)
  br label %while.cond

while.end:                                        ; preds = %while.cond
  %19 = bitcast %"class.thrust::zip_iterator.454"* %retval to i8*
  %20 = bitcast %"class.thrust::zip_iterator.454"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %19, i8* %20, i64 16, i32 8, i1 false)
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %while.end, %if.then
  %21 = bitcast %"struct.thrust::detail::wrapped_function.459"* %wrapped_pred to i8*
  call void @llvm.lifetime.end(i64 1, i8* %21) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.456", %"class.thrust::tuple.456"* %coerce.dive5, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.457"* %coerce.dive6 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %23 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %22, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %23
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEEbEC2ERKS9_(%"struct.thrust::detail::wrapped_function.459"* %this, %"struct.thrust::detail::unary_negate"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.459"*, align 8
  %f.addr = alloca %"struct.thrust::detail::unary_negate"*, align 8
  store %"struct.thrust::detail::wrapped_function.459"* %this, %"struct.thrust::detail::wrapped_function.459"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::unary_negate"* %f, %"struct.thrust::detail::unary_negate"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.459"*, %"struct.thrust::detail::wrapped_function.459"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.459", %"struct.thrust::detail::wrapped_function.459"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::unary_negate"*, %"struct.thrust::detail::unary_negate"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::unary_negate"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::unary_negate"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.455"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.455"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.455"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.455"*, align 8
  store %"class.thrust::iterator_facade.455"* %lhs, %"class.thrust::iterator_facade.455"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.455"* %rhs, %"class.thrust::iterator_facade.455"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.455"*, %"class.thrust::iterator_facade.455"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.455"* %0 to %"class.thrust::zip_iterator.454"*
  %2 = load %"class.thrust::iterator_facade.455"*, %"class.thrust::iterator_facade.455"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.455"* %2 to %"class.thrust::zip_iterator.454"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_(%"class.thrust::zip_iterator.454"* dereferenceable(16) %1, %"class.thrust::zip_iterator.454"* dereferenceable(16) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_(%"struct.thrust::detail::wrapped_function.459"* %this, %"class.thrust::detail::tuple_of_iterator_references.460"* dereferenceable(16) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.459"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.460"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.464", align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.460", align 8
  store %"struct.thrust::detail::wrapped_function.459"* %this, %"struct.thrust::detail::wrapped_function.459"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.460"* %x, %"class.thrust::detail::tuple_of_iterator_references.460"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.459"*, %"struct.thrust::detail::wrapped_function.459"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.459", %"struct.thrust::detail::wrapped_function.459"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.460"*, %"class.thrust::detail::tuple_of_iterator_references.460"** %x.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.460"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.460"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.460"* %agg.tmp to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %3, i32 0, i32 1
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %6, align 8
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust18raw_reference_castIRKNS_4pairIaaEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_(%"struct.thrust::pair"* %5, %"struct.thrust::pair"* %7)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.464", %"class.thrust::detail::tuple_of_iterator_references.464"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.465", %"class.thrust::tuple.465"* %coerce.dive, i32 0, i32 0
  %8 = bitcast %"struct.thrust::detail::cons.466"* %coerce.dive2 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %9 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %10, %"struct.thrust::pair"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %12, %"struct.thrust::pair"** %11, align 8
  %call3 = call zeroext i1 @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_(%"struct.thrust::detail::unary_negate"* %m_f, %"class.thrust::detail::tuple_of_iterator_references.464"* dereferenceable(16) %ref.tmp)
  ret i1 %call3
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv(%"class.thrust::iterator_facade.455"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.460", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.455"*, align 8
  store %"class.thrust::iterator_facade.455"* %this, %"class.thrust::iterator_facade.455"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.455"*, %"class.thrust::iterator_facade.455"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.454"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.455"* %this1)
  %call2 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_(%"class.thrust::zip_iterator.454"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.460", %"class.thrust::detail::tuple_of_iterator_references.460"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %coerce.dive, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive3 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  %2 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call2, 0
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %1, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  %4 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call2, 1
  store %"struct.thrust::pair"* %4, %"struct.thrust::pair"** %3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.460", %"class.thrust::detail::tuple_of_iterator_references.460"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %coerce.dive4, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive5 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %6 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %5, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %6
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.454"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv(%"class.thrust::iterator_facade.455"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.455"*, align 8
  store %"class.thrust::iterator_facade.455"* %this, %"class.thrust::iterator_facade.455"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.455"*, %"class.thrust::iterator_facade.455"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.454"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.455"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_(%"class.thrust::zip_iterator.454"* dereferenceable(16) %call)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.454"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.455"* %this1)
  ret %"class.thrust::zip_iterator.454"* %call2
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_(%"class.thrust::zip_iterator.454"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.454"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  store %"class.thrust::zip_iterator.454"* %f1, %"class.thrust::zip_iterator.454"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.454"* %f2, %"class.thrust::zip_iterator.454"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.454"* %0, %"class.thrust::zip_iterator.454"* dereferenceable(16) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.454"* %this, %"class.thrust::zip_iterator.454"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  store %"class.thrust::zip_iterator.454"* %this, %"class.thrust::zip_iterator.454"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.454"* %other, %"class.thrust::zip_iterator.454"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.456"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.454"* %this1)
  %0 = bitcast %"class.thrust::tuple.456"* %call to %"struct.thrust::detail::cons.457"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %call2 to %"class.thrust::iterator_facade.431"*
  %2 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %other.addr, align 8
  %call3 = call dereferenceable(16) %"class.thrust::tuple.456"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.454"* %2)
  %3 = bitcast %"class.thrust::tuple.456"* %call3 to %"struct.thrust::detail::cons.457"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::tagged_iterator"* %call4 to %"class.thrust::iterator_facade.431"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.431"* dereferenceable(1) %1, %"class.thrust::iterator_facade.431"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_(%"struct.thrust::detail::unary_negate"* %this, %"class.thrust::detail::tuple_of_iterator_references.464"* dereferenceable(16) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::unary_negate"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.464"*, align 8
  store %"struct.thrust::detail::unary_negate"* %this, %"struct.thrust::detail::unary_negate"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.464"* %x, %"class.thrust::detail::tuple_of_iterator_references.464"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::unary_negate"*, %"struct.thrust::detail::unary_negate"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::unary_negate", %"struct.thrust::detail::unary_negate"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.464"*, %"class.thrust::detail::tuple_of_iterator_references.464"** %x.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_(%"struct.thrust::detail::tuple_binary_predicate"* %pred, %"class.thrust::detail::tuple_of_iterator_references.464"* dereferenceable(16) %0)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust18raw_reference_castIRKNS_4pairIaaEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_(%"struct.thrust::pair"* %t.coerce0, %"struct.thrust::pair"* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.464", align 8
  %t = alloca %"class.thrust::detail::tuple_of_iterator_references.460", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %ref.tmp = alloca %"class.thrust::tuple.465", align 8
  %agg.tmp = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.460"* %t to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair"* %t.coerce0, %"struct.thrust::pair"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair"* %t.coerce1, %"struct.thrust::pair"** %2, align 8
  %3 = bitcast %"struct.thrust::detail::raw_reference_caster"* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_(%"class.thrust::detail::tuple_of_iterator_references.460"* dereferenceable(16) %t)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.465", %"class.thrust::tuple.465"* %ref.tmp, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.466"* %coerce.dive to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %5 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %4, i32 0, i32 0
  %6 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %6, %"struct.thrust::pair"** %5, align 8
  %7 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %4, i32 0, i32 1
  %8 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %8, %"struct.thrust::pair"** %7, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIaaEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE(%"class.thrust::detail::tuple_of_iterator_references.464"* %retval, %"class.thrust::tuple.465"* dereferenceable(16) %ref.tmp)
  %9 = bitcast %"struct.thrust::detail::raw_reference_caster"* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %9) #5
  %coerce.dive1 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.464", %"class.thrust::detail::tuple_of_iterator_references.464"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.465", %"class.thrust::tuple.465"* %coerce.dive1, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.466"* %coerce.dive2 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %11 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %10, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %11
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_(%"struct.thrust::detail::tuple_binary_predicate"* %this, %"class.thrust::detail::tuple_of_iterator_references.464"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::tuple_binary_predicate"*, align 8
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.464"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate"* %this, %"struct.thrust::detail::tuple_binary_predicate"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.464"* %t, %"class.thrust::detail::tuple_of_iterator_references.464"** %t.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::tuple_binary_predicate"*, %"struct.thrust::detail::tuple_binary_predicate"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::tuple_binary_predicate", %"struct.thrust::detail::tuple_binary_predicate"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.464"*, %"class.thrust::detail::tuple_of_iterator_references.464"** %t.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.464"* %0 to %"struct.thrust::detail::cons.466"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi0ERKNS_4pairIaaEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.466"* dereferenceable(16) %1)
  %2 = load %"class.thrust::detail::tuple_of_iterator_references.464"*, %"class.thrust::detail::tuple_of_iterator_references.464"** %t.addr, align 8
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.464"* %2 to %"struct.thrust::detail::cons.466"*
  %call2 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi1ERKNS_4pairIaaEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.466"* dereferenceable(16) %3)
  %call3 = call zeroext i1 @_ZNK6thrust6detail8equal_toINS_4pairIaaEEEclIS3_EEbRKS3_RKT_(%"struct.thrust::detail::equal_to"* %pred, %"struct.thrust::pair"* dereferenceable(2) %call, %"struct.thrust::pair"* dereferenceable(2) %call2)
  ret i1 %call3
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail8equal_toINS_4pairIaaEEEclIS3_EEbRKS3_RKT_(%"struct.thrust::detail::equal_to"* %this, %"struct.thrust::pair"* dereferenceable(2) %lhs, %"struct.thrust::pair"* dereferenceable(2) %rhs) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::equal_to"*, align 8
  %lhs.addr = alloca %"struct.thrust::pair"*, align 8
  %rhs.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::detail::equal_to"* %this, %"struct.thrust::detail::equal_to"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %lhs, %"struct.thrust::pair"** %lhs.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %rhs, %"struct.thrust::pair"** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::equal_to"*, %"struct.thrust::detail::equal_to"** %this.addr, align 8
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %lhs.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %rhs.addr, align 8
  %call = call zeroext i1 @_ZN6thrusteqIaaEEbRKNS_4pairIT_T0_EES6_(%"struct.thrust::pair"* dereferenceable(2) %0, %"struct.thrust::pair"* dereferenceable(2) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi0ERKNS_4pairIaaEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.466"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.466"*, align 8
  store %"struct.thrust::detail::cons.466"* %c, %"struct.thrust::detail::cons.466"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.466"*, %"struct.thrust::detail::cons.466"** %c.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIaaEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.466"* dereferenceable(16) %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi1ERKNS_4pairIaaEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.466"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.466"*, align 8
  store %"struct.thrust::detail::cons.466"* %c, %"struct.thrust::detail::cons.466"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.466"*, %"struct.thrust::detail::cons.466"** %c.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIaaEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.466"* dereferenceable(16) %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqIaaEEbRKNS_4pairIT_T0_EES6_(%"struct.thrust::pair"* dereferenceable(2) %x, %"struct.thrust::pair"* dereferenceable(2) %y) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::pair"*, align 8
  %y.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::pair"* %x, %"struct.thrust::pair"** %x.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %y, %"struct.thrust::pair"** %y.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %0, i32 0, i32 0
  %1 = load i8, i8* %first, align 1, !tbaa !26
  %conv = sext i8 %1 to i32
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %y.addr, align 8
  %first1 = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %2, i32 0, i32 0
  %3 = load i8, i8* %first1, align 1, !tbaa !26
  %conv2 = sext i8 %3 to i32
  %cmp = icmp eq i32 %conv, %conv2
  br i1 %cmp, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %4, i32 0, i32 1
  %5 = load i8, i8* %second, align 1, !tbaa !29
  %conv3 = sext i8 %5 to i32
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %y.addr, align 8
  %second4 = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %6, i32 0, i32 1
  %7 = load i8, i8* %second4, align 1, !tbaa !29
  %conv5 = sext i8 %7 to i32
  %cmp6 = icmp eq i32 %conv3, %conv5
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %8 = phi i1 [ false, %entry ], [ %cmp6, %land.rhs ]
  ret i1 %8
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIaaEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.466"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.466"*, align 8
  store %"struct.thrust::detail::cons.466"* %t, %"struct.thrust::detail::cons.466"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.466"*, %"struct.thrust::detail::cons.466"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.466", %"struct.thrust::detail::cons.466"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIaaEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.466"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.466"*, align 8
  store %"struct.thrust::detail::cons.466"* %t, %"struct.thrust::detail::cons.466"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.466"*, %"struct.thrust::detail::cons.466"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.466", %"struct.thrust::detail::cons.466"* %0, i32 0, i32 1
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIaaEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.111"* dereferenceable(8) %tail)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIaaEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.111"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.111"*, align 8
  store %"struct.thrust::detail::cons.111"* %t, %"struct.thrust::detail::cons.111"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.111"*, %"struct.thrust::detail::cons.111"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.111", %"struct.thrust::detail::cons.111"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair"* %ref
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_(%"class.thrust::detail::tuple_of_iterator_references.460"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.465", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.460"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  store %"class.thrust::detail::tuple_of_iterator_references.460"* %t, %"class.thrust::detail::tuple_of_iterator_references.460"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.460"*, %"class.thrust::detail::tuple_of_iterator_references.460"** %t.addr, align 8
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_(%"class.thrust::detail::tuple_of_iterator_references.460"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.465", %"class.thrust::tuple.465"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.466"* %coerce.dive to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %3, %"struct.thrust::pair"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.465", %"class.thrust::tuple.465"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.466"* %coerce.dive1 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %7 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %6, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIaaEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE(%"class.thrust::detail::tuple_of_iterator_references.464"* %this, %"class.thrust::tuple.465"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.464"*, align 8
  %other.addr = alloca %"class.thrust::tuple.465"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.464"* %this, %"class.thrust::detail::tuple_of_iterator_references.464"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.465"* %other, %"class.thrust::tuple.465"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.464"*, %"class.thrust::detail::tuple_of_iterator_references.464"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.464"* %this1 to %"class.thrust::tuple.465"*
  %1 = load %"class.thrust::tuple.465"*, %"class.thrust::tuple.465"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.465"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.465"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_(%"class.thrust::detail::tuple_of_iterator_references.460"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.465", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.460"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.460"* %t, %"class.thrust::detail::tuple_of_iterator_references.460"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.460"*, %"class.thrust::detail::tuple_of_iterator_references.460"** %t.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.460"* %0 to %"struct.thrust::detail::cons.462"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi0ERKNS_4pairIaaEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.462"* dereferenceable(16) %1)
  %call1 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20raw_reference_casterclINS_4pairIaaEEEENS0_13raw_referenceIKT_E4typeERS7_(%"struct.thrust::detail::raw_reference_caster"* %f, %"struct.thrust::pair"* dereferenceable(2) %call)
  %2 = load %"class.thrust::detail::tuple_of_iterator_references.460"*, %"class.thrust::detail::tuple_of_iterator_references.460"** %t.addr, align 8
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.460"* %2 to %"struct.thrust::detail::cons.462"*
  %call2 = call dereferenceable(8) %"class.thrust::reference.450"* @_ZN6thrust3getILi1ERKNS_4pairIaaEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.462"* dereferenceable(16) %3)
  %call3 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIaaEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_(%"struct.thrust::detail::raw_reference_caster"* %f, %"class.thrust::reference.450"* dereferenceable(8) %call2)
  call void @_ZN6thrust5tupleIRKNS_4pairIaaEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_(%"class.thrust::tuple.465"* %retval, %"struct.thrust::pair"* dereferenceable(2) %call1, %"struct.thrust::pair"* dereferenceable(2) %call3)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.465", %"class.thrust::tuple.465"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.466"* %coerce.dive to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %5 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %4, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20raw_reference_casterclINS_4pairIaaEEEENS0_13raw_referenceIKT_E4typeERS7_(%"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::pair"* dereferenceable(2) %ref) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::raw_reference_caster"*, align 8
  %ref.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %ref, %"struct.thrust::pair"** %ref.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::raw_reference_caster"*, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %ref.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_4pairIaaEEEENS_6detail13raw_referenceIKT_E4typeERS6_(%"struct.thrust::pair"* dereferenceable(2) %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust3getILi0ERKNS_4pairIaaEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.462"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.462"*, align 8
  store %"struct.thrust::detail::cons.462"* %c, %"struct.thrust::detail::cons.462"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.462"*, %"struct.thrust::detail::cons.462"** %c.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIaaEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.462"* dereferenceable(16) %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIaaEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_(%"struct.thrust::detail::raw_reference_caster"* %this, %"class.thrust::reference.450"* dereferenceable(8) %ref) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::raw_reference_caster"*, align 8
  %ref.addr = alloca %"class.thrust::reference.450"*, align 8
  store %"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.450"* %ref, %"class.thrust::reference.450"** %ref.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::raw_reference_caster"*, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8
  %0 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %ref.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIaaEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.450"* dereferenceable(8) %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.450"* @_ZN6thrust3getILi1ERKNS_4pairIaaEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.462"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.462"*, align 8
  store %"struct.thrust::detail::cons.462"* %c, %"struct.thrust::detail::cons.462"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.462"*, %"struct.thrust::detail::cons.462"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::reference.450"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIaaEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.462"* dereferenceable(16) %0)
  ret %"class.thrust::reference.450"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRKNS_4pairIaaEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_(%"class.thrust::tuple.465"* %this, %"struct.thrust::pair"* dereferenceable(2) %t0, %"struct.thrust::pair"* dereferenceable(2) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.465"*, align 8
  %t0.addr = alloca %"struct.thrust::pair"*, align 8
  %t1.addr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.465"* %this, %"class.thrust::tuple.465"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %t0, %"struct.thrust::pair"** %t0.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %t1, %"struct.thrust::pair"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.465"*, %"class.thrust::tuple.465"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.465"* %this1 to %"struct.thrust::detail::cons.466"*
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t0.addr, align 8
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRKNS_4pairIaaEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.466"* %0, %"struct.thrust::pair"* dereferenceable(2) %1, %"struct.thrust::pair"* dereferenceable(2) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_4pairIaaEEEENS_6detail13raw_referenceIKT_E4typeERS6_(%"struct.thrust::pair"* dereferenceable(2) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"struct.thrust::pair"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::pair"* %ref, %"struct.thrust::pair"** %ref.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %ref.addr, align 8
  store %"struct.thrust::pair"* %0, %"struct.thrust::pair"** %ref.tmp, align 8, !tbaa !1
  %call = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIaaEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair"** dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIaaEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.462"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.462"*, align 8
  store %"struct.thrust::detail::cons.462"* %t, %"struct.thrust::detail::cons.462"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.462"*, %"struct.thrust::detail::cons.462"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.462", %"struct.thrust::detail::cons.462"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIaaEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.450"* dereferenceable(8) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::reference.450"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.442", align 8
  store %"class.thrust::reference.450"* %ref, %"class.thrust::reference.450"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %ref.addr, align 8
  %call = call %"struct.thrust::pair"* @_ZNK6thrust9referenceINS_4pairIaaEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.450"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %ref.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.442"* dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair"* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.450"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIaaEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.462"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.462"*, align 8
  store %"struct.thrust::detail::cons.462"* %t, %"struct.thrust::detail::cons.462"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.462"*, %"struct.thrust::detail::cons.462"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.462", %"struct.thrust::detail::cons.462"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::reference.450"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIaaEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.463"* dereferenceable(8) %tail)
  ret %"class.thrust::reference.450"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.450"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIaaEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.463"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.463"*, align 8
  store %"struct.thrust::detail::cons.463"* %t, %"struct.thrust::detail::cons.463"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.463"*, %"struct.thrust::detail::cons.463"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.463", %"struct.thrust::detail::cons.463"* %0, i32 0, i32 0
  ret %"class.thrust::reference.450"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRKNS_4pairIaaEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.466"* %this, %"struct.thrust::pair"* dereferenceable(2) %t1, %"struct.thrust::pair"* dereferenceable(2) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.466"*, align 8
  %t1.addr = alloca %"struct.thrust::pair"*, align 8
  %t2.addr = alloca %"struct.thrust::pair"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.466"* %this, %"struct.thrust::detail::cons.466"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %t1, %"struct.thrust::pair"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %t2, %"struct.thrust::pair"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.466"*, %"struct.thrust::detail::cons.466"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.466", %"struct.thrust::detail::cons.466"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t1.addr, align 8
  store %"struct.thrust::pair"* %0, %"struct.thrust::pair"** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.466", %"struct.thrust::detail::cons.466"* %this1, i32 0, i32 1
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRNS_4pairIaaEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.111"* %tail, %"struct.thrust::pair"* dereferenceable(2) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_(%"class.thrust::zip_iterator.454"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.460", align 8
  %f.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  store %"class.thrust::zip_iterator.454"* %f, %"class.thrust::zip_iterator.454"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %f.addr, align 8
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv(%"class.thrust::zip_iterator.454"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.460", %"class.thrust::detail::tuple_of_iterator_references.460"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %coerce.dive, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive1 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %3, %"struct.thrust::pair"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.460", %"class.thrust::detail::tuple_of_iterator_references.460"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %coerce.dive2, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive3 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %7 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %6, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.454"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.455"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.455"*, align 8
  store %"class.thrust::iterator_facade.455"* %this, %"class.thrust::iterator_facade.455"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.455"*, %"class.thrust::iterator_facade.455"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.455"* %this1 to %"class.thrust::zip_iterator.454"*
  ret %"class.thrust::zip_iterator.454"* %0
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv(%"class.thrust::zip_iterator.454"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.460", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.461", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.454"* %this, %"class.thrust::zip_iterator.454"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.456"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.454"* %this1)
  %call2 = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_(%"class.thrust::tuple.456"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %ref.tmp, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 0
  %2 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call2, 0
  store %"struct.thrust::pair"* %2, %"struct.thrust::pair"** %1, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %0, i32 0, i32 1
  %4 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call2, 1
  store %"struct.thrust::pair"* %4, %"struct.thrust::pair"** %3, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE(%"class.thrust::detail::tuple_of_iterator_references.460"* %retval, %"class.thrust::tuple.461"* dereferenceable(16) %ref.tmp)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.460", %"class.thrust::detail::tuple_of_iterator_references.460"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %coerce.dive3, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive4 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %6 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %5, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_(%"class.thrust::tuple.456"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.461", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.456"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.456"* %t, %"class.thrust::tuple.456"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.456"*, %"class.thrust::tuple.456"** %t.addr, align 8
  %call = call { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_(%"class.thrust::tuple.456"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 0
  store %"struct.thrust::pair"* %3, %"struct.thrust::pair"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %call, 1
  store %"struct.thrust::pair"* %5, %"struct.thrust::pair"** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive1 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %7 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %6, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIaaEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE(%"class.thrust::detail::tuple_of_iterator_references.460"* %this, %"class.thrust::tuple.461"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.460"*, align 8
  %other.addr = alloca %"class.thrust::tuple.461"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.460"* %this, %"class.thrust::detail::tuple_of_iterator_references.460"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.461"* %other, %"class.thrust::tuple.461"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.460"*, %"class.thrust::detail::tuple_of_iterator_references.460"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.460"* %this1 to %"class.thrust::tuple.461"*
  %1 = load %"class.thrust::tuple.461"*, %"class.thrust::tuple.461"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.461"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.461"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair"*, %"struct.thrust::pair"* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_(%"class.thrust::tuple.456"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.461", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.456"*, align 8
  %ref.tmp = alloca %"class.thrust::reference.450", align 8
  store %"class.thrust::tuple.456"* %t, %"class.thrust::tuple.456"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.456"*, %"class.thrust::tuple.456"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.456"* %0 to %"struct.thrust::detail::cons.457"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %1)
  %call1 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.456"*, %"class.thrust::tuple.456"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.456"* %2 to %"struct.thrust::detail::cons.457"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.457"* dereferenceable(16) %3)
  %call3 = call %"struct.thrust::pair"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %call2)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %ref.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call3, %"struct.thrust::pair"** %coerce.dive5, align 8
  call void @_ZN6thrust5tupleIRKNS_4pairIaaEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_(%"class.thrust::tuple.461"* %retval, %"struct.thrust::pair"* dereferenceable(2) %call1, %"class.thrust::reference.450"* dereferenceable(8) %ref.tmp)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.461", %"class.thrust::tuple.461"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.462"* %coerce.dive6 to { %"struct.thrust::pair"*, %"struct.thrust::pair"* }*
  %5 = load { %"struct.thrust::pair"*, %"struct.thrust::pair"* }, { %"struct.thrust::pair"*, %"struct.thrust::pair"* }* %4, align 8
  ret { %"struct.thrust::pair"*, %"struct.thrust::pair"* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator"* %it, %"class.thrust::detail::tagged_iterator"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %0 to %"class.thrust::iterator_facade.431"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv(%"class.thrust::iterator_facade.431"* %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.450", align 8
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.439"* %it, %"class.thrust::detail::normal_iterator.439"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.439"* %0 to %"class.thrust::iterator_facade.441"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.441"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRKNS_4pairIaaEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_(%"class.thrust::tuple.461"* %this, %"struct.thrust::pair"* dereferenceable(2) %t0, %"class.thrust::reference.450"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.461"*, align 8
  %t0.addr = alloca %"struct.thrust::pair"*, align 8
  %t1.addr = alloca %"class.thrust::reference.450"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.461"* %this, %"class.thrust::tuple.461"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %t0, %"struct.thrust::pair"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::reference.450"* %t1, %"class.thrust::reference.450"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.461"*, %"class.thrust::tuple.461"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.461"* %this1 to %"struct.thrust::detail::cons.462"*
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t0.addr, align 8
  %2 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRKNS_4pairIaaEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.462"* %0, %"struct.thrust::pair"* dereferenceable(2) %1, %"class.thrust::reference.450"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv(%"class.thrust::iterator_facade.431"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.431"*, align 8
  store %"class.thrust::iterator_facade.431"* %this, %"class.thrust::iterator_facade.431"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.431"*, %"class.thrust::iterator_facade.431"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.431"* %this1)
  %call2 = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %call)
  ret %"struct.thrust::pair"* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  store %"class.thrust::detail::tagged_iterator"* %f, %"class.thrust::detail::tagged_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %0 to %"class.thrust::iterator_adaptor.430"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv(%"class.thrust::iterator_adaptor.430"* %1)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.431"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.431"*, align 8
  store %"class.thrust::iterator_facade.431"* %this, %"class.thrust::iterator_facade.431"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.431"*, %"class.thrust::iterator_facade.431"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.431"* %this1 to %"class.thrust::detail::tagged_iterator"*
  ret %"class.thrust::detail::tagged_iterator"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv(%"class.thrust::iterator_adaptor.430"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.430"*, align 8
  store %"class.thrust::iterator_adaptor.430"* %this, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.430"*, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.134"* %m_iterator to %"class.thrust::iterator_facade.136"*
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.136"* %0)
  ret %"struct.thrust::pair"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.441"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.450", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  store %"class.thrust::iterator_facade.441"* %this, %"class.thrust::iterator_facade.441"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.441"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.450", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  store %"class.thrust::detail::normal_iterator.439"* %f, %"class.thrust::detail::normal_iterator.439"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.439"* %0 to %"class.thrust::iterator_adaptor.440"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.440"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.441"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  store %"class.thrust::iterator_facade.441"* %this, %"class.thrust::iterator_facade.441"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.441"* %this1 to %"class.thrust::detail::normal_iterator.439"*
  ret %"class.thrust::detail::normal_iterator.439"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.440"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.450", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.440"*, align 8
  store %"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.440"*, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.442"* %m_iterator to %"class.thrust::iterator_facade.444"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.444"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive5, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive6, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRKNS_4pairIaaEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.462"* %this, %"struct.thrust::pair"* dereferenceable(2) %t1, %"class.thrust::reference.450"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.462"*, align 8
  %t1.addr = alloca %"struct.thrust::pair"*, align 8
  %t2.addr = alloca %"class.thrust::reference.450"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.462"* %this, %"struct.thrust::detail::cons.462"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %t1, %"struct.thrust::pair"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::reference.450"* %t2, %"class.thrust::reference.450"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.462"*, %"struct.thrust::detail::cons.462"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.462", %"struct.thrust::detail::cons.462"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %t1.addr, align 8
  store %"struct.thrust::pair"* %0, %"struct.thrust::pair"** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.462", %"struct.thrust::detail::cons.462"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_9referenceINS_4pairIaaEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.463"* %tail, %"class.thrust::reference.450"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_9referenceINS_4pairIaaEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.463"* %this, %"class.thrust::reference.450"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.463"*, align 8
  %t1.addr = alloca %"class.thrust::reference.450"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.463"* %this, %"struct.thrust::detail::cons.463"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.450"* %t1, %"class.thrust::reference.450"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.463"*, %"struct.thrust::detail::cons.463"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.463", %"struct.thrust::detail::cons.463"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::reference.450"* %head to i8*
  %11 = bitcast %"class.thrust::reference.450"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_(%"class.thrust::zip_iterator.454"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  store %"class.thrust::zip_iterator.454"* %f, %"class.thrust::zip_iterator.454"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv(%"class.thrust::zip_iterator.454"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.454"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.455"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.455"*, align 8
  store %"class.thrust::iterator_facade.455"* %this, %"class.thrust::iterator_facade.455"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.455"*, %"class.thrust::iterator_facade.455"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.455"* %this1 to %"class.thrust::zip_iterator.454"*
  ret %"class.thrust::zip_iterator.454"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv(%"class.thrust::zip_iterator.454"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.454"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.454"* %this, %"class.thrust::zip_iterator.454"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.454"*, %"class.thrust::zip_iterator.454"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.454", %"class.thrust::zip_iterator.454"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_(%"class.thrust::tuple.456"* dereferenceable(16) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_(%"class.thrust::tuple.456"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.456"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.456"* %t, %"class.thrust::tuple.456"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.456"*, %"class.thrust::tuple.456"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.456"* %0 to %"struct.thrust::detail::cons.457"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.457"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.456"*, %"class.thrust::tuple.456"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.456"* %2 to %"struct.thrust::detail::cons.457"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.458"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.457"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_(%"struct.thrust::detail::cons.458"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator"* %it, %"class.thrust::detail::tagged_iterator"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %0 to %"class.thrust::iterator_facade.431"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv(%"class.thrust::iterator_facade.431"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.457"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.457"*, align 8
  store %"struct.thrust::detail::cons.457"* %this, %"struct.thrust::detail::cons.457"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.457"*, %"struct.thrust::detail::cons.457"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.457", %"struct.thrust::detail::cons.457"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::tagged_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_(%"struct.thrust::detail::cons.458"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.458"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.458"* %t, %"struct.thrust::detail::cons.458"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.458"*, %"struct.thrust::detail::cons.458"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.458"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.458"*, %"struct.thrust::detail::cons.458"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.458"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.458"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.457"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.457"*, align 8
  store %"struct.thrust::detail::cons.457"* %this, %"struct.thrust::detail::cons.457"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.457"*, %"struct.thrust::detail::cons.457"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.457", %"struct.thrust::detail::cons.457"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.458"* %tail
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv(%"class.thrust::iterator_facade.431"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.431"*, align 8
  store %"class.thrust::iterator_facade.431"* %this, %"class.thrust::iterator_facade.431"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.431"*, %"class.thrust::iterator_facade.431"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.431"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.431"* %this1)
  ret %"class.thrust::detail::tagged_iterator"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"class.thrust::detail::tagged_iterator"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  store %"class.thrust::detail::tagged_iterator"* %f, %"class.thrust::detail::tagged_iterator"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %0 to %"class.thrust::iterator_adaptor.430"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv(%"class.thrust::iterator_adaptor.430"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.431"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.431"*, align 8
  store %"class.thrust::iterator_facade.431"* %this, %"class.thrust::iterator_facade.431"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.431"*, %"class.thrust::iterator_facade.431"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.431"* %this1 to %"class.thrust::detail::tagged_iterator"*
  ret %"class.thrust::detail::tagged_iterator"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv(%"class.thrust::iterator_adaptor.430"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.430"*, align 8
  store %"class.thrust::iterator_adaptor.430"* %this, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.430"*, %"class.thrust::iterator_adaptor.430"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.430", %"class.thrust::iterator_adaptor.430"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.134"* %m_iterator to %"class.thrust::iterator_facade.136"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv(%"class.thrust::iterator_facade.136"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv(%"class.thrust::iterator_facade.136"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.136"*, align 8
  store %"class.thrust::iterator_facade.136"* %this, %"class.thrust::iterator_facade.136"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.136"*, %"class.thrust::iterator_facade.136"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.136"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEEvRT_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.134"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.136"* %this1)
  ret %"class.thrust::detail::normal_iterator.134"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIaaEEEEEEvRT_(%"class.thrust::detail::normal_iterator.134"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.134"*, align 8
  store %"class.thrust::detail::normal_iterator.134"* %f, %"class.thrust::detail::normal_iterator.134"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.134"*, %"class.thrust::detail::normal_iterator.134"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.134"* %0 to %"class.thrust::iterator_adaptor.135"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv(%"class.thrust::iterator_adaptor.135"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv(%"class.thrust::iterator_adaptor.135"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.135"*, align 8
  store %"class.thrust::iterator_adaptor.135"* %this, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.135"*, %"class.thrust::iterator_adaptor.135"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.135", %"class.thrust::iterator_adaptor.135"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %0, i32 1
  store %"struct.thrust::pair"* %incdec.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !107
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.439"* %it, %"class.thrust::detail::normal_iterator.439"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.439"* %0 to %"class.thrust::iterator_facade.441"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv(%"class.thrust::iterator_facade.441"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.458"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.458"*, align 8
  store %"struct.thrust::detail::cons.458"* %this, %"struct.thrust::detail::cons.458"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.458"*, %"struct.thrust::detail::cons.458"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.458", %"struct.thrust::detail::cons.458"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.439"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.458"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.458"*, align 8
  store %"struct.thrust::detail::cons.458"* %this, %"struct.thrust::detail::cons.458"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.458"*, %"struct.thrust::detail::cons.458"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv(%"class.thrust::iterator_facade.441"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  store %"class.thrust::iterator_facade.441"* %this, %"class.thrust::iterator_facade.441"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.441"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.441"* %this1)
  ret %"class.thrust::detail::normal_iterator.439"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  store %"class.thrust::detail::normal_iterator.439"* %f, %"class.thrust::detail::normal_iterator.439"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.439"* %0 to %"class.thrust::iterator_adaptor.440"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv(%"class.thrust::iterator_adaptor.440"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.441"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  store %"class.thrust::iterator_facade.441"* %this, %"class.thrust::iterator_facade.441"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.441"* %this1 to %"class.thrust::detail::normal_iterator.439"*
  ret %"class.thrust::detail::normal_iterator.439"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv(%"class.thrust::iterator_adaptor.440"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.440"*, align 8
  store %"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.440"*, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.442"* %m_iterator to %"class.thrust::iterator_facade.444"*
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.444"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.444"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  store %"class.thrust::iterator_facade.444"* %this, %"class.thrust::iterator_facade.444"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.444"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_(%"class.thrust::pointer.442"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.444"* %this1)
  ret %"class.thrust::pointer.442"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_(%"class.thrust::pointer.442"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.442"*, align 8
  store %"class.thrust::pointer.442"* %f, %"class.thrust::pointer.442"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %0 to %"class.thrust::iterator_adaptor.443"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv(%"class.thrust::iterator_adaptor.443"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv(%"class.thrust::iterator_adaptor.443"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.443"*, align 8
  store %"class.thrust::iterator_adaptor.443"* %this, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.443"*, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !309
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %0, i32 1
  store %"struct.thrust::pair"* %incdec.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !309
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIaaEEEEEEEC2ERKS7_(%"struct.thrust::detail::unary_negate"* %this, %"struct.thrust::detail::tuple_binary_predicate"* dereferenceable(1) %pred) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::unary_negate"*, align 8
  %pred.addr = alloca %"struct.thrust::detail::tuple_binary_predicate"*, align 8
  store %"struct.thrust::detail::unary_negate"* %this, %"struct.thrust::detail::unary_negate"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::tuple_binary_predicate"* %pred, %"struct.thrust::detail::tuple_binary_predicate"** %pred.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::unary_negate"*, %"struct.thrust::detail::unary_negate"** %this.addr, align 8
  %pred2 = getelementptr inbounds %"struct.thrust::detail::unary_negate", %"struct.thrust::detail::unary_negate"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::tuple_binary_predicate"*, %"struct.thrust::detail::tuple_binary_predicate"** %pred.addr, align 8
  %1 = bitcast %"struct.thrust::detail::tuple_binary_predicate"* %pred2 to i8*
  %2 = bitcast %"struct.thrust::detail::tuple_binary_predicate"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IaaEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_(%"struct.thrust::pair.453"* %this, %"class.thrust::detail::tagged_iterator"* dereferenceable(8) %x, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.453"*, align 8
  %x.addr = alloca %"class.thrust::detail::tagged_iterator"*, align 8
  %y.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  store %"struct.thrust::pair.453"* %this, %"struct.thrust::pair.453"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator"* %x, %"class.thrust::detail::tagged_iterator"** %x.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.439"* %y, %"class.thrust::detail::normal_iterator.439"** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.453"*, %"struct.thrust::pair.453"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.453", %"struct.thrust::pair.453"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tagged_iterator"*, %"class.thrust::detail::tagged_iterator"** %x.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator"* %first to i8*
  %2 = bitcast %"class.thrust::detail::tagged_iterator"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.453", %"struct.thrust::pair.453"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %y.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.439"* %second to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.439"* %3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIaaEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.457"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.457"*, align 8
  store %"struct.thrust::detail::cons.457"* %t, %"struct.thrust::detail::cons.457"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.457"*, %"struct.thrust::detail::cons.457"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.457", %"struct.thrust::detail::cons.457"* %0, i32 0, i32 0
  ret %"class.thrust::detail::tagged_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE(%"struct.thrust::detail::cons.457"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.457"*, align 8
  store %"struct.thrust::detail::cons.457"* %t, %"struct.thrust::detail::cons.457"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.457"*, %"struct.thrust::detail::cons.457"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.457", %"struct.thrust::detail::cons.457"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.458"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.439"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.458"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.458"*, align 8
  store %"struct.thrust::detail::cons.458"* %t, %"struct.thrust::detail::cons.458"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.458"*, %"struct.thrust::detail::cons.458"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.458", %"struct.thrust::detail::cons.458"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.439"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.434"* %this, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.439"* %first to %"class.thrust::iterator_adaptor.440"*
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.440"* %0)
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.439"* %last to %"class.thrust::iterator_facade.441"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.439"* %first to %"class.thrust::iterator_facade.441"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.441"* dereferenceable(1) %3, %"class.thrust::iterator_facade.441"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive10, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %m_allocator, %"struct.thrust::pair"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.434"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.434"*, align 8
  store %"class.thrust::detail::contiguous_storage.434"* %this, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.434"*, %"class.thrust::detail::contiguous_storage.434"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.434", %"class.thrust::detail::contiguous_storage.434"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.439"* %m_begin to %"class.thrust::iterator_facade.441"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.434"* %this1)
  %call2 = call %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.441"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call2, %"struct.thrust::pair"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive8, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive9, align 8
  ret %"struct.thrust::pair"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %0, %"struct.thrust::pair"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.441"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.441"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  store %"class.thrust::iterator_facade.441"* %lhs, %"class.thrust::iterator_facade.441"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.441"* %rhs, %"class.thrust::iterator_facade.441"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.441"* %0 to %"class.thrust::detail::normal_iterator.439"*
  %2 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.441"* %2 to %"class.thrust::detail::normal_iterator.439"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %a, %"struct.thrust::pair"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.442", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.435"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.442", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %p.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.435"* %a, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.435"*, %"struct.thrust::detail::no_throw_allocator.435"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.435"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.442"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair"* %call5, %"struct.thrust::pair"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIaaEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %first = alloca %"class.thrust::pointer.442", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.442", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::pointer.442"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.442"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive4, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair"* %call6, %"struct.thrust::pair"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive9, i32 0, i32 0
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive10, align 8
  ret %"struct.thrust::pair"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIaaEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.442", align 8
  %first = alloca %"class.thrust::pointer.442", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %i = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::reference.450", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = bitcast %"class.thrust::pointer.442"* %first to %"class.thrust::iterator_facade.444"*
  %call = call %"struct.thrust::pair"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.444"* %6)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.450", %"class.thrust::reference.450"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive4, align 8
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIaaEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"class.thrust::reference.450"* dereferenceable(8) %ref.tmp)
  %7 = bitcast %"class.thrust::pointer.442"* %first to %"class.thrust::iterator_facade.444"*
  %call5 = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.444"* %7)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add nsw i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = bitcast %"class.thrust::pointer.442"* %retval to i8*
  %10 = bitcast %"class.thrust::pointer.442"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %11) #5
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive6, i32 0, i32 0
  %12 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive7, align 8
  ret %"struct.thrust::pair"* %12
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIaaEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.146"* %this, %"class.thrust::reference.450"* dereferenceable(8) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %x.addr = alloca %"class.thrust::reference.450"*, align 8
  store %"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.450"* %x, %"class.thrust::reference.450"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::wrapped_function.146"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::reference.450"*, %"class.thrust::reference.450"** %x.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIaaEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.450"* dereferenceable(8) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIaaEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %m_f, %"struct.thrust::pair"* dereferenceable(2) %call)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIaaEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %this, %"struct.thrust::pair"* dereferenceable(2) %x) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::gozer"*, align 8
  %x.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::gozer"* %this, %"struct.thrust::detail::allocator_traits_detail::gozer"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %x, %"struct.thrust::pair"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::gozer"*, %"struct.thrust::detail::allocator_traits_detail::gozer"** %this.addr, align 8
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.439"* %f1, %"class.thrust::detail::normal_iterator.439"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.439"* %f2, %"class.thrust::detail::normal_iterator.439"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  store %"class.thrust::detail::normal_iterator.439"* %f1, %"class.thrust::detail::normal_iterator.439"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.439"* %f2, %"class.thrust::detail::normal_iterator.439"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.439"* %1 to %"class.thrust::iterator_adaptor.440"*
  %3 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.439"* %3 to %"class.thrust::iterator_adaptor.440"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.440"* %2, %"class.thrust::iterator_adaptor.440"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::iterator_adaptor.440"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.440"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.440"*, align 8
  store %"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.440"* %y, %"class.thrust::iterator_adaptor.440"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.440"*, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.440"*, %"class.thrust::iterator_adaptor.440"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.440"* %0)
  %1 = bitcast %"class.thrust::pointer.442"* %call to %"class.thrust::iterator_facade.444"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.442"* %m_iterator to %"class.thrust::iterator_facade.444"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.444"* dereferenceable(1) %1, %"class.thrust::iterator_facade.444"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.444"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.444"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.444"*, align 8
  store %"class.thrust::iterator_facade.444"* %lhs, %"class.thrust::iterator_facade.444"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.444"* %rhs, %"class.thrust::iterator_facade.444"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.444"* %0 to %"class.thrust::pointer.442"*
  %2 = load %"class.thrust::iterator_facade.444"*, %"class.thrust::iterator_facade.444"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.444"* %2 to %"class.thrust::pointer.442"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.442"* dereferenceable(8) %1, %"class.thrust::pointer.442"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.442"* dereferenceable(8) %f1, %"class.thrust::pointer.442"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.442"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.442"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.442"* %f1, %"class.thrust::pointer.442"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.442"* %f2, %"class.thrust::pointer.442"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.442"* dereferenceable(8) %0, %"class.thrust::pointer.442"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.442"* dereferenceable(8) %f1, %"class.thrust::pointer.442"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.442"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.442"*, align 8
  store %"class.thrust::pointer.442"* %f1, %"class.thrust::pointer.442"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.442"* %f2, %"class.thrust::pointer.442"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.442"* %1 to %"class.thrust::iterator_adaptor.443"*
  %3 = load %"class.thrust::pointer.442"*, %"class.thrust::pointer.442"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.442"* %3 to %"class.thrust::iterator_adaptor.443"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.443"* %2, %"class.thrust::iterator_adaptor.443"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.443"* %this, %"class.thrust::iterator_adaptor.443"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.443"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.443"*, align 8
  store %"class.thrust::iterator_adaptor.443"* %this, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.443"* %y, %"class.thrust::iterator_adaptor.443"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.443"*, %"class.thrust::iterator_adaptor.443"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.443"*, %"class.thrust::iterator_adaptor.443"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.443"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !309
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.441"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.439", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.439", align 8
  store %"class.thrust::iterator_facade.441"* %i, %"class.thrust::iterator_facade.441"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.439"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.441"* %1 to %"class.thrust::detail::normal_iterator.439"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.439"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.439"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.439"* %tmp to %"class.thrust::iterator_facade.441"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.441"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.439"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.439"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.439"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.439", %"class.thrust::detail::normal_iterator.439"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.442", %"class.thrust::pointer.442"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.443", %"class.thrust::iterator_adaptor.443"* %coerce.dive2, i32 0, i32 0
  %10 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  ret %"struct.thrust::pair"* %10
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.441"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.441"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.441"* %this, %"class.thrust::iterator_facade.441"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.441"*, %"class.thrust::iterator_facade.441"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.441"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.439"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.441"* %this1)
  ret %"class.thrust::detail::normal_iterator.439"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.439"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.439"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.439"* %f, %"class.thrust::detail::normal_iterator.439"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.439"*, %"class.thrust::detail::normal_iterator.439"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.439"* %0 to %"class.thrust::iterator_adaptor.440"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.440"* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.440"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.440"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.440"* %this, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.440"*, %"class.thrust::iterator_adaptor.440"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.440", %"class.thrust::iterator_adaptor.440"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.442"* %m_iterator to %"class.thrust::iterator_facade.444"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.442"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.444"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.63"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.427", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.63"*, align 8
  store %"class.thrust::detail::contiguous_storage.63"* %this, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.63"*, %"class.thrust::detail::contiguous_storage.63"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.63", %"class.thrust::detail::contiguous_storage.63"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE(%"class.thrust::detail::normal_iterator.427"* %retval, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.427", %"class.thrust::detail::normal_iterator.427"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.137", %"class.thrust::device_ptr.137"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.138", %"class.thrust::pointer.138"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.139", %"class.thrust::iterator_adaptor.139"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE(%"class.thrust::detail::normal_iterator.427"* %this, %"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.427"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.66"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.137", align 8
  store %"class.thrust::detail::normal_iterator.427"* %this, %"class.thrust::detail::normal_iterator.427"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.66"* %other, %"class.thrust::detail::normal_iterator.66"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.427"*, %"class.thrust::detail::normal_iterator.427"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.427"* %this1 to %"class.thrust::iterator_adaptor.428"*
  %2 = load %"class.thrust::detail::normal_iterator.66"*, %"class.thrust::detail::normal_iterator.66"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.66"* %2 to %"class.thrust::iterator_adaptor.67"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.69"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.67"* %3)
  call void @_ZN6thrust10device_ptrIKNS_4pairIaaEEEC2IS2_EERKNS0_IT_EE(%"class.thrust::device_ptr.137"* %ref.tmp, %"class.thrust::device_ptr.69"* dereferenceable(8) %call)
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_(%"class.thrust::iterator_adaptor.428"* %1, %"class.thrust::device_ptr.137"* dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKNS_4pairIaaEEEC2IS2_EERKNS0_IT_EE(%"class.thrust::device_ptr.137"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  store %"class.thrust::device_ptr.137"* %this, %"class.thrust::device_ptr.137"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %other, %"class.thrust::device_ptr.69"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.137"* %this1 to %"class.thrust::pointer.138"*
  %1 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %other.addr, align 8
  call void @_ZN6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE(%"class.thrust::pointer.138"* %0, %"class.thrust::device_ptr.69"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIaaEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_(%"class.thrust::iterator_adaptor.428"* %this, %"class.thrust::device_ptr.137"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.428"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.137"*, align 8
  store %"class.thrust::iterator_adaptor.428"* %this, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.137"* %iter, %"class.thrust::device_ptr.137"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.428"*, %"class.thrust::iterator_adaptor.428"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.428"* %this1 to %"class.thrust::iterator_facade.429"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.428", %"class.thrust::iterator_adaptor.428"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.137"*, %"class.thrust::device_ptr.137"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.137"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.137"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKNS_4pairIaaEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE(%"class.thrust::pointer.138"* %this, %"class.thrust::device_ptr.69"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.138"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.69"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::pair"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.69", align 8
  store %"class.thrust::pointer.138"* %this, %"class.thrust::pointer.138"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.69"* %other, %"class.thrust::device_ptr.69"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.138"*, %"class.thrust::pointer.138"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.138"* %this1 to %"class.thrust::iterator_adaptor.139"*
  %2 = load %"class.thrust::device_ptr.69"*, %"class.thrust::device_ptr.69"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.69"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.69"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive2, i32 0, i32 0
  %5 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive3, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIaaEEEEE3getES5_(%"struct.thrust::pair"* %5)
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.139"* %1, %"struct.thrust::pair"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest17UnitTestExceptionC2Ev(%"class.unittest::UnitTestException"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  call void @_ZNSsC2Ev(%"class.std::basic_string"* %message)
  ret void
}

; Function Attrs: uwtable
define available_externally void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode(%"class.std::basic_ostringstream"* %this, i32 %__mode) unnamed_addr #0 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_ostringstream"*, align 8
  %__mode.addr = alloca i32, align 4
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.std::basic_ostringstream"* %this, %"class.std::basic_ostringstream"** %this.addr, align 8, !tbaa !1
  store i32 %__mode, i32* %__mode.addr, align 4, !tbaa !318
  %this1 = load %"class.std::basic_ostringstream"*, %"class.std::basic_ostringstream"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %this1 to i8*
  %1 = getelementptr inbounds i8, i8* %0, i64 88
  %2 = bitcast i8* %1 to %"class.std::basic_ios"*
  call void @_ZNSt9basic_iosIcSt11char_traitsIcEEC2Ev(%"class.std::basic_ios"* %2)
  %3 = bitcast %"class.std::basic_ostringstream"* %this1 to %"class.std::basic_ostream"*
  invoke void @_ZNSoC2Ev(%"class.std::basic_ostream"* %3, i8** getelementptr inbounds ([4 x i8*], [4 x i8*]* @_ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE, i64 0, i64 1))
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %4 = bitcast %"class.std::basic_ostringstream"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([10 x i8*], [10 x i8*]* @_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE, i32 0, i32 3) to i32 (...)**), i32 (...)*** %4, align 8, !tbaa !5
  %5 = bitcast %"class.std::basic_ostringstream"* %this1 to i8*
  %add.ptr = getelementptr inbounds i8, i8* %5, i64 88
  %6 = bitcast i8* %add.ptr to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([10 x i8*], [10 x i8*]* @_ZTVSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE, i32 0, i32 8) to i32 (...)**), i32 (...)*** %6, align 8, !tbaa !5
  %_M_stringbuf = getelementptr inbounds %"class.std::basic_ostringstream", %"class.std::basic_ostringstream"* %this1, i32 0, i32 1
  %7 = load i32, i32* %__mode.addr, align 4, !tbaa !318
  %call = invoke i32 @_ZStorSt13_Ios_OpenmodeS_(i32 %7, i32 16)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  invoke void @_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode(%"class.std::basic_stringbuf"* %_M_stringbuf, i32 %call)
          to label %invoke.cont4 unwind label %lpad2

invoke.cont4:                                     ; preds = %invoke.cont3
  %8 = bitcast %"class.std::basic_ostringstream"* %this1 to i8**
  %vtable = load i8*, i8** %8, align 8, !tbaa !5
  %vbase.offset.ptr = getelementptr i8, i8* %vtable, i64 -24
  %9 = bitcast i8* %vbase.offset.ptr to i64*
  %vbase.offset = load i64, i64* %9, align 8
  %10 = bitcast %"class.std::basic_ostringstream"* %this1 to i8*
  %add.ptr5 = getelementptr inbounds i8, i8* %10, i64 %vbase.offset
  %11 = bitcast i8* %add.ptr5 to %"class.std::basic_ios"*
  %_M_stringbuf6 = getelementptr inbounds %"class.std::basic_ostringstream", %"class.std::basic_ostringstream"* %this1, i32 0, i32 1
  %12 = bitcast %"class.std::basic_stringbuf"* %_M_stringbuf6 to %"class.std::basic_streambuf"*
  invoke void @_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E(%"class.std::basic_ios"* %11, %"class.std::basic_streambuf"* %12)
          to label %invoke.cont8 unwind label %lpad7

invoke.cont8:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %13 = landingpad { i8*, i32 }
          cleanup
  %14 = extractvalue { i8*, i32 } %13, 0
  store i8* %14, i8** %exn.slot, align 8
  %15 = extractvalue { i8*, i32 } %13, 1
  store i32 %15, i32* %ehselector.slot, align 4
  br label %ehcleanup9

lpad2:                                            ; preds = %invoke.cont3, %invoke.cont
  %16 = landingpad { i8*, i32 }
          cleanup
  %17 = extractvalue { i8*, i32 } %16, 0
  store i8* %17, i8** %exn.slot, align 8
  %18 = extractvalue { i8*, i32 } %16, 1
  store i32 %18, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad7:                                            ; preds = %invoke.cont4
  %19 = landingpad { i8*, i32 }
          cleanup
  %20 = extractvalue { i8*, i32 } %19, 0
  store i8* %20, i8** %exn.slot, align 8
  %21 = extractvalue { i8*, i32 } %19, 1
  store i32 %21, i32* %ehselector.slot, align 4
  call void @_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev(%"class.std::basic_stringbuf"* %_M_stringbuf) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad7, %lpad2
  %22 = bitcast %"class.std::basic_ostringstream"* %this1 to %"class.std::basic_ostream"*
  call void @_ZNSoD2Ev(%"class.std::basic_ostream"* %22, i8** getelementptr inbounds ([4 x i8*], [4 x i8*]* @_ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE, i64 0, i64 1)) #5
  br label %ehcleanup9

ehcleanup9:                                       ; preds = %ehcleanup, %lpad
  %23 = bitcast %"class.std::basic_ostringstream"* %this1 to i8*
  %24 = getelementptr inbounds i8, i8* %23, i64 88
  %25 = bitcast i8* %24 to %"class.std::basic_ios"*
  call void @_ZNSt9basic_iosIcSt11char_traitsIcEED2Ev(%"class.std::basic_ios"* %25) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup9
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val10 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val10
}

; Function Attrs: inlinehint uwtable
define available_externally dereferenceable(272) %"class.std::basic_ostream"* @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(%"class.std::basic_ostream"* dereferenceable(272) %__out, i8* %__s) #8 {
entry:
  %__out.addr = alloca %"class.std::basic_ostream"*, align 8
  %__s.addr = alloca i8*, align 8
  store %"class.std::basic_ostream"* %__out, %"class.std::basic_ostream"** %__out.addr, align 8, !tbaa !7
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %tobool = icmp ne i8* %0, null
  br i1 %tobool, label %if.else, label %if.then

if.then:                                          ; preds = %entry
  %1 = load %"class.std::basic_ostream"*, %"class.std::basic_ostream"** %__out.addr, align 8
  %2 = bitcast %"class.std::basic_ostream"* %1 to i8**
  %vtable = load i8*, i8** %2, align 8, !tbaa !5
  %vbase.offset.ptr = getelementptr i8, i8* %vtable, i64 -24
  %3 = bitcast i8* %vbase.offset.ptr to i64*
  %vbase.offset = load i64, i64* %3, align 8
  %4 = bitcast %"class.std::basic_ostream"* %1 to i8*
  %add.ptr = getelementptr inbounds i8, i8* %4, i64 %vbase.offset
  %5 = bitcast i8* %add.ptr to %"class.std::basic_ios"*
  call void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate(%"class.std::basic_ios"* %5, i32 1)
  br label %if.end

if.else:                                          ; preds = %entry
  %6 = load %"class.std::basic_ostream"*, %"class.std::basic_ostream"** %__out.addr, align 8
  %7 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %8 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %call = call i64 @_ZNSt11char_traitsIcE6lengthEPKc(i8* %8)
  %call1 = call dereferenceable(272) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* dereferenceable(272) %6, i8* %7, i64 %call)
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %9 = load %"class.std::basic_ostream"*, %"class.std::basic_ostream"** %__out.addr, align 8
  ret %"class.std::basic_ostream"* %9
}

; Function Attrs: uwtable
define available_externally void @_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* noalias sret %agg.result, %"class.std::basic_ostringstream"* %this) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ostringstream"*, align 8
  store %"class.std::basic_ostringstream"* %this, %"class.std::basic_ostringstream"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ostringstream"*, %"class.std::basic_ostringstream"** %this.addr, align 8
  %_M_stringbuf = getelementptr inbounds %"class.std::basic_ostringstream", %"class.std::basic_ostringstream"* %this1, i32 0, i32 1
  call void @_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* sret %agg.result, %"class.std::basic_stringbuf"* %_M_stringbuf)
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ostringstream"*, align 8
  store %"class.std::basic_ostringstream"* %this, %"class.std::basic_ostringstream"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ostringstream"*, %"class.std::basic_ostringstream"** %this.addr, align 8
  call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev(%"class.std::basic_ostringstream"* %this1, i8** getelementptr inbounds ([4 x i8*], [4 x i8*]* @_ZTTSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE, i64 0, i64 0)) #5
  %0 = bitcast %"class.std::basic_ostringstream"* %this1 to i8*
  %1 = getelementptr inbounds i8, i8* %0, i64 88
  %2 = bitcast i8* %1 to %"class.std::basic_ios"*
  call void @_ZNSt9basic_iosIcSt11char_traitsIcEED2Ev(%"class.std::basic_ios"* %2) #5
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSt9basic_iosIcSt11char_traitsIcEEC2Ev(%"class.std::basic_ios"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ios"*, align 8
  store %"class.std::basic_ios"* %this, %"class.std::basic_ios"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ios"*, %"class.std::basic_ios"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ios"* %this1 to %"class.std::ios_base"*
  call void @_ZNSt8ios_baseC2Ev(%"class.std::ios_base"* %0) #5
  %1 = bitcast %"class.std::basic_ios"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([4 x i8*], [4 x i8*]* @_ZTVSt9basic_iosIcSt11char_traitsIcEE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  %_M_tie = getelementptr inbounds %"class.std::basic_ios", %"class.std::basic_ios"* %this1, i32 0, i32 1
  store %"class.std::basic_ostream"* null, %"class.std::basic_ostream"** %_M_tie, align 8, !tbaa !320
  %_M_fill = getelementptr inbounds %"class.std::basic_ios", %"class.std::basic_ios"* %this1, i32 0, i32 2
  store i8 0, i8* %_M_fill, align 8, !tbaa !322
  %_M_fill_init = getelementptr inbounds %"class.std::basic_ios", %"class.std::basic_ios"* %this1, i32 0, i32 3
  store i8 0, i8* %_M_fill_init, align 1, !tbaa !323
  %_M_streambuf = getelementptr inbounds %"class.std::basic_ios", %"class.std::basic_ios"* %this1, i32 0, i32 4
  store %"class.std::basic_streambuf"* null, %"class.std::basic_streambuf"** %_M_streambuf, align 8, !tbaa !324
  %_M_ctype = getelementptr inbounds %"class.std::basic_ios", %"class.std::basic_ios"* %this1, i32 0, i32 5
  store %"class.std::ctype"* null, %"class.std::ctype"** %_M_ctype, align 8, !tbaa !325
  %_M_num_put = getelementptr inbounds %"class.std::basic_ios", %"class.std::basic_ios"* %this1, i32 0, i32 6
  store %"class.std::num_put"* null, %"class.std::num_put"** %_M_num_put, align 8, !tbaa !326
  %_M_num_get = getelementptr inbounds %"class.std::basic_ios", %"class.std::basic_ios"* %this1, i32 0, i32 7
  store %"class.std::num_get"* null, %"class.std::num_get"** %_M_num_get, align 8, !tbaa !327
  ret void
}

; Function Attrs: uwtable
define available_externally void @_ZNSoC2Ev(%"class.std::basic_ostream"* %this, i8** %vtt) unnamed_addr #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ostream"*, align 8
  %vtt.addr = alloca i8**, align 8
  store %"class.std::basic_ostream"* %this, %"class.std::basic_ostream"** %this.addr, align 8, !tbaa !1
  store i8** %vtt, i8*** %vtt.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ostream"*, %"class.std::basic_ostream"** %this.addr, align 8
  %vtt2 = load i8**, i8*** %vtt.addr, align 8
  %0 = load i8*, i8** %vtt2, align 8
  %1 = bitcast %"class.std::basic_ostream"* %this1 to i32 (...)***
  %2 = bitcast i8* %0 to i32 (...)**
  store i32 (...)** %2, i32 (...)*** %1, align 8, !tbaa !5
  %3 = getelementptr inbounds i8*, i8** %vtt2, i64 1
  %4 = load i8*, i8** %3, align 8
  %5 = bitcast %"class.std::basic_ostream"* %this1 to i8**
  %vtable = load i8*, i8** %5, align 8, !tbaa !5
  %vbase.offset.ptr = getelementptr i8, i8* %vtable, i64 -24
  %6 = bitcast i8* %vbase.offset.ptr to i64*
  %vbase.offset = load i64, i64* %6, align 8
  %7 = bitcast %"class.std::basic_ostream"* %this1 to i8*
  %add.ptr = getelementptr inbounds i8, i8* %7, i64 %vbase.offset
  %8 = bitcast i8* %add.ptr to i32 (...)***
  %9 = bitcast i8* %4 to i32 (...)**
  store i32 (...)** %9, i32 (...)*** %8, align 8, !tbaa !5
  %10 = bitcast %"class.std::basic_ostream"* %this1 to i8**
  %vtable3 = load i8*, i8** %10, align 8, !tbaa !5
  %vbase.offset.ptr4 = getelementptr i8, i8* %vtable3, i64 -24
  %11 = bitcast i8* %vbase.offset.ptr4 to i64*
  %vbase.offset5 = load i64, i64* %11, align 8
  %12 = bitcast %"class.std::basic_ostream"* %this1 to i8*
  %add.ptr6 = getelementptr inbounds i8, i8* %12, i64 %vbase.offset5
  %13 = bitcast i8* %add.ptr6 to %"class.std::basic_ios"*
  call void @_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E(%"class.std::basic_ios"* %13, %"class.std::basic_streambuf"* null)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZStorSt13_Ios_OpenmodeS_(i32 %__a, i32 %__b) #9 comdat {
entry:
  %__a.addr = alloca i32, align 4
  %__b.addr = alloca i32, align 4
  store i32 %__a, i32* %__a.addr, align 4, !tbaa !318
  store i32 %__b, i32* %__b.addr, align 4, !tbaa !318
  %0 = load i32, i32* %__a.addr, align 4, !tbaa !318
  %1 = load i32, i32* %__b.addr, align 4, !tbaa !318
  %or = or i32 %0, %1
  ret i32 %or
}

; Function Attrs: uwtable
define available_externally void @_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode(%"class.std::basic_stringbuf"* %this, i32 %__mode) unnamed_addr #0 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_stringbuf"*, align 8
  %__mode.addr = alloca i32, align 4
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.std::basic_stringbuf"* %this, %"class.std::basic_stringbuf"** %this.addr, align 8, !tbaa !1
  store i32 %__mode, i32* %__mode.addr, align 4, !tbaa !318
  %this1 = load %"class.std::basic_stringbuf"*, %"class.std::basic_stringbuf"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  call void @_ZNSt15basic_streambufIcSt11char_traitsIcEEC2Ev(%"class.std::basic_streambuf"* %0)
  %1 = bitcast %"class.std::basic_stringbuf"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([16 x i8*], [16 x i8*]* @_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %1, align 8, !tbaa !5
  %_M_mode = getelementptr inbounds %"class.std::basic_stringbuf", %"class.std::basic_stringbuf"* %this1, i32 0, i32 1
  %2 = load i32, i32* %__mode.addr, align 4, !tbaa !318
  store i32 %2, i32* %_M_mode, align 8, !tbaa !328
  %_M_string = getelementptr inbounds %"class.std::basic_stringbuf", %"class.std::basic_stringbuf"* %this1, i32 0, i32 2
  invoke void @_ZNSsC2Ev(%"class.std::basic_string"* %_M_string)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  call void @_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev(%"class.std::basic_streambuf"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

declare void @_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E(%"class.std::basic_ios"*, %"class.std::basic_streambuf"*) #3

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev(%"class.std::basic_stringbuf"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::basic_stringbuf"*, align 8
  store %"class.std::basic_stringbuf"* %this, %"class.std::basic_stringbuf"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_stringbuf"*, %"class.std::basic_stringbuf"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_stringbuf"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([16 x i8*], [16 x i8*]* @_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  %_M_string = getelementptr inbounds %"class.std::basic_stringbuf", %"class.std::basic_stringbuf"* %this1, i32 0, i32 2
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %_M_string) #5
  %1 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  call void @_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev(%"class.std::basic_streambuf"* %1) #5
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSoD2Ev(%"class.std::basic_ostream"* %this, i8** %vtt) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ostream"*, align 8
  %vtt.addr = alloca i8**, align 8
  store %"class.std::basic_ostream"* %this, %"class.std::basic_ostream"** %this.addr, align 8, !tbaa !1
  store i8** %vtt, i8*** %vtt.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ostream"*, %"class.std::basic_ostream"** %this.addr, align 8
  %vtt2 = load i8**, i8*** %vtt.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSt9basic_iosIcSt11char_traitsIcEED2Ev(%"class.std::basic_ios"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ios"*, align 8
  store %"class.std::basic_ios"* %this, %"class.std::basic_ios"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ios"*, %"class.std::basic_ios"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ios"* %this1 to %"class.std::ios_base"*
  call void @_ZNSt8ios_baseD2Ev(%"class.std::ios_base"* %0) #5
  ret void
}

; Function Attrs: nounwind
declare void @_ZNSt8ios_baseC2Ev(%"class.std::ios_base"*) unnamed_addr #4

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSt15basic_streambufIcSt11char_traitsIcEEC2Ev(%"class.std::basic_streambuf"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_streambuf"*, align 8
  store %"class.std::basic_streambuf"* %this, %"class.std::basic_streambuf"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_streambuf"*, %"class.std::basic_streambuf"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_streambuf"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([16 x i8*], [16 x i8*]* @_ZTVSt15basic_streambufIcSt11char_traitsIcEE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  %_M_in_beg = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 1
  store i8* null, i8** %_M_in_beg, align 8, !tbaa !330
  %_M_in_cur = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 2
  store i8* null, i8** %_M_in_cur, align 8, !tbaa !333
  %_M_in_end = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 3
  store i8* null, i8** %_M_in_end, align 8, !tbaa !334
  %_M_out_beg = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 4
  store i8* null, i8** %_M_out_beg, align 8, !tbaa !335
  %_M_out_cur = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 5
  store i8* null, i8** %_M_out_cur, align 8, !tbaa !336
  %_M_out_end = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 6
  store i8* null, i8** %_M_out_end, align 8, !tbaa !337
  %_M_buf_locale = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 7
  call void @_ZNSt6localeC1Ev(%"class.std::locale"* %_M_buf_locale) #5
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSt15basic_streambufIcSt11char_traitsIcEED2Ev(%"class.std::basic_streambuf"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_streambuf"*, align 8
  store %"class.std::basic_streambuf"* %this, %"class.std::basic_streambuf"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_streambuf"*, %"class.std::basic_streambuf"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_streambuf"* %this1 to i32 (...)***
  store i32 (...)** bitcast (i8** getelementptr inbounds ([16 x i8*], [16 x i8*]* @_ZTVSt15basic_streambufIcSt11char_traitsIcEE, i32 0, i32 2) to i32 (...)**), i32 (...)*** %0, align 8, !tbaa !5
  %_M_buf_locale = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 7
  call void @_ZNSt6localeD1Ev(%"class.std::locale"* %_M_buf_locale) #5
  ret void
}

; Function Attrs: nounwind
declare void @_ZNSt6localeC1Ev(%"class.std::locale"*) unnamed_addr #4

; Function Attrs: nounwind
declare void @_ZNSt6localeD1Ev(%"class.std::locale"*) unnamed_addr #4

; Function Attrs: nounwind
declare void @_ZNSt8ios_baseD2Ev(%"class.std::ios_base"*) unnamed_addr #4

; Function Attrs: uwtable
define available_externally void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate(%"class.std::basic_ios"* %this, i32 %__state) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ios"*, align 8
  %__state.addr = alloca i32, align 4
  store %"class.std::basic_ios"* %this, %"class.std::basic_ios"** %this.addr, align 8, !tbaa !1
  store i32 %__state, i32* %__state.addr, align 4, !tbaa !338
  %this1 = load %"class.std::basic_ios"*, %"class.std::basic_ios"** %this.addr, align 8
  %call = call i32 @_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv(%"class.std::basic_ios"* %this1)
  %0 = load i32, i32* %__state.addr, align 4, !tbaa !338
  %call2 = call i32 @_ZStorSt12_Ios_IostateS_(i32 %call, i32 %0)
  call void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(%"class.std::basic_ios"* %this1, i32 %call2)
  ret void
}

declare dereferenceable(272) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* dereferenceable(272), i8*, i64) #3

declare void @_ZNSt9basic_iosIcSt11char_traitsIcEE5clearESt12_Ios_Iostate(%"class.std::basic_ios"*, i32) #3

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32 @_ZStorSt12_Ios_IostateS_(i32 %__a, i32 %__b) #9 comdat {
entry:
  %__a.addr = alloca i32, align 4
  %__b.addr = alloca i32, align 4
  store i32 %__a, i32* %__a.addr, align 4, !tbaa !338
  store i32 %__b, i32* %__b.addr, align 4, !tbaa !338
  %0 = load i32, i32* %__a.addr, align 4, !tbaa !338
  %1 = load i32, i32* %__b.addr, align 4, !tbaa !338
  %or = or i32 %0, %1
  ret i32 %or
}

; Function Attrs: nounwind uwtable
define available_externally i32 @_ZNKSt9basic_iosIcSt11char_traitsIcEE7rdstateEv(%"class.std::basic_ios"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ios"*, align 8
  store %"class.std::basic_ios"* %this, %"class.std::basic_ios"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ios"*, %"class.std::basic_ios"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ios"* %this1 to %"class.std::ios_base"*
  %_M_streambuf_state = getelementptr inbounds %"class.std::ios_base", %"class.std::ios_base"* %0, i32 0, i32 5
  %1 = load i32, i32* %_M_streambuf_state, align 8, !tbaa !340
  ret i32 %1
}

; Function Attrs: uwtable
define available_externally void @_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv(%"class.std::basic_string"* noalias sret %agg.result, %"class.std::basic_stringbuf"* %this) #0 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_stringbuf"*, align 8
  %nrvo = alloca i1, align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  %ref.tmp11 = alloca %"class.std::allocator", align 1
  %ref.tmp17 = alloca %"class.std::basic_string", align 8
  %ref.tmp22 = alloca %"class.std::allocator", align 1
  store %"class.std::basic_stringbuf"* %this, %"class.std::basic_stringbuf"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_stringbuf"*, %"class.std::basic_stringbuf"** %this.addr, align 8
  store i1 false, i1* %nrvo, align 1
  call void @_ZNSsC2Ev(%"class.std::basic_string"* %agg.result)
  %0 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  %call = invoke i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv(%"class.std::basic_streambuf"* %0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %tobool = icmp ne i8* %call, null
  br i1 %tobool, label %if.then, label %if.else30

if.then:                                          ; preds = %invoke.cont
  %1 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  %call3 = invoke i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv(%"class.std::basic_streambuf"* %1)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %if.then
  %2 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  %call5 = invoke i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv(%"class.std::basic_streambuf"* %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %cmp = icmp ugt i8* %call3, %call5
  br i1 %cmp, label %if.then6, label %if.else

if.then6:                                         ; preds = %invoke.cont4
  %3 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  %call8 = invoke i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv(%"class.std::basic_streambuf"* %3)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %if.then6
  %4 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  %call10 = invoke i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv(%"class.std::basic_streambuf"* %4)
          to label %invoke.cont9 unwind label %lpad

invoke.cont9:                                     ; preds = %invoke.cont7
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp11) #5
  invoke void @_ZNSsC2IPcEET_S1_RKSaIcE(%"class.std::basic_string"* %ref.tmp, i8* %call8, i8* %call10, %"class.std::allocator"* dereferenceable(1) %ref.tmp11)
          to label %invoke.cont13 unwind label %lpad12

invoke.cont13:                                    ; preds = %invoke.cont9
  %call16 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSEOSs(%"class.std::basic_string"* %agg.result, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont15 unwind label %lpad14

invoke.cont15:                                    ; preds = %invoke.cont13
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp11) #5
  br label %if.end

lpad:                                             ; preds = %if.else30, %invoke.cont18, %if.else, %invoke.cont7, %if.then6, %invoke.cont2, %if.then, %entry
  %5 = landingpad { i8*, i32 }
          cleanup
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %ehcleanup34

lpad12:                                           ; preds = %invoke.cont9
  %8 = landingpad { i8*, i32 }
          cleanup
  %9 = extractvalue { i8*, i32 } %8, 0
  store i8* %9, i8** %exn.slot, align 8
  %10 = extractvalue { i8*, i32 } %8, 1
  store i32 %10, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad14:                                           ; preds = %invoke.cont13
  %11 = landingpad { i8*, i32 }
          cleanup
  %12 = extractvalue { i8*, i32 } %11, 0
  store i8* %12, i8** %exn.slot, align 8
  %13 = extractvalue { i8*, i32 } %11, 1
  store i32 %13, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad14, %lpad12
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp11) #5
  br label %ehcleanup34

if.else:                                          ; preds = %invoke.cont4
  %14 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  %call19 = invoke i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv(%"class.std::basic_streambuf"* %14)
          to label %invoke.cont18 unwind label %lpad

invoke.cont18:                                    ; preds = %if.else
  %15 = bitcast %"class.std::basic_stringbuf"* %this1 to %"class.std::basic_streambuf"*
  %call21 = invoke i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv(%"class.std::basic_streambuf"* %15)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont18
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp22) #5
  invoke void @_ZNSsC2IPcEET_S1_RKSaIcE(%"class.std::basic_string"* %ref.tmp17, i8* %call19, i8* %call21, %"class.std::allocator"* dereferenceable(1) %ref.tmp22)
          to label %invoke.cont24 unwind label %lpad23

invoke.cont24:                                    ; preds = %invoke.cont20
  %call27 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSEOSs(%"class.std::basic_string"* %agg.result, %"class.std::basic_string"* dereferenceable(8) %ref.tmp17)
          to label %invoke.cont26 unwind label %lpad25

invoke.cont26:                                    ; preds = %invoke.cont24
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp17) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp22) #5
  br label %if.end

lpad23:                                           ; preds = %invoke.cont20
  %16 = landingpad { i8*, i32 }
          cleanup
  %17 = extractvalue { i8*, i32 } %16, 0
  store i8* %17, i8** %exn.slot, align 8
  %18 = extractvalue { i8*, i32 } %16, 1
  store i32 %18, i32* %ehselector.slot, align 4
  br label %ehcleanup29

lpad25:                                           ; preds = %invoke.cont24
  %19 = landingpad { i8*, i32 }
          cleanup
  %20 = extractvalue { i8*, i32 } %19, 0
  store i8* %20, i8** %exn.slot, align 8
  %21 = extractvalue { i8*, i32 } %19, 1
  store i32 %21, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp17) #5
  br label %ehcleanup29

ehcleanup29:                                      ; preds = %lpad25, %lpad23
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp22) #5
  br label %ehcleanup34

if.end:                                           ; preds = %invoke.cont26, %invoke.cont15
  br label %if.end33

if.else30:                                        ; preds = %invoke.cont
  %_M_string = getelementptr inbounds %"class.std::basic_stringbuf", %"class.std::basic_stringbuf"* %this1, i32 0, i32 2
  %call32 = invoke dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSERKSs(%"class.std::basic_string"* %agg.result, %"class.std::basic_string"* dereferenceable(8) %_M_string)
          to label %invoke.cont31 unwind label %lpad

invoke.cont31:                                    ; preds = %if.else30
  br label %if.end33

if.end33:                                         ; preds = %invoke.cont31, %if.end
  store i1 true, i1* %nrvo, align 1
  %nrvo.val = load i1, i1* %nrvo, align 1
  br i1 %nrvo.val, label %nrvo.skipdtor, label %nrvo.unused

nrvo.unused:                                      ; preds = %if.end33
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %agg.result) #5
  br label %nrvo.skipdtor

nrvo.skipdtor:                                    ; preds = %nrvo.unused, %if.end33
  ret void

ehcleanup34:                                      ; preds = %ehcleanup29, %ehcleanup, %lpad
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %agg.result) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup34
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val35 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val35
}

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE4pptrEv(%"class.std::basic_streambuf"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_streambuf"*, align 8
  store %"class.std::basic_streambuf"* %this, %"class.std::basic_streambuf"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_streambuf"*, %"class.std::basic_streambuf"** %this.addr, align 8
  %_M_out_cur = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 5
  %0 = load i8*, i8** %_M_out_cur, align 8, !tbaa !336
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE5egptrEv(%"class.std::basic_streambuf"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_streambuf"*, align 8
  store %"class.std::basic_streambuf"* %this, %"class.std::basic_streambuf"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_streambuf"*, %"class.std::basic_streambuf"** %this.addr, align 8
  %_M_in_end = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 3
  %0 = load i8*, i8** %_M_in_end, align 8, !tbaa !334
  ret i8* %0
}

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSEOSs(%"class.std::basic_string"* %this, %"class.std::basic_string"* dereferenceable(8) %__str) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__str.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store %"class.std::basic_string"* %__str, %"class.std::basic_string"** %__str.addr, align 8, !tbaa !7
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  call void @_ZNSs4swapERSs(%"class.std::basic_string"* %this1, %"class.std::basic_string"* dereferenceable(8) %0)
  ret %"class.std::basic_string"* %this1
}

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNKSt15basic_streambufIcSt11char_traitsIcEE5pbaseEv(%"class.std::basic_streambuf"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_streambuf"*, align 8
  store %"class.std::basic_streambuf"* %this, %"class.std::basic_streambuf"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_streambuf"*, %"class.std::basic_streambuf"** %this.addr, align 8
  %_M_out_beg = getelementptr inbounds %"class.std::basic_streambuf", %"class.std::basic_streambuf"* %this1, i32 0, i32 4
  %0 = load i8*, i8** %_M_out_beg, align 8, !tbaa !335
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNSsC2IPcEET_S1_RKSaIcE(%"class.std::basic_string"* %this, i8* %__beg, i8* %__end, %"class.std::allocator"* dereferenceable(1) %__a) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__beg.addr = alloca i8*, align 8
  %__end.addr = alloca i8*, align 8
  %__a.addr = alloca %"class.std::allocator"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i8* %__beg, i8** %__beg.addr, align 8, !tbaa !1
  store i8* %__end, i8** %__end.addr, align 8, !tbaa !1
  store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %_M_dataplus = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  %0 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__end.addr, align 8, !tbaa !1
  %2 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  %call = call i8* @_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcE(i8* %0, i8* %1, %"class.std::allocator"* dereferenceable(1) %2)
  %3 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  call void @_ZNSs12_Alloc_hiderC2EPcRKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus, i8* %call, %"class.std::allocator"* dereferenceable(1) %3)
  ret void
}

; Function Attrs: uwtable
define available_externally dereferenceable(8) %"class.std::basic_string"* @_ZNSsaSERKSs(%"class.std::basic_string"* %this, %"class.std::basic_string"* dereferenceable(8) %__str) #0 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__str.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store %"class.std::basic_string"* %__str, %"class.std::basic_string"** %__str.addr, align 8, !tbaa !7
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %call = call dereferenceable(8) %"class.std::basic_string"* @_ZNSs6assignERKSs(%"class.std::basic_string"* %this1, %"class.std::basic_string"* dereferenceable(8) %0)
  ret %"class.std::basic_string"* %call
}

declare void @_ZNSs4swapERSs(%"class.std::basic_string"*, %"class.std::basic_string"* dereferenceable(8)) #3

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcE(i8* %__beg, i8* %__end, %"class.std::allocator"* dereferenceable(1) %__a) #0 comdat align 2 {
entry:
  %__beg.addr = alloca i8*, align 8
  %__end.addr = alloca i8*, align 8
  %__a.addr = alloca %"class.std::allocator"*, align 8
  %agg.tmp = alloca %"struct.std::__false_type", align 1
  store i8* %__beg, i8** %__beg.addr, align 8, !tbaa !1
  store i8* %__end, i8** %__end.addr, align 8, !tbaa !1
  store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8, !tbaa !7
  %0 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__end.addr, align 8, !tbaa !1
  %2 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  %call = call i8* @_ZNSs16_S_construct_auxIPcEES0_T_S1_RKSaIcESt12__false_type(i8* %0, i8* %1, %"class.std::allocator"* dereferenceable(1) %2)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNSs16_S_construct_auxIPcEES0_T_S1_RKSaIcESt12__false_type(i8* %__beg, i8* %__end, %"class.std::allocator"* dereferenceable(1) %__a) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.std::__false_type", align 1
  %__beg.addr = alloca i8*, align 8
  %__end.addr = alloca i8*, align 8
  %__a.addr = alloca %"class.std::allocator"*, align 8
  %agg.tmp = alloca %"struct.std::forward_iterator_tag", align 1
  %ref.tmp = alloca %"struct.std::random_access_iterator_tag", align 1
  store i8* %__beg, i8** %__beg.addr, align 8, !tbaa !1
  store i8* %__end, i8** %__end.addr, align 8, !tbaa !1
  store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8, !tbaa !7
  %1 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %2 = load i8*, i8** %__end.addr, align 8, !tbaa !1
  %3 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  %4 = bitcast %"struct.std::random_access_iterator_tag"* %ref.tmp to %"struct.std::forward_iterator_tag"*
  %call = call i8* @_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag(i8* %1, i8* %2, %"class.std::allocator"* dereferenceable(1) %3)
  ret i8* %call
}

; Function Attrs: uwtable
define linkonce_odr i8* @_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag(i8* %__beg, i8* %__end, %"class.std::allocator"* dereferenceable(1) %__a) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca i8*, align 8
  %0 = alloca %"struct.std::forward_iterator_tag", align 1
  %__beg.addr = alloca i8*, align 8
  %__end.addr = alloca i8*, align 8
  %__a.addr = alloca %"class.std::allocator"*, align 8
  %ref.tmp = alloca %"class.std::allocator", align 1
  %cleanup.cond = alloca i1, align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %__dnew = alloca i64, align 8
  %__r = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, align 8
  store i8* %__beg, i8** %__beg.addr, align 8, !tbaa !1
  store i8* %__end, i8** %__end.addr, align 8, !tbaa !1
  store %"class.std::allocator"* %__a, %"class.std::allocator"** %__a.addr, align 8, !tbaa !7
  %1 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %2 = load i8*, i8** %__end.addr, align 8, !tbaa !1
  %cmp = icmp eq i8* %1, %2
  store i1 false, i1* %cleanup.cond, align 1
  br i1 %cmp, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %3 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp) #5
  store i1 true, i1* %cleanup.cond, align 1
  %call = invoke zeroext i1 @_ZSteqIcEbRKSaIT_ES3_(%"class.std::allocator"* dereferenceable(1) %3, %"class.std::allocator"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %land.rhs
  br label %land.end

land.end:                                         ; preds = %invoke.cont, %entry
  %4 = phi i1 [ false, %entry ], [ %call, %invoke.cont ]
  %cleanup.is_active = load i1, i1* %cleanup.cond, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %land.end
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %land.end
  br i1 %4, label %if.then, label %if.end

if.then:                                          ; preds = %cleanup.done
  %call4 = call dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs12_S_empty_repEv()
  %call5 = call i8* @_ZNSs4_Rep10_M_refdataEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %call4) #5
  store i8* %call5, i8** %retval, align 8
  br label %return

lpad:                                             ; preds = %land.rhs
  %5 = landingpad { i8*, i32 }
          cleanup
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  %cleanup.is_active1 = load i1, i1* %cleanup.cond, align 1
  br i1 %cleanup.is_active1, label %cleanup.action2, label %cleanup.done3

cleanup.action2:                                  ; preds = %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp) #5
  br label %cleanup.done3

cleanup.done3:                                    ; preds = %cleanup.action2, %lpad
  br label %eh.resume

if.end:                                           ; preds = %cleanup.done
  %8 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %call6 = call zeroext i1 @_ZN9__gnu_cxx17__is_null_pointerIcEEbPT_(i8* %8)
  br i1 %call6, label %land.lhs.true, label %if.end9

land.lhs.true:                                    ; preds = %if.end
  %9 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %10 = load i8*, i8** %__end.addr, align 8, !tbaa !1
  %cmp7 = icmp ne i8* %9, %10
  br i1 %cmp7, label %if.then8, label %if.end9

if.then8:                                         ; preds = %land.lhs.true
  call void @_ZSt19__throw_logic_errorPKc(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.51, i32 0, i32 0)) #15
  unreachable

if.end9:                                          ; preds = %land.lhs.true, %if.end
  %11 = bitcast i64* %__dnew to i8*
  call void @llvm.lifetime.start(i64 8, i8* %11) #5
  %12 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %13 = load i8*, i8** %__end.addr, align 8, !tbaa !1
  %call10 = call i64 @_ZSt8distanceIPcENSt15iterator_traitsIT_E15difference_typeES2_S2_(i8* %12, i8* %13)
  store i64 %call10, i64* %__dnew, align 8, !tbaa !13
  %14 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load i64, i64* %__dnew, align 8, !tbaa !13
  %16 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  %call11 = call %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs4_Rep9_S_createEmmRKSaIcE(i64 %15, i64 0, %"class.std::allocator"* dereferenceable(1) %16)
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %call11, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r, align 8, !tbaa !1
  %17 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r, align 8, !tbaa !1
  %call12 = call i8* @_ZNSs4_Rep10_M_refdataEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %17) #5
  %18 = load i8*, i8** %__beg.addr, align 8, !tbaa !1
  %19 = load i8*, i8** %__end.addr, align 8, !tbaa !1
  invoke void @_ZNSs13_S_copy_charsEPcS_S_(i8* %call12, i8* %18, i8* %19)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %if.end9
  br label %try.cont

lpad13:                                           ; preds = %if.end9
  %20 = landingpad { i8*, i32 }
          catch i8* null
  %21 = extractvalue { i8*, i32 } %20, 0
  store i8* %21, i8** %exn.slot, align 8
  %22 = extractvalue { i8*, i32 } %20, 1
  store i32 %22, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad13
  %exn = load i8*, i8** %exn.slot, align 8
  %23 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %24 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r, align 8, !tbaa !1
  %25 = load %"class.std::allocator"*, %"class.std::allocator"** %__a.addr, align 8
  call void @_ZNSs4_Rep10_M_destroyERKSaIcE(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %24, %"class.std::allocator"* dereferenceable(1) %25) #5
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad15

lpad15:                                           ; preds = %catch
  %26 = landingpad { i8*, i32 }
          cleanup
  %27 = extractvalue { i8*, i32 } %26, 0
  store i8* %27, i8** %exn.slot, align 8
  %28 = extractvalue { i8*, i32 } %26, 1
  store i32 %28, i32* %ehselector.slot, align 4
  invoke void @__cxa_end_catch()
          to label %invoke.cont16 unwind label %terminate.lpad

invoke.cont16:                                    ; preds = %lpad15
  %29 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i64* %__dnew to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  br label %eh.resume

try.cont:                                         ; preds = %invoke.cont14
  %31 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r, align 8, !tbaa !1
  %32 = load i64, i64* %__dnew, align 8, !tbaa !13
  call void @_ZNSs4_Rep26_M_set_length_and_sharableEm(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %31, i64 %32)
  %33 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r, align 8, !tbaa !1
  %call17 = call i8* @_ZNSs4_Rep10_M_refdataEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %33) #5
  store i8* %call17, i8** %retval, align 8
  %34 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %__r to i8*
  call void @llvm.lifetime.end(i64 8, i8* %34) #5
  %35 = bitcast i64* %__dnew to i8*
  call void @llvm.lifetime.end(i64 8, i8* %35) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  %36 = load i8*, i8** %retval, align 8
  ret i8* %36

eh.resume:                                        ; preds = %invoke.cont16, %cleanup.done3
  %exn18 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn18, 0
  %lpad.val19 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val19

terminate.lpad:                                   ; preds = %lpad15
  %37 = landingpad { i8*, i32 }
          catch i8* null
  %38 = extractvalue { i8*, i32 } %37, 0
  call void @__clang_call_terminate(i8* %38) #13
  unreachable

unreachable:                                      ; preds = %catch
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr zeroext i1 @_ZSteqIcEbRKSaIT_ES3_(%"class.std::allocator"* dereferenceable(1), %"class.std::allocator"* dereferenceable(1)) #9 comdat {
entry:
  %.addr = alloca %"class.std::allocator"*, align 8
  %.addr1 = alloca %"class.std::allocator"*, align 8
  store %"class.std::allocator"* %0, %"class.std::allocator"** %.addr, align 8, !tbaa !7
  store %"class.std::allocator"* %1, %"class.std::allocator"** %.addr1, align 8, !tbaa !7
  ret i1 true
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr zeroext i1 @_ZN9__gnu_cxx17__is_null_pointerIcEEbPT_(i8* %__ptr) #9 comdat {
entry:
  %__ptr.addr = alloca i8*, align 8
  store i8* %__ptr, i8** %__ptr.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %__ptr.addr, align 8, !tbaa !1
  %cmp = icmp eq i8* %0, null
  ret i1 %cmp
}

; Function Attrs: noreturn
declare void @_ZSt19__throw_logic_errorPKc(i8*) #11

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZSt8distanceIPcENSt15iterator_traitsIT_E15difference_typeES2_S2_(i8* %__first, i8* %__last) #8 comdat {
entry:
  %__first.addr = alloca i8*, align 8
  %__last.addr = alloca i8*, align 8
  %agg.tmp = alloca %"struct.std::random_access_iterator_tag", align 1
  %undef.agg.tmp = alloca %"struct.std::random_access_iterator_tag", align 1
  store i8* %__first, i8** %__first.addr, align 8, !tbaa !1
  store i8* %__last, i8** %__last.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %__first.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__last.addr, align 8, !tbaa !1
  call void @_ZSt19__iterator_categoryIPcENSt15iterator_traitsIT_E17iterator_categoryERKS2_(i8** dereferenceable(8) %__first.addr)
  %call = call i64 @_ZSt10__distanceIPcENSt15iterator_traitsIT_E15difference_typeES2_S2_St26random_access_iterator_tag(i8* %0, i8* %1)
  ret i64 %call
}

declare %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs4_Rep9_S_createEmmRKSaIcE(i64, i64, %"class.std::allocator"* dereferenceable(1)) #3

; Function Attrs: uwtable
define available_externally void @_ZNSs13_S_copy_charsEPcS_S_(i8* %__p, i8* %__k1, i8* %__k2) #0 align 2 {
entry:
  %__p.addr = alloca i8*, align 8
  %__k1.addr = alloca i8*, align 8
  %__k2.addr = alloca i8*, align 8
  store i8* %__p, i8** %__p.addr, align 8, !tbaa !1
  store i8* %__k1, i8** %__k1.addr, align 8, !tbaa !1
  store i8* %__k2, i8** %__k2.addr, align 8, !tbaa !1
  %0 = load i8*, i8** %__p.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__k1.addr, align 8, !tbaa !1
  %2 = load i8*, i8** %__k2.addr, align 8, !tbaa !1
  %3 = load i8*, i8** %__k1.addr, align 8, !tbaa !1
  %sub.ptr.lhs.cast = ptrtoint i8* %2 to i64
  %sub.ptr.rhs.cast = ptrtoint i8* %3 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  call void @_ZNSs7_M_copyEPcPKcm(i8* %0, i8* %1, i64 %sub.ptr.sub)
  ret void
}

; Function Attrs: uwtable
define available_externally void @_ZNSs4_Rep26_M_set_length_and_sharableEm(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this, i64 %__n) #0 align 2 {
entry:
  %this.addr = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, align 8
  %__n.addr = alloca i64, align 8
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  %this1 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8
  %call = call dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs4_Rep12_S_empty_repEv()
  %cmp = icmp ne %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1, %call
  %conv = zext i1 %cmp to i64
  %expval = call i64 @llvm.expect.i64(i64 %conv, i64 0)
  %tobool = icmp ne i64 %expval, 0
  br i1 %tobool, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZNSs4_Rep15_M_set_sharableEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1)
  %0 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1 to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"*
  %_M_length = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"* %1, i32 0, i32 0
  store i64 %0, i64* %_M_length, align 8, !tbaa !15
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call2 = call i8* @_ZNSs4_Rep10_M_refdataEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1) #5
  %arrayidx = getelementptr inbounds i8, i8* %call2, i64 %2
  call void @_ZNSt11char_traitsIcE6assignERcRKc(i8* dereferenceable(1) %arrayidx, i8* dereferenceable(1) @_ZNSs4_Rep11_S_terminalE) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZSt10__distanceIPcENSt15iterator_traitsIT_E15difference_typeES2_S2_St26random_access_iterator_tag(i8* %__first, i8* %__last) #9 comdat {
entry:
  %0 = alloca %"struct.std::random_access_iterator_tag", align 1
  %__first.addr = alloca i8*, align 8
  %__last.addr = alloca i8*, align 8
  store i8* %__first, i8** %__first.addr, align 8, !tbaa !1
  store i8* %__last, i8** %__last.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__last.addr, align 8, !tbaa !1
  %2 = load i8*, i8** %__first.addr, align 8, !tbaa !1
  %sub.ptr.lhs.cast = ptrtoint i8* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i8* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  ret i64 %sub.ptr.sub
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZSt19__iterator_categoryIPcENSt15iterator_traitsIT_E17iterator_categoryERKS2_(i8** dereferenceable(8)) #9 comdat {
entry:
  %retval = alloca %"struct.std::random_access_iterator_tag", align 1
  %.addr = alloca i8**, align 8
  store i8** %0, i8*** %.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define available_externally void @_ZNSs7_M_copyEPcPKcm(i8* %__d, i8* %__s, i64 %__n) #0 align 2 {
entry:
  %__d.addr = alloca i8*, align 8
  %__s.addr = alloca i8*, align 8
  %__n.addr = alloca i64, align 8
  store i8* %__d, i8** %__d.addr, align 8, !tbaa !1
  store i8* %__s, i8** %__s.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  %0 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 1
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %1 = load i8*, i8** %__d.addr, align 8, !tbaa !1
  %2 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  call void @_ZNSt11char_traitsIcE6assignERcRKc(i8* dereferenceable(1) %1, i8* dereferenceable(1) %2) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %3 = load i8*, i8** %__d.addr, align 8, !tbaa !1
  %4 = load i8*, i8** %__s.addr, align 8, !tbaa !1
  %5 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i8* @_ZNSt11char_traitsIcE4copyEPcPKcm(i8* %3, i8* %4, i64 %5)
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSt11char_traitsIcE6assignERcRKc(i8* dereferenceable(1) %__c1, i8* dereferenceable(1) %__c2) #1 comdat align 2 {
entry:
  %__c1.addr = alloca i8*, align 8
  %__c2.addr = alloca i8*, align 8
  store i8* %__c1, i8** %__c1.addr, align 8, !tbaa !7
  store i8* %__c2, i8** %__c2.addr, align 8, !tbaa !7
  %0 = load i8*, i8** %__c2.addr, align 8
  %1 = load i8, i8* %0, align 1, !tbaa !7
  %2 = load i8*, i8** %__c1.addr, align 8
  store i8 %1, i8* %2, align 1, !tbaa !7
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i8* @_ZNSt11char_traitsIcE4copyEPcPKcm(i8* %__s1, i8* %__s2, i64 %__n) #1 comdat align 2 {
entry:
  %__s1.addr = alloca i8*, align 8
  %__s2.addr = alloca i8*, align 8
  %__n.addr = alloca i64, align 8
  store i8* %__s1, i8** %__s1.addr, align 8, !tbaa !1
  store i8* %__s2, i8** %__s2.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  %0 = load i8*, i8** %__s1.addr, align 8, !tbaa !1
  %1 = load i8*, i8** %__s2.addr, align 8, !tbaa !1
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 %2, i32 1, i1 false)
  ret i8* %0
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSs4_Rep15_M_set_sharableEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this) #1 align 2 {
entry:
  %this.addr = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, align 8
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"** %this.addr, align 8
  %0 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %this1 to %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"*
  %_M_refcount = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep_base"* %0, i32 0, i32 2
  store i32 0, i32* %_M_refcount, align 8, !tbaa !344
  ret void
}

declare dereferenceable(8) %"class.std::basic_string"* @_ZNSs6assignERKSs(%"class.std::basic_string"*, %"class.std::basic_string"* dereferenceable(8)) #3

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev(%"class.std::basic_ostringstream"* %this, i8** %vtt) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ostringstream"*, align 8
  %vtt.addr = alloca i8**, align 8
  store %"class.std::basic_ostringstream"* %this, %"class.std::basic_ostringstream"** %this.addr, align 8, !tbaa !1
  store i8** %vtt, i8*** %vtt.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ostringstream"*, %"class.std::basic_ostringstream"** %this.addr, align 8
  %vtt2 = load i8**, i8*** %vtt.addr, align 8
  %0 = load i8*, i8** %vtt2, align 8
  %1 = bitcast %"class.std::basic_ostringstream"* %this1 to i32 (...)***
  %2 = bitcast i8* %0 to i32 (...)**
  store i32 (...)** %2, i32 (...)*** %1, align 8, !tbaa !5
  %3 = getelementptr inbounds i8*, i8** %vtt2, i64 3
  %4 = load i8*, i8** %3, align 8
  %5 = bitcast %"class.std::basic_ostringstream"* %this1 to i8**
  %vtable = load i8*, i8** %5, align 8, !tbaa !5
  %vbase.offset.ptr = getelementptr i8, i8* %vtable, i64 -24
  %6 = bitcast i8* %vbase.offset.ptr to i64*
  %vbase.offset = load i64, i64* %6, align 8
  %7 = bitcast %"class.std::basic_ostringstream"* %this1 to i8*
  %add.ptr = getelementptr inbounds i8, i8* %7, i64 %vbase.offset
  %8 = bitcast i8* %add.ptr to i32 (...)***
  %9 = bitcast i8* %4 to i32 (...)**
  store i32 (...)** %9, i32 (...)*** %8, align 8, !tbaa !5
  %_M_stringbuf = getelementptr inbounds %"class.std::basic_ostringstream", %"class.std::basic_ostringstream"* %this1, i32 0, i32 1
  call void @_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED2Ev(%"class.std::basic_stringbuf"* %_M_stringbuf) #5
  %10 = bitcast %"class.std::basic_ostringstream"* %this1 to %"class.std::basic_ostream"*
  %11 = getelementptr inbounds i8*, i8** %vtt2, i64 1
  call void @_ZNSoD2Ev(%"class.std::basic_ostream"* %10, i8** %11) #5
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZTv0_n24_NSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %this) unnamed_addr #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_ostringstream"*, align 8
  store %"class.std::basic_ostringstream"* %this, %"class.std::basic_ostringstream"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_ostringstream"*, %"class.std::basic_ostringstream"** %this.addr, align 8
  %0 = bitcast %"class.std::basic_ostringstream"* %this1 to i8*
  %1 = bitcast i8* %0 to i8**
  %2 = load i8*, i8** %1, align 8
  %3 = getelementptr inbounds i8, i8* %2, i64 -24
  %4 = bitcast i8* %3 to i64*
  %5 = load i64, i64* %4, align 8
  %6 = getelementptr inbounds i8, i8* %0, i64 %5
  %7 = bitcast i8* %6 to %"class.std::basic_ostringstream"*
  tail call void @_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev(%"class.std::basic_ostringstream"* %7) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define available_externally dereferenceable(272) %"class.std::basic_ostream"* @_ZStlsIcSt11char_traitsIcESaIcEERSt13basic_ostreamIT_T0_ES7_RKSbIS4_S5_T1_E(%"class.std::basic_ostream"* dereferenceable(272) %__os, %"class.std::basic_string"* dereferenceable(8) %__str) #8 {
entry:
  %__os.addr = alloca %"class.std::basic_ostream"*, align 8
  %__str.addr = alloca %"class.std::basic_string"*, align 8
  store %"class.std::basic_ostream"* %__os, %"class.std::basic_ostream"** %__os.addr, align 8, !tbaa !7
  store %"class.std::basic_string"* %__str, %"class.std::basic_string"** %__str.addr, align 8, !tbaa !7
  %0 = load %"class.std::basic_ostream"*, %"class.std::basic_ostream"** %__os.addr, align 8
  %1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %call = call i8* @_ZNKSs4dataEv(%"class.std::basic_string"* %1) #5
  %2 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %call1 = call i64 @_ZNKSs4sizeEv(%"class.std::basic_string"* %2) #5
  %call2 = call dereferenceable(272) %"class.std::basic_ostream"* @_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l(%"class.std::basic_ostream"* dereferenceable(272) %0, i8* %call, i64 %call1)
  ret %"class.std::basic_ostream"* %call2
}

declare dereferenceable(272) %"class.std::basic_ostream"* @_ZNSolsEi(%"class.std::basic_ostream"*, i32) #3

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN8unittest17UnitTestExceptionC2EOS0_(%"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.unittest::UnitTestException"*, align 8
  %.addr = alloca %"class.unittest::UnitTestException"*, align 8
  store %"class.unittest::UnitTestException"* %this, %"class.unittest::UnitTestException"** %this.addr, align 8, !tbaa !1
  store %"class.unittest::UnitTestException"* %0, %"class.unittest::UnitTestException"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %this.addr, align 8
  %message = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %this1, i32 0, i32 0
  %1 = load %"class.unittest::UnitTestException"*, %"class.unittest::UnitTestException"** %.addr, align 8
  %message2 = getelementptr inbounds %"class.unittest::UnitTestException", %"class.unittest::UnitTestException"* %1, i32 0, i32 0
  call void @_ZNSsC2EOSs(%"class.std::basic_string"* %message, %"class.std::basic_string"* dereferenceable(8) %message2) #5
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally void @_ZNSsC2EOSs(%"class.std::basic_string"* %this, %"class.std::basic_string"* dereferenceable(8) %__str) unnamed_addr #1 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__str.addr = alloca %"class.std::basic_string"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store %"class.std::basic_string"* %__str, %"class.std::basic_string"** %__str.addr, align 8, !tbaa !7
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %_M_dataplus = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  %0 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %_M_dataplus2 = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %0, i32 0, i32 0
  call void @_ZNSs12_Alloc_hiderC2ERKS_(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* dereferenceable(8) %_M_dataplus2) #5
  %1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %__str.addr, align 8
  %call = invoke dereferenceable(24) %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* @_ZNSs12_S_empty_repEv()
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %call3 = call i8* @_ZNSs4_Rep10_M_refdataEv(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep"* %call) #5
  %call5 = invoke i8* @_ZNSs7_M_dataEPc(%"class.std::basic_string"* %1, i8* %call3)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.std::allocator"*)* @_ZNSaIcED2Ev to void (%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*)*)(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZNSs12_Alloc_hiderC2ERKS_(%"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*, align 8
  %.addr = alloca %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*, align 8
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"** %this.addr, align 8, !tbaa !1
  store %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %0, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"** %this.addr, align 8
  %1 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this1 to %"class.std::allocator"*
  %2 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"** %.addr, align 8
  %3 = bitcast %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %2 to %"class.std::allocator"*
  call void @_ZNSaIcEC2ERKS_(%"class.std::allocator"* %1, %"class.std::allocator"* dereferenceable(1) %3) #5
  %_M_p = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %this1, i32 0, i32 0
  %4 = load %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"*, %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"** %.addr, align 8
  %_M_p2 = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %4, i32 0, i32 0
  %5 = load i8*, i8** %_M_p2, align 8, !tbaa !88
  store i8* %5, i8** %_M_p, align 8, !tbaa !88
  ret void
}

; Function Attrs: nounwind uwtable
define available_externally i8* @_ZNSs7_M_dataEPc(%"class.std::basic_string"* %this, i8* %__p) #1 align 2 {
entry:
  %this.addr = alloca %"class.std::basic_string"*, align 8
  %__p.addr = alloca i8*, align 8
  store %"class.std::basic_string"* %this, %"class.std::basic_string"** %this.addr, align 8, !tbaa !1
  store i8* %__p, i8** %__p.addr, align 8, !tbaa !1
  %this1 = load %"class.std::basic_string"*, %"class.std::basic_string"** %this.addr, align 8
  %0 = load i8*, i8** %__p.addr, align 8, !tbaa !1
  %_M_dataplus = getelementptr inbounds %"class.std::basic_string", %"class.std::basic_string"* %this1, i32 0, i32 0
  %_M_p = getelementptr inbounds %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider", %"struct.std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider"* %_M_dataplus, i32 0, i32 0
  store i8* %0, i8** %_M_p, align 8, !tbaa !8
  ret i8* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE3endEv(%"class.thrust::detail::vector_base.62"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.66", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.62"*, align 8
  store %"class.thrust::detail::vector_base.62"* %this, %"class.thrust::detail::vector_base.62"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.62"*, %"class.thrust::detail::vector_base.62"** %this.addr, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.62"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive5, align 8
  %call6 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.62"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.66"* dereferenceable(8) %retval, i64 %call6)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.66", %"class.thrust::detail::normal_iterator.66"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.67", %"class.thrust::iterator_adaptor.67"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.69", %"class.thrust::device_ptr.69"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.70", %"class.thrust::pointer.70"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.71", %"class.thrust::iterator_adaptor.71"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive11, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_(%"class.thrust::detail::contiguous_storage.47"* %this, %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.47"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %first.coerce, %"struct.thrust::pair"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair"* %last.coerce, %"struct.thrust::pair"** %coerce.dive3, align 8
  store %"class.thrust::detail::contiguous_storage.47"* %this, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::contiguous_storage.47"*, %"class.thrust::detail::contiguous_storage.47"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.47", %"class.thrust::detail::contiguous_storage.47"* %this4, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.51"* %first to %"class.thrust::iterator_adaptor.52"*
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.52"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %2 = bitcast %"class.thrust::detail::normal_iterator.51"* %last to %"class.thrust::iterator_facade.53"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.51"* %first to %"class.thrust::iterator_facade.53"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.53"* dereferenceable(1) %2, %"class.thrust::iterator_facade.53"* dereferenceable(1) %3)
  call void @_ZN6thrust6detail13destroy_rangeISaINS_4pairIaaEEEPS3_lEEvRT_T0_T1_(%"class.std::allocator.48"* dereferenceable(1) %m_allocator, %"struct.thrust::pair"* %1, i64 %call5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.46"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.51", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.46"*, align 8
  store %"class.thrust::detail::vector_base.46"* %this, %"class.thrust::detail::vector_base.46"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.46"*, %"class.thrust::detail::vector_base.46"** %this.addr, align 8
  %call = call %"struct.thrust::pair"* @_ZN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.46"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair"* %call, %"struct.thrust::pair"** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.46"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.51", %"class.thrust::detail::normal_iterator.51"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %coerce.dive5, align 8
  ret %"struct.thrust::pair"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeISaINS_4pairIaaEEEPS3_lEEvRT_T0_T1_(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIaaEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_(%"class.std::allocator.48"* dereferenceable(1) %0, %"struct.thrust::pair"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.53"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.53"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.53"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.53"*, align 8
  store %"class.thrust::iterator_facade.53"* %lhs, %"class.thrust::iterator_facade.53"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.53"* %rhs, %"class.thrust::iterator_facade.53"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.53"*, %"class.thrust::iterator_facade.53"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.53"* %0 to %"class.thrust::detail::normal_iterator.51"*
  %2 = load %"class.thrust::iterator_facade.53"*, %"class.thrust::iterator_facade.53"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.53"* %2 to %"class.thrust::detail::normal_iterator.51"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIaaEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIaaEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_(%"class.std::allocator.48"* dereferenceable(1) %a, %"struct.thrust::pair"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.48"*, align 8
  %p.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  store %"class.std::allocator.48"* %a, %"class.std::allocator.48"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %p, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.48"*, %"class.std::allocator.48"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaINS_4pairIaaEEEE3getERS4_(%"class.std::allocator.48"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIaaEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIaaEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair"* %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %first, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIaaEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair"* %2, i64 %3)
  ret %"struct.thrust::pair"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIaaEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair"* %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca %"struct.thrust::pair"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %i = alloca i64, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::pair"* %first, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIaaEEEEvRT_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::pair"* dereferenceable(2) %6)
  %7 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %7, i32 1
  store %"struct.thrust::pair"* %incdec.ptr, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add nsw i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  ret %"struct.thrust::pair"* %9
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIaaEEEEvRT_(%"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::pair"* dereferenceable(2) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %x.addr = alloca %"struct.thrust::pair"*, align 8
  store %"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair"* %x, %"struct.thrust::pair"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::wrapped_function.146"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %x.addr, align 8
  %call = call dereferenceable(2) %"struct.thrust::pair"* @_ZN6thrust18raw_reference_castINS_4pairIaaEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair"* dereferenceable(2) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIaaEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %m_f, %"struct.thrust::pair"* dereferenceable(2) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIaaEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.51"* %f1, %"class.thrust::detail::normal_iterator.51"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.51"* %f2, %"class.thrust::detail::normal_iterator.51"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIaaEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIaaEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  store %"class.thrust::detail::normal_iterator.51"* %f1, %"class.thrust::detail::normal_iterator.51"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.51"* %f2, %"class.thrust::detail::normal_iterator.51"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.51"* %1 to %"class.thrust::iterator_adaptor.52"*
  %3 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.51"* %3 to %"class.thrust::iterator_adaptor.52"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.52"* %2, %"class.thrust::iterator_adaptor.52"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.52"* %this, %"class.thrust::iterator_adaptor.52"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.52"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.52"*, align 8
  store %"class.thrust::iterator_adaptor.52"* %this, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.52"* %y, %"class.thrust::iterator_adaptor.52"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.52"*, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.52"*, %"class.thrust::iterator_adaptor.52"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.52"* %0)
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !60
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.51"* %i, %"class.thrust::detail::normal_iterator.51"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.51"* %i, %"class.thrust::detail::normal_iterator.51"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.51"* %i, %"class.thrust::detail::normal_iterator.51"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.51"* %1 to %"class.thrust::iterator_facade.53"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl(%"class.thrust::iterator_facade.53"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl(%"class.thrust::iterator_facade.53"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.53"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.53"* %this, %"class.thrust::iterator_facade.53"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.53"*, %"class.thrust::iterator_facade.53"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.53"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEEvRT_NS8_15difference_typeE(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.51"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIaaEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.53"* %this1)
  ret %"class.thrust::detail::normal_iterator.51"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIaaEEEEEEvRT_NS8_15difference_typeE(%"class.thrust::detail::normal_iterator.51"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.51"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.51"* %f, %"class.thrust::detail::normal_iterator.51"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.51"*, %"class.thrust::detail::normal_iterator.51"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.51"* %0 to %"class.thrust::iterator_adaptor.52"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl(%"class.thrust::iterator_adaptor.52"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl(%"class.thrust::iterator_adaptor.52"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.52"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.52"* %this, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.52"*, %"class.thrust::iterator_adaptor.52"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.52", %"class.thrust::iterator_adaptor.52"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair"*, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !60
  %add.ptr = getelementptr inbounds %"struct.thrust::pair", %"struct.thrust::pair"* %1, i64 %0
  store %"struct.thrust::pair"* %add.ptr, %"struct.thrust::pair"** %m_iterator, align 8, !tbaa !60
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN17TestPairScanByKeyIsEclEm(%struct.TestPairScanByKey.467* %this, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %struct.TestPairScanByKey.467*, align 8
  %n.addr = alloca i64, align 8
  %h_p1 = alloca %"class.thrust::host_vector.469", align 8
  %h_p2 = alloca %"class.thrust::host_vector.469", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %h_pairs = alloca %"class.thrust::host_vector.478", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp22 = alloca %struct.make_pair_functor, align 1
  %coerce = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %d_p1 = alloca %"class.thrust::device_vector.488", align 8
  %d_p2 = alloca %"class.thrust::device_vector.488", align 8
  %d_pairs = alloca %"class.thrust::device_vector.500", align 8
  %h_keys = alloca %"class.thrust::host_vector.469", align 8
  %ref.tmp = alloca %"class.thrust::host_vector.73", align 8
  %d_keys = alloca %"class.thrust::device_vector.488", align 8
  %init = alloca %"struct.thrust::pair.487", align 2
  %ref.tmp46 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp51 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp57 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp67 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp72 = alloca %"struct.thrust::pair.487", align 2
  %agg.tmp73 = alloca %"struct.thrust::equal_to.512", align 1
  %agg.tmp74 = alloca %struct.add_pairs, align 1
  %coerce85 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp88 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp96 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp104 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp112 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp120 = alloca %"struct.thrust::pair.487", align 2
  %agg.tmp121 = alloca %"struct.thrust::equal_to.512", align 1
  %agg.tmp122 = alloca %struct.add_pairs, align 1
  %coerce145 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %ref.tmp151 = alloca %"class.std::basic_string", align 8
  %ref.tmp152 = alloca %"class.std::allocator", align 1
  store %struct.TestPairScanByKey.467* %this, %struct.TestPairScanByKey.467** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %struct.TestPairScanByKey.467*, %struct.TestPairScanByKey.467** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.469"* %h_p1 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %0) #5
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN8unittest15random_integersIsEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.469"* sret %h_p1, i64 %1)
  %2 = bitcast %"class.thrust::host_vector.469"* %h_p2 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN8unittest15random_integersIsEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.469"* sret %h_p2, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %4 = bitcast %"class.thrust::host_vector.478"* %h_pairs to i8*
  call void @llvm.lifetime.start(i64 32, i8* %4) #5
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust11host_vectorINS_4pairIssEESaIS2_EEC2Em(%"class.thrust::host_vector.478"* %h_pairs, i64 %5)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %6 = bitcast %"class.thrust::host_vector.469"* %h_p1 to %"class.thrust::detail::vector_base.470"*
  %call = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %6)
          to label %invoke.cont5 unwind label %lpad4

invoke.cont5:                                     ; preds = %invoke.cont3
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive6, align 8
  %7 = bitcast %"class.thrust::host_vector.469"* %h_p1 to %"class.thrust::detail::vector_base.470"*
  %call9 = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE3endEv(%"class.thrust::detail::vector_base.470"* %7)
          to label %invoke.cont8 unwind label %lpad4

invoke.cont8:                                     ; preds = %invoke.cont5
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive10, i32 0, i32 0
  store i16* %call9, i16** %coerce.dive11, align 8
  %8 = bitcast %"class.thrust::host_vector.469"* %h_p2 to %"class.thrust::detail::vector_base.470"*
  %call14 = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %8)
          to label %invoke.cont13 unwind label %lpad4

invoke.cont13:                                    ; preds = %invoke.cont8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp12, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive15, i32 0, i32 0
  store i16* %call14, i16** %coerce.dive16, align 8
  %9 = bitcast %"class.thrust::host_vector.478"* %h_pairs to %"class.thrust::detail::vector_base.479"*
  %call19 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %9)
          to label %invoke.cont18 unwind label %lpad4

invoke.cont18:                                    ; preds = %invoke.cont13
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp17, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call19, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive23, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive24, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp7, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive25, i32 0, i32 0
  %11 = load i16*, i16** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp12, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive27, i32 0, i32 0
  %12 = load i16*, i16** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive29, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive30, align 8
  %call32 = invoke %"struct.thrust::pair.487"* @_ZN6thrust9transformINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_(i16* %10, i16* %11, i16* %12, %"struct.thrust::pair.487"* %13)
          to label %invoke.cont31 unwind label %lpad4

invoke.cont31:                                    ; preds = %invoke.cont18
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %coerce, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive33, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call32, %"struct.thrust::pair.487"** %coerce.dive34, align 8
  %14 = bitcast %"class.thrust::device_vector.488"* %d_p1 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %14) #5
  invoke void @_ZN6thrust13device_vectorIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.488"* %d_p1, %"class.thrust::host_vector.469"* dereferenceable(32) %h_p1)
          to label %invoke.cont35 unwind label %lpad4

invoke.cont35:                                    ; preds = %invoke.cont31
  %15 = bitcast %"class.thrust::device_vector.488"* %d_p2 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %15) #5
  invoke void @_ZN6thrust13device_vectorIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.488"* %d_p2, %"class.thrust::host_vector.469"* dereferenceable(32) %h_p2)
          to label %invoke.cont37 unwind label %lpad36

invoke.cont37:                                    ; preds = %invoke.cont35
  %16 = bitcast %"class.thrust::device_vector.500"* %d_pairs to i8*
  call void @llvm.lifetime.start(i64 32, i8* %16) #5
  invoke void @_ZN6thrust13device_vectorINS_4pairIssEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.500"* %d_pairs, %"class.thrust::host_vector.478"* dereferenceable(32) %h_pairs)
          to label %invoke.cont39 unwind label %lpad38

invoke.cont39:                                    ; preds = %invoke.cont37
  %17 = bitcast %"class.thrust::host_vector.469"* %h_keys to i8*
  call void @llvm.lifetime.start(i64 32, i8* %17) #5
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN8unittest15random_integersIbEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.73"* sret %ref.tmp, i64 %18)
          to label %invoke.cont41 unwind label %lpad40

invoke.cont41:                                    ; preds = %invoke.cont39
  invoke void @_ZN6thrust11host_vectorIsSaIsEEC2IbSaIbEEERKNS0_IT_T0_EE(%"class.thrust::host_vector.469"* %h_keys, %"class.thrust::host_vector.73"* dereferenceable(32) %ref.tmp)
          to label %invoke.cont43 unwind label %lpad42

invoke.cont43:                                    ; preds = %invoke.cont41
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %ref.tmp) #5
  %19 = bitcast %"class.thrust::device_vector.488"* %d_keys to i8*
  call void @llvm.lifetime.start(i64 32, i8* %19) #5
  invoke void @_ZN6thrust13device_vectorIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.488"* %d_keys, %"class.thrust::host_vector.469"* dereferenceable(32) %h_keys)
          to label %invoke.cont45 unwind label %lpad44

invoke.cont45:                                    ; preds = %invoke.cont43
  %20 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  %call49 = invoke i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 13, i32 13)
          to label %invoke.cont48 unwind label %lpad47

invoke.cont48:                                    ; preds = %invoke.cont45
  %21 = bitcast %"struct.thrust::pair.82"* %ref.tmp46 to i64*
  store i64 %call49, i64* %21, align 4
  invoke void @_ZN6thrust4pairIssEC2IiiEERKNS0_IT_T0_EE(%"struct.thrust::pair.487"* %init, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp46)
          to label %invoke.cont50 unwind label %lpad47

invoke.cont50:                                    ; preds = %invoke.cont48
  %22 = bitcast %"class.thrust::host_vector.469"* %h_keys to %"class.thrust::detail::vector_base.470"*
  %call54 = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %22)
          to label %invoke.cont53 unwind label %lpad52

invoke.cont53:                                    ; preds = %invoke.cont50
  %coerce.dive55 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp51, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive55, i32 0, i32 0
  store i16* %call54, i16** %coerce.dive56, align 8
  %23 = bitcast %"class.thrust::host_vector.469"* %h_keys to %"class.thrust::detail::vector_base.470"*
  %call59 = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE3endEv(%"class.thrust::detail::vector_base.470"* %23)
          to label %invoke.cont58 unwind label %lpad52

invoke.cont58:                                    ; preds = %invoke.cont53
  %coerce.dive60 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp57, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive60, i32 0, i32 0
  store i16* %call59, i16** %coerce.dive61, align 8
  %24 = bitcast %"class.thrust::host_vector.478"* %h_pairs to %"class.thrust::detail::vector_base.479"*
  %call64 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %24)
          to label %invoke.cont63 unwind label %lpad52

invoke.cont63:                                    ; preds = %invoke.cont58
  %coerce.dive65 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp62, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive65, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call64, %"struct.thrust::pair.487"** %coerce.dive66, align 8
  %25 = bitcast %"class.thrust::host_vector.478"* %h_pairs to %"class.thrust::detail::vector_base.479"*
  %call69 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %25)
          to label %invoke.cont68 unwind label %lpad52

invoke.cont68:                                    ; preds = %invoke.cont63
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp67, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive70, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call69, %"struct.thrust::pair.487"** %coerce.dive71, align 8
  %26 = bitcast %"struct.thrust::pair.487"* %agg.tmp72 to i8*
  %27 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %26, i8* %27, i64 4, i32 2, i1 false), !tbaa.struct !345
  %coerce.dive75 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp51, i32 0, i32 0
  %coerce.dive76 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive75, i32 0, i32 0
  %28 = load i16*, i16** %coerce.dive76, align 8
  %coerce.dive77 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp57, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive77, i32 0, i32 0
  %29 = load i16*, i16** %coerce.dive78, align 8
  %coerce.dive79 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp62, i32 0, i32 0
  %coerce.dive80 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive79, i32 0, i32 0
  %30 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive80, align 8
  %coerce.dive81 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp67, i32 0, i32 0
  %coerce.dive82 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive81, i32 0, i32 0
  %31 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive82, align 8
  %32 = bitcast %"struct.thrust::pair.487"* %agg.tmp72 to i32*
  %33 = load i32, i32* %32, align 2
  %call84 = invoke %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPsEENS2_IPNS_4pairIssEEEES8_S6_NS_8equal_toIsEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_(i16* %28, i16* %29, %"struct.thrust::pair.487"* %30, %"struct.thrust::pair.487"* %31, i32 %33)
          to label %invoke.cont83 unwind label %lpad52

invoke.cont83:                                    ; preds = %invoke.cont68
  %coerce.dive86 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %coerce85, i32 0, i32 0
  %coerce.dive87 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive86, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call84, %"struct.thrust::pair.487"** %coerce.dive87, align 8
  %34 = bitcast %"class.thrust::device_vector.488"* %d_keys to %"class.thrust::detail::vector_base.489"*
  %call90 = invoke i16* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::vector_base.489"* %34)
          to label %invoke.cont89 unwind label %lpad52

invoke.cont89:                                    ; preds = %invoke.cont83
  %coerce.dive91 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp88, i32 0, i32 0
  %coerce.dive92 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive91, i32 0, i32 0
  %coerce.dive93 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive92, i32 0, i32 0
  %coerce.dive94 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive93, i32 0, i32 0
  %coerce.dive95 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive94, i32 0, i32 0
  store i16* %call90, i16** %coerce.dive95, align 8
  %35 = bitcast %"class.thrust::device_vector.488"* %d_keys to %"class.thrust::detail::vector_base.489"*
  %call98 = invoke i16* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE3endEv(%"class.thrust::detail::vector_base.489"* %35)
          to label %invoke.cont97 unwind label %lpad52

invoke.cont97:                                    ; preds = %invoke.cont89
  %coerce.dive99 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp96, i32 0, i32 0
  %coerce.dive100 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive99, i32 0, i32 0
  %coerce.dive101 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive100, i32 0, i32 0
  %coerce.dive102 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive101, i32 0, i32 0
  %coerce.dive103 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive102, i32 0, i32 0
  store i16* %call98, i16** %coerce.dive103, align 8
  %36 = bitcast %"class.thrust::device_vector.500"* %d_pairs to %"class.thrust::detail::vector_base.501"*
  %call106 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.501"* %36)
          to label %invoke.cont105 unwind label %lpad52

invoke.cont105:                                   ; preds = %invoke.cont97
  %coerce.dive107 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp104, i32 0, i32 0
  %coerce.dive108 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive107, i32 0, i32 0
  %coerce.dive109 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive108, i32 0, i32 0
  %coerce.dive110 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive109, i32 0, i32 0
  %coerce.dive111 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive110, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call106, %"struct.thrust::pair.487"** %coerce.dive111, align 8
  %37 = bitcast %"class.thrust::device_vector.500"* %d_pairs to %"class.thrust::detail::vector_base.501"*
  %call114 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.501"* %37)
          to label %invoke.cont113 unwind label %lpad52

invoke.cont113:                                   ; preds = %invoke.cont105
  %coerce.dive115 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp112, i32 0, i32 0
  %coerce.dive116 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive115, i32 0, i32 0
  %coerce.dive117 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive116, i32 0, i32 0
  %coerce.dive118 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive117, i32 0, i32 0
  %coerce.dive119 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive118, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call114, %"struct.thrust::pair.487"** %coerce.dive119, align 8
  %38 = bitcast %"struct.thrust::pair.487"* %agg.tmp120 to i8*
  %39 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %38, i8* %39, i64 4, i32 2, i1 false), !tbaa.struct !345
  %coerce.dive123 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp88, i32 0, i32 0
  %coerce.dive124 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive123, i32 0, i32 0
  %coerce.dive125 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive124, i32 0, i32 0
  %coerce.dive126 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive125, i32 0, i32 0
  %coerce.dive127 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive126, i32 0, i32 0
  %40 = load i16*, i16** %coerce.dive127, align 8
  %coerce.dive128 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp96, i32 0, i32 0
  %coerce.dive129 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive128, i32 0, i32 0
  %coerce.dive130 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive129, i32 0, i32 0
  %coerce.dive131 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive130, i32 0, i32 0
  %coerce.dive132 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive131, i32 0, i32 0
  %41 = load i16*, i16** %coerce.dive132, align 8
  %coerce.dive133 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp104, i32 0, i32 0
  %coerce.dive134 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive133, i32 0, i32 0
  %coerce.dive135 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive134, i32 0, i32 0
  %coerce.dive136 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive135, i32 0, i32 0
  %coerce.dive137 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive136, i32 0, i32 0
  %42 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive137, align 8
  %coerce.dive138 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp112, i32 0, i32 0
  %coerce.dive139 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive138, i32 0, i32 0
  %coerce.dive140 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive139, i32 0, i32 0
  %coerce.dive141 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive140, i32 0, i32 0
  %coerce.dive142 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive141, i32 0, i32 0
  %43 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive142, align 8
  %44 = bitcast %"struct.thrust::pair.487"* %agg.tmp120 to i32*
  %45 = load i32, i32* %44, align 2
  %call144 = invoke %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIsEEEENS2_INS3_INS_4pairIssEEEEEES9_S7_NS_8equal_toIsEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_(i16* %40, i16* %41, %"struct.thrust::pair.487"* %42, %"struct.thrust::pair.487"* %43, i32 %45)
          to label %invoke.cont143 unwind label %lpad52

invoke.cont143:                                   ; preds = %invoke.cont113
  %coerce.dive146 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %coerce145, i32 0, i32 0
  %coerce.dive147 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive146, i32 0, i32 0
  %coerce.dive148 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive147, i32 0, i32 0
  %coerce.dive149 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive148, i32 0, i32 0
  %coerce.dive150 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive149, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call144, %"struct.thrust::pair.487"** %coerce.dive150, align 8
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp152) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp151, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.22, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp152)
          to label %invoke.cont154 unwind label %lpad153

invoke.cont154:                                   ; preds = %invoke.cont143
  invoke void @_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIssEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi(%"class.thrust::host_vector.478"* dereferenceable(32) %h_pairs, %"class.thrust::device_vector.500"* dereferenceable(32) %d_pairs, %"class.std::basic_string"* dereferenceable(8) %ref.tmp151, i32 57)
          to label %invoke.cont156 unwind label %lpad155

invoke.cont156:                                   ; preds = %invoke.cont154
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp151) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp152) #5
  %46 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.lifetime.end(i64 4, i8* %46) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.489"*)* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev to void (%"class.thrust::device_vector.488"*)*)(%"class.thrust::device_vector.488"* %d_keys) #5
  %47 = bitcast %"class.thrust::device_vector.488"* %d_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %47) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %h_keys) #5
  %48 = bitcast %"class.thrust::host_vector.469"* %h_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %48) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.501"*)* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev to void (%"class.thrust::device_vector.500"*)*)(%"class.thrust::device_vector.500"* %d_pairs) #5
  %49 = bitcast %"class.thrust::device_vector.500"* %d_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %49) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.489"*)* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev to void (%"class.thrust::device_vector.488"*)*)(%"class.thrust::device_vector.488"* %d_p2) #5
  %50 = bitcast %"class.thrust::device_vector.488"* %d_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %50) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.489"*)* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev to void (%"class.thrust::device_vector.488"*)*)(%"class.thrust::device_vector.488"* %d_p1) #5
  %51 = bitcast %"class.thrust::device_vector.488"* %d_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %51) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.479"*)* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EED2Ev to void (%"class.thrust::host_vector.478"*)*)(%"class.thrust::host_vector.478"* %h_pairs) #5
  %52 = bitcast %"class.thrust::host_vector.478"* %h_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %52) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %h_p2) #5
  %53 = bitcast %"class.thrust::host_vector.469"* %h_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %53) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %h_p1) #5
  %54 = bitcast %"class.thrust::host_vector.469"* %h_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %54) #5
  ret void

lpad:                                             ; preds = %entry
  %55 = landingpad { i8*, i32 }
          cleanup
  %56 = extractvalue { i8*, i32 } %55, 0
  store i8* %56, i8** %exn.slot, align 8
  %57 = extractvalue { i8*, i32 } %55, 1
  store i32 %57, i32* %ehselector.slot, align 4
  br label %ehcleanup172

lpad2:                                            ; preds = %invoke.cont
  %58 = landingpad { i8*, i32 }
          cleanup
  %59 = extractvalue { i8*, i32 } %58, 0
  store i8* %59, i8** %exn.slot, align 8
  %60 = extractvalue { i8*, i32 } %58, 1
  store i32 %60, i32* %ehselector.slot, align 4
  br label %ehcleanup170

lpad4:                                            ; preds = %invoke.cont31, %invoke.cont18, %invoke.cont13, %invoke.cont8, %invoke.cont5, %invoke.cont3
  %61 = landingpad { i8*, i32 }
          cleanup
  %62 = extractvalue { i8*, i32 } %61, 0
  store i8* %62, i8** %exn.slot, align 8
  %63 = extractvalue { i8*, i32 } %61, 1
  store i32 %63, i32* %ehselector.slot, align 4
  br label %ehcleanup168

lpad36:                                           ; preds = %invoke.cont35
  %64 = landingpad { i8*, i32 }
          cleanup
  %65 = extractvalue { i8*, i32 } %64, 0
  store i8* %65, i8** %exn.slot, align 8
  %66 = extractvalue { i8*, i32 } %64, 1
  store i32 %66, i32* %ehselector.slot, align 4
  br label %ehcleanup166

lpad38:                                           ; preds = %invoke.cont37
  %67 = landingpad { i8*, i32 }
          cleanup
  %68 = extractvalue { i8*, i32 } %67, 0
  store i8* %68, i8** %exn.slot, align 8
  %69 = extractvalue { i8*, i32 } %67, 1
  store i32 %69, i32* %ehselector.slot, align 4
  br label %ehcleanup164

lpad40:                                           ; preds = %invoke.cont39
  %70 = landingpad { i8*, i32 }
          cleanup
  %71 = extractvalue { i8*, i32 } %70, 0
  store i8* %71, i8** %exn.slot, align 8
  %72 = extractvalue { i8*, i32 } %70, 1
  store i32 %72, i32* %ehselector.slot, align 4
  br label %ehcleanup162

lpad42:                                           ; preds = %invoke.cont41
  %73 = landingpad { i8*, i32 }
          cleanup
  %74 = extractvalue { i8*, i32 } %73, 0
  store i8* %74, i8** %exn.slot, align 8
  %75 = extractvalue { i8*, i32 } %73, 1
  store i32 %75, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %ref.tmp) #5
  br label %ehcleanup162

lpad44:                                           ; preds = %invoke.cont43
  %76 = landingpad { i8*, i32 }
          cleanup
  %77 = extractvalue { i8*, i32 } %76, 0
  store i8* %77, i8** %exn.slot, align 8
  %78 = extractvalue { i8*, i32 } %76, 1
  store i32 %78, i32* %ehselector.slot, align 4
  br label %ehcleanup160

lpad47:                                           ; preds = %invoke.cont48, %invoke.cont45
  %79 = landingpad { i8*, i32 }
          cleanup
  %80 = extractvalue { i8*, i32 } %79, 0
  store i8* %80, i8** %exn.slot, align 8
  %81 = extractvalue { i8*, i32 } %79, 1
  store i32 %81, i32* %ehselector.slot, align 4
  br label %ehcleanup158

lpad52:                                           ; preds = %invoke.cont113, %invoke.cont105, %invoke.cont97, %invoke.cont89, %invoke.cont83, %invoke.cont68, %invoke.cont63, %invoke.cont58, %invoke.cont53, %invoke.cont50
  %82 = landingpad { i8*, i32 }
          cleanup
  %83 = extractvalue { i8*, i32 } %82, 0
  store i8* %83, i8** %exn.slot, align 8
  %84 = extractvalue { i8*, i32 } %82, 1
  store i32 %84, i32* %ehselector.slot, align 4
  br label %ehcleanup157

lpad153:                                          ; preds = %invoke.cont143
  %85 = landingpad { i8*, i32 }
          cleanup
  %86 = extractvalue { i8*, i32 } %85, 0
  store i8* %86, i8** %exn.slot, align 8
  %87 = extractvalue { i8*, i32 } %85, 1
  store i32 %87, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad155:                                          ; preds = %invoke.cont154
  %88 = landingpad { i8*, i32 }
          cleanup
  %89 = extractvalue { i8*, i32 } %88, 0
  store i8* %89, i8** %exn.slot, align 8
  %90 = extractvalue { i8*, i32 } %88, 1
  store i32 %90, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp151) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad155, %lpad153
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp152) #5
  br label %ehcleanup157

ehcleanup157:                                     ; preds = %ehcleanup, %lpad52
  %91 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.lifetime.end(i64 4, i8* %91) #5
  br label %ehcleanup158

ehcleanup158:                                     ; preds = %ehcleanup157, %lpad47
  call void bitcast (void (%"class.thrust::detail::vector_base.489"*)* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev to void (%"class.thrust::device_vector.488"*)*)(%"class.thrust::device_vector.488"* %d_keys) #5
  %92 = bitcast %"class.thrust::device_vector.488"* %d_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %92) #5
  br label %ehcleanup160

ehcleanup160:                                     ; preds = %ehcleanup158, %lpad44
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %h_keys) #5
  %93 = bitcast %"class.thrust::host_vector.469"* %h_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %93) #5
  br label %ehcleanup162

ehcleanup162:                                     ; preds = %ehcleanup160, %lpad42, %lpad40
  call void bitcast (void (%"class.thrust::detail::vector_base.501"*)* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev to void (%"class.thrust::device_vector.500"*)*)(%"class.thrust::device_vector.500"* %d_pairs) #5
  %94 = bitcast %"class.thrust::device_vector.500"* %d_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %94) #5
  br label %ehcleanup164

ehcleanup164:                                     ; preds = %ehcleanup162, %lpad38
  call void bitcast (void (%"class.thrust::detail::vector_base.489"*)* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev to void (%"class.thrust::device_vector.488"*)*)(%"class.thrust::device_vector.488"* %d_p2) #5
  %95 = bitcast %"class.thrust::device_vector.488"* %d_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %95) #5
  br label %ehcleanup166

ehcleanup166:                                     ; preds = %ehcleanup164, %lpad36
  call void bitcast (void (%"class.thrust::detail::vector_base.489"*)* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev to void (%"class.thrust::device_vector.488"*)*)(%"class.thrust::device_vector.488"* %d_p1) #5
  %96 = bitcast %"class.thrust::device_vector.488"* %d_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %96) #5
  br label %ehcleanup168

ehcleanup168:                                     ; preds = %ehcleanup166, %lpad4
  call void bitcast (void (%"class.thrust::detail::vector_base.479"*)* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EED2Ev to void (%"class.thrust::host_vector.478"*)*)(%"class.thrust::host_vector.478"* %h_pairs) #5
  %97 = bitcast %"class.thrust::host_vector.478"* %h_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %97) #5
  br label %ehcleanup170

ehcleanup170:                                     ; preds = %ehcleanup168, %lpad2
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %h_p2) #5
  %98 = bitcast %"class.thrust::host_vector.469"* %h_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %98) #5
  br label %ehcleanup172

ehcleanup172:                                     ; preds = %ehcleanup170, %lpad
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %h_p1) #5
  %99 = bitcast %"class.thrust::host_vector.469"* %h_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %99) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup172
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val174 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val174
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyiLj2EEclImEEvT_(%"struct.unittest::for_each_type.468"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::for_each_type.468"*, align 8
  %n.addr = alloca i64, align 8
  %f = alloca %struct.TestPairScanByKey.833, align 1
  %loop = alloca %"struct.unittest::for_each_type.834", align 1
  store %"struct.unittest::for_each_type.468"* %this, %"struct.unittest::for_each_type.468"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"struct.unittest::for_each_type.468"*, %"struct.unittest::for_each_type.468"** %this.addr, align 8
  %0 = bitcast %struct.TestPairScanByKey.833* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN17TestPairScanByKeyIiEclEm(%struct.TestPairScanByKey.833* %f, i64 %1)
  %2 = bitcast %"struct.unittest::for_each_type.834"* %loop to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyS2_Lj3EEclImEEvT_(%"struct.unittest::for_each_type.834"* %loop, i64 %3)
  %4 = bitcast %"struct.unittest::for_each_type.834"* %loop to i8*
  call void @llvm.lifetime.end(i64 1, i8* %4) #5
  %5 = bitcast %struct.TestPairScanByKey.833* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %5) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest15random_integersIsEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.469"* noalias sret %agg.result, i64 %N) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %N.addr = alloca i64, align 8
  %nrvo = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp1 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp6 = alloca %"struct.unittest::random_integer.513", align 1
  %coerce = alloca %"class.thrust::detail::normal_iterator.475", align 8
  store i64 %N, i64* %N.addr, align 8, !tbaa !13
  store i1 false, i1* %nrvo, align 1
  %0 = load i64, i64* %N.addr, align 8, !tbaa !13
  call void @_ZN6thrust11host_vectorIsSaIsEEC2Em(%"class.thrust::host_vector.469"* %agg.result, i64 %0)
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp, i64 0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %1 = load i64, i64* %N.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp1, i64 %1)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %2 = bitcast %"class.thrust::host_vector.469"* %agg.result to %"class.thrust::detail::vector_base.470"*
  %call = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive5, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive7, i32 0, i32 0
  %3 = load i16*, i16** %coerce.dive8, align 8
  %call10 = invoke i16* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp1, i16* %3)
          to label %invoke.cont9 unwind label %lpad

invoke.cont9:                                     ; preds = %invoke.cont4
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %coerce, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive11, i32 0, i32 0
  store i16* %call10, i16** %coerce.dive12, align 8
  store i1 true, i1* %nrvo, align 1
  %nrvo.val = load i1, i1* %nrvo, align 1
  br i1 %nrvo.val, label %nrvo.skipdtor, label %nrvo.unused

lpad:                                             ; preds = %invoke.cont4, %invoke.cont2, %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %agg.result) #5
  br label %eh.resume

nrvo.unused:                                      ; preds = %invoke.cont9
  call void bitcast (void (%"class.thrust::detail::vector_base.470"*)* @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev to void (%"class.thrust::host_vector.469"*)*)(%"class.thrust::host_vector.469"* %agg.result) #5
  br label %nrvo.skipdtor

nrvo.skipdtor:                                    ; preds = %nrvo.unused, %invoke.cont9
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorINS_4pairIssEESaIS2_EEC2Em(%"class.thrust::host_vector.478"* %this, i64 %n) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.478"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::host_vector.478"* %this, %"class.thrust::host_vector.478"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::host_vector.478"*, %"class.thrust::host_vector.478"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.478"* %this1 to %"class.thrust::detail::vector_base.479"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEC2Em(%"class.thrust::detail::vector_base.479"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust9transformINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_(i16* %first1.coerce, i16* %last1.coerce, i16* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp11 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive2, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive4, i32 0, i32 0
  store i16* %first2.coerce, i16** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %3, %"struct.thrust::execution_policy.88"* dereferenceable(1) %4, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %7 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp8 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.475"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp9 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.475"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"class.thrust::detail::normal_iterator.484"* %agg.tmp10 to i8*
  %14 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive12, i32 0, i32 0
  %15 = load i16*, i16** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive14, i32 0, i32 0
  %16 = load i16*, i16** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive16, i32 0, i32 0
  %17 = load i16*, i16** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive18, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair.487"* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPsEES8_NS6_IPNS_4pairIssEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6, i16* %15, i16* %16, i16* %17, %"struct.thrust::pair.487"* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive21, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call20, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %19 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %19) #5
  %20 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %20) #5
  %21 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %21) #5
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive23, i32 0, i32 0
  %22 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive24, align 8
  ret %"struct.thrust::pair.487"* %22
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  %call = call i16* @_ZN6thrust6detail18contiguous_storageIsSaIsEE5beginEv(%"class.thrust::detail::contiguous_storage.471"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive3, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive4, align 8
  ret i16* %0
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail11vector_baseIsSaIsEE3endEv(%"class.thrust::detail::vector_base.470"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %call = call i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE4sizeEv(%"class.thrust::detail::vector_base.470"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive4, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive5, align 8
  ret i16* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.480"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive3, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust13device_vectorIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.488"* %this, %"class.thrust::host_vector.469"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_vector.488"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.469"*, align 8
  store %"class.thrust::device_vector.488"* %this, %"class.thrust::device_vector.488"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.469"* %v, %"class.thrust::host_vector.469"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_vector.488"*, %"class.thrust::device_vector.488"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_vector.488"* %this1 to %"class.thrust::detail::vector_base.489"*
  %1 = load %"class.thrust::host_vector.469"*, %"class.thrust::host_vector.469"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.469"* %1 to %"class.thrust::detail::vector_base.470"*
  call void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.489"* %0, %"class.thrust::detail::vector_base.470"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust13device_vectorINS_4pairIssEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.500"* %this, %"class.thrust::host_vector.478"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_vector.500"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.478"*, align 8
  store %"class.thrust::device_vector.500"* %this, %"class.thrust::device_vector.500"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.478"* %v, %"class.thrust::host_vector.478"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_vector.500"*, %"class.thrust::device_vector.500"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_vector.500"* %this1 to %"class.thrust::detail::vector_base.501"*
  %1 = load %"class.thrust::host_vector.478"*, %"class.thrust::host_vector.478"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.478"* %1 to %"class.thrust::detail::vector_base.479"*
  call void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.501"* %0, %"class.thrust::detail::vector_base.479"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorIsSaIsEEC2IbSaIbEEERKNS0_IT_T0_EE(%"class.thrust::host_vector.469"* %this, %"class.thrust::host_vector.73"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.469"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.73"*, align 8
  store %"class.thrust::host_vector.469"* %this, %"class.thrust::host_vector.469"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.73"* %v, %"class.thrust::host_vector.73"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::host_vector.469"*, %"class.thrust::host_vector.469"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.469"* %this1 to %"class.thrust::detail::vector_base.470"*
  %1 = load %"class.thrust::host_vector.73"*, %"class.thrust::host_vector.73"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.73"* %1 to %"class.thrust::detail::vector_base.74"*
  call void @_ZN6thrust6detail11vector_baseIsSaIsEEC2IbSaIbEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.470"* %0, %"class.thrust::detail::vector_base.74"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIssEC2IiiEERKNS0_IT_T0_EE(%"struct.thrust::pair.487"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.487"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair.487"* %this, %"struct.thrust::pair.487"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 0, i32 0
  %1 = load i32, i32* %first2, align 4, !tbaa !24
  %conv = trunc i32 %1 to i16
  store i16 %conv, i16* %first, align 2, !tbaa !348
  %second = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %2, i32 0, i32 1
  %3 = load i32, i32* %second3, align 4, !tbaa !28
  %conv4 = trunc i32 %3 to i16
  store i16 %conv4, i16* %second, align 2, !tbaa !350
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPsEENS2_IPNS_4pairIssEEEES8_S6_NS_8equal_toIsEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_(i16* %first1.coerce, i16* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i32 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %init = alloca %"struct.thrust::pair.487", align 2
  %binary_pred = alloca %"struct.thrust::equal_to.512", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp12 = alloca %"struct.thrust::pair.487", align 2
  %agg.tmp13 = alloca %"struct.thrust::equal_to.512", align 1
  %agg.tmp14 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive2, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::pair.487"* %init to i32*
  store i32 %init.coerce, i32* %0, align 2
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %4, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5, %"struct.thrust::execution_policy.88"* dereferenceable(1) %6)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp9 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.475"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.484"* %agg.tmp10 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.484"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.484"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::pair.487"* %agg.tmp12 to i8*
  %17 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 4, i32 2, i1 false), !tbaa.struct !345
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive15, i32 0, i32 0
  %18 = load i16*, i16** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp9, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive17, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp10, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive19, i32 0, i32 0
  %20 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive20, align 8
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp11, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive21, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %22 = bitcast %"struct.thrust::pair.487"* %agg.tmp12 to i32*
  %23 = load i32, i32* %22, align 2
  %call23 = call %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPsEENS6_IPNS_4pairIssEEEESC_SA_NS_8equal_toIsEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %7, i16* %18, i16* %19, %"struct.thrust::pair.487"* %20, %"struct.thrust::pair.487"* %21, i32 %23)
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive24, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call23, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  %24 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %24) #5
  %25 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %25) #5
  %26 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %26) #5
  %coerce.dive26 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive26, i32 0, i32 0
  %27 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  ret %"struct.thrust::pair.487"* %27
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIsEEEENS2_INS3_INS_4pairIssEEEEEES9_S7_NS_8equal_toIsEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_(i16* %first1.coerce, i16* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i32 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %init = alloca %"struct.thrust::pair.487", align 2
  %binary_pred = alloca %"struct.thrust::equal_to.512", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %system1 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp23 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp24 = alloca %"struct.thrust::pair.487", align 2
  %agg.tmp25 = alloca %"struct.thrust::equal_to.512", align 1
  %agg.tmp26 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair.487"* %init to i32*
  store i32 %init.coerce, i32* %0, align 2
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %4 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to %"struct.thrust::execution_policy.120"*
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to %"struct.thrust::execution_policy.120"*
  %6 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to %"struct.thrust::execution_policy.120"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.120"* dereferenceable(1) %4, %"struct.thrust::execution_policy.120"* dereferenceable(1) %5, %"struct.thrust::execution_policy.120"* dereferenceable(1) %6)
  %7 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.493"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp21 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.493"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp22 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.505"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp23 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::pair.487"* %agg.tmp24 to i8*
  %17 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 4, i32 2, i1 false), !tbaa.struct !345
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive30, i32 0, i32 0
  %18 = load i16*, i16** %coerce.dive31, align 8
  %coerce.dive32 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp21, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive35, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp22, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive40, i32 0, i32 0
  %20 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive41, align 8
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp23, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive45, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive46, align 8
  %22 = bitcast %"struct.thrust::pair.487"* %agg.tmp24 to i32*
  %23 = load i32, i32* %22, align 2
  %call47 = call %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS6_INS7_INS_4pairIssEEEEEESD_SB_NS_8equal_toIsEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %7, i16* %18, i16* %19, %"struct.thrust::pair.487"* %20, %"struct.thrust::pair.487"* %21, i32 %23)
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive50, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive51, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call47, %"struct.thrust::pair.487"** %coerce.dive52, align 8
  %24 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %24) #5
  %25 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %25) #5
  %26 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %26) #5
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive56, i32 0, i32 0
  %27 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive57, align 8
  ret %"struct.thrust::pair.487"* %27
}

; Function Attrs: nounwind uwtable
define linkonce_odr i16* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::vector_base.489"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 0
  %call = call i16* @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::contiguous_storage.490"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  store i16* %call, i16** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive9, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive10, align 8
  ret i16* %0
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE3endEv(%"class.thrust::detail::vector_base.489"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %call = call i16* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::vector_base.489"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  store i16* %call, i16** %coerce.dive5, align 8
  %call6 = call i64 @_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE4sizeEv(%"class.thrust::detail::vector_base.489"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %retval, i64 %call6)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive10, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive11, align 8
  ret i16* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.501"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.502"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive9, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIssEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi(%"class.thrust::host_vector.478"* dereferenceable(32) %a, %"class.thrust::device_vector.500"* dereferenceable(32) %b, %"class.std::basic_string"* dereferenceable(8) %filename, i32 %lineno) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %a.addr = alloca %"class.thrust::host_vector.478"*, align 8
  %b.addr = alloca %"class.thrust::device_vector.500"*, align 8
  %filename.addr = alloca %"class.std::basic_string"*, align 8
  %lineno.addr = alloca i32, align 4
  %f = alloca %"class.unittest::UnitTestFailure", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.thrust::host_vector.478"* %a, %"class.thrust::host_vector.478"** %a.addr, align 8, !tbaa !7
  store %"class.thrust::device_vector.500"* %b, %"class.thrust::device_vector.500"** %b.addr, align 8, !tbaa !7
  store %"class.std::basic_string"* %filename, %"class.std::basic_string"** %filename.addr, align 8, !tbaa !7
  store i32 %lineno, i32* %lineno.addr, align 4, !tbaa !11
  %0 = load %"class.thrust::host_vector.478"*, %"class.thrust::host_vector.478"** %a.addr, align 8
  %1 = bitcast %"class.thrust::host_vector.478"* %0 to %"class.thrust::detail::vector_base.479"*
  %2 = load %"class.thrust::device_vector.500"*, %"class.thrust::device_vector.500"** %b.addr, align 8
  %3 = bitcast %"class.thrust::device_vector.500"* %2 to %"class.thrust::detail::vector_base.501"*
  %call = call zeroext i1 @_ZN6thrusteqINS_4pairIssEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE(%"class.thrust::detail::vector_base.479"* dereferenceable(32) %1, %"class.thrust::detail::vector_base.501"* dereferenceable(32) %3)
  br i1 %call, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  %4 = bitcast %"class.unittest::UnitTestFailure"* %f to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  call void @_ZN8unittest15UnitTestFailureC2Ev(%"class.unittest::UnitTestFailure"* %f)
  %5 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call1 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_(%"class.unittest::UnitTestException"* %5, [2 x i8]* dereferenceable(2) @.str.45)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %6 = load %"class.std::basic_string"*, %"class.std::basic_string"** %filename.addr, align 8
  %call3 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_(%"class.unittest::UnitTestException"* %call1, %"class.std::basic_string"* dereferenceable(8) %6)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call3, [2 x i8]* dereferenceable(2) @.str.46)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %call7 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIiEERS0_RKT_(%"class.unittest::UnitTestException"* %call5, i32* dereferenceable(4) %lineno.addr)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont4
  %call9 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call7, [3 x i8]* dereferenceable(3) @.str.47)
          to label %invoke.cont8 unwind label %lpad

invoke.cont8:                                     ; preds = %invoke.cont6
  %7 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call11 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA22_cEERS0_RKT_(%"class.unittest::UnitTestException"* %7, [22 x i8]* dereferenceable(22) @.str.48)
          to label %invoke.cont10 unwind label %lpad

invoke.cont10:                                    ; preds = %invoke.cont8
  %8 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call13 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA9_cEERS0_RKT_(%"class.unittest::UnitTestException"* %8, [9 x i8]* dereferenceable(9) @.str.49)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont10
  invoke void @_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIssEESaIS4_EEEEESsv(%"class.std::basic_string"* sret %ref.tmp)
          to label %invoke.cont14 unwind label %lpad

invoke.cont14:                                    ; preds = %invoke.cont12
  %call17 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_(%"class.unittest::UnitTestException"* %call13, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont16 unwind label %lpad15

invoke.cont16:                                    ; preds = %invoke.cont14
  %call19 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call17, [3 x i8]* dereferenceable(3) @.str.50)
          to label %invoke.cont18 unwind label %lpad15

invoke.cont18:                                    ; preds = %invoke.cont16
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %9 = bitcast i8* %exception to %"class.unittest::UnitTestFailure"*
  call void @_ZN8unittest15UnitTestFailureC2EOS0_(%"class.unittest::UnitTestFailure"* %9, %"class.unittest::UnitTestFailure"* dereferenceable(8) %f) #5
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN8unittest15UnitTestFailureE to i8*), i8* bitcast (void (%"class.unittest::UnitTestException"*)* @_ZN8unittest17UnitTestExceptionD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad

lpad:                                             ; preds = %invoke.cont18, %invoke.cont12, %invoke.cont10, %invoke.cont8, %invoke.cont6, %invoke.cont4, %invoke.cont2, %invoke.cont, %if.then
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad15:                                           ; preds = %invoke.cont16, %invoke.cont14
  %13 = landingpad { i8*, i32 }
          cleanup
  %14 = extractvalue { i8*, i32 } %13, 0
  store i8* %14, i8** %exn.slot, align 8
  %15 = extractvalue { i8*, i32 } %13, 1
  store i32 %15, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad15, %lpad
  call void bitcast (void (%"class.unittest::UnitTestException"*)* @_ZN8unittest17UnitTestExceptionD2Ev to void (%"class.unittest::UnitTestFailure"*)*)(%"class.unittest::UnitTestFailure"* %f) #5
  %16 = bitcast %"class.unittest::UnitTestFailure"* %f to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  ret void

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val21 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val21

unreachable:                                      ; preds = %invoke.cont18
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEED2Ev(%"class.thrust::detail::vector_base.489"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp6 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 0
  %call = invoke i16* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::vector_base.489"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  store i16* %call, i16** %coerce.dive5, align 8
  %call8 = invoke i16* @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE3endEv(%"class.thrust::detail::vector_base.489"* %this1)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %invoke.cont
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp6, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive12, i32 0, i32 0
  store i16* %call8, i16** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive17, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp6, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive22, i32 0, i32 0
  %1 = load i16*, i16** %coerce.dive23, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE7destroyENS0_15normal_iteratorINS_10device_ptrIsEEEES8_(%"class.thrust::detail::contiguous_storage.490"* %m_storage, i16* %0, i16* %1)
          to label %invoke.cont24 unwind label %lpad

invoke.cont24:                                    ; preds = %invoke.cont7
  %m_storage25 = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEED2Ev(%"class.thrust::detail::contiguous_storage.490"* %m_storage25) #5
  ret void

lpad:                                             ; preds = %invoke.cont7, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage26 = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEED2Ev(%"class.thrust::detail::contiguous_storage.490"* %m_storage26) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsSaIsEED2Ev(%"class.thrust::detail::vector_base.470"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  %call = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive2, align 8
  %call5 = invoke i16* @_ZN6thrust6detail11vector_baseIsSaIsEE3endEv(%"class.thrust::detail::vector_base.470"* %this1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp3, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive6, i32 0, i32 0
  store i16* %call5, i16** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive8, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp3, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive10, i32 0, i32 0
  %1 = load i16*, i16** %coerce.dive11, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsSaIsEE7destroyENS0_15normal_iteratorIPsEES6_(%"class.thrust::detail::contiguous_storage.471"* %m_storage, i16* %0, i16* %1)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont4
  %m_storage13 = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEED2Ev(%"class.thrust::detail::contiguous_storage.471"* %m_storage13) #5
  ret void

lpad:                                             ; preds = %invoke.cont4, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage14 = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEED2Ev(%"class.thrust::detail::contiguous_storage.471"* %m_storage14) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::vector_base.501"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp6 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  %call = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.501"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %call8 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE3endEv(%"class.thrust::detail::vector_base.501"* %this1)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %invoke.cont
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp6, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call8, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive17, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp6, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive22, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.502"* %m_storage, %"struct.thrust::pair.487"* %0, %"struct.thrust::pair.487"* %1)
          to label %invoke.cont24 unwind label %lpad

invoke.cont24:                                    ; preds = %invoke.cont7
  %m_storage25 = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.502"* %m_storage25) #5
  ret void

lpad:                                             ; preds = %invoke.cont7, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage26 = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.502"* %m_storage26) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EED2Ev(%"class.thrust::detail::vector_base.479"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  %call = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %call5 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.479"* %this1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp3, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call5, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive8, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp3, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive10, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_(%"class.thrust::detail::contiguous_storage.480"* %m_storage, %"struct.thrust::pair.487"* %0, %"struct.thrust::pair.487"* %1)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont4
  %m_storage13 = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.480"* %m_storage13) #5
  ret void

lpad:                                             ; preds = %invoke.cont4, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage14 = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.480"* %m_storage14) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorIsSaIsEEC2Em(%"class.thrust::host_vector.469"* %this, i64 %n) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.469"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::host_vector.469"* %this, %"class.thrust::host_vector.469"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::host_vector.469"*, %"class.thrust::host_vector.469"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.469"* %this1 to %"class.thrust::detail::vector_base.470"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail11vector_baseIsSaIsEEC2Em(%"class.thrust::detail::vector_base.470"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %op = alloca %"struct.unittest::random_integer.513", align 1
  %system1 = alloca %"struct.thrust::any_system_tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp2 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp4 = alloca %"struct.unittest::random_integer.513", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive1, align 8
  %0 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::any_system_tag"* %system1 to %"struct.thrust::execution_policy.89"*
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS_14any_system_tagENS0_3cpp6detail3tagEEERNS_6detail17enable_if_definedINS8_14minimum_systemIT_T0_NS8_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyISB_EERNSJ_ISC_EE(%"struct.thrust::execution_policy.89"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %5 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.475"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp3, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive5, i32 0, i32 0
  %7 = load i16*, i16** %coerce.dive6, align 8
  %call7 = call i16* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp2, i16* %7)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive8, i32 0, i32 0
  store i16* %call7, i16** %coerce.dive9, align 8
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %8) #5
  %9 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %9) #5
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive10, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive11, align 8
  ret i16* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsSaIsEEC2Em(%"class.thrust::detail::vector_base.470"* %this, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.std::allocator.472", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  call void @_ZNSaIsEC2Ev(%"class.std::allocator.472"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageIsSaIsEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.471"* %m_storage, %"class.std::allocator.472"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.473"*)* @_ZN9__gnu_cxx13new_allocatorIsED2Ev to void (%"class.std::allocator.472"*)*)(%"class.std::allocator.472"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !351
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail11vector_baseIsSaIsEE12default_initEm(%"class.thrust::detail::vector_base.470"* %this1, i64 %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.473"*)* @_ZN9__gnu_cxx13new_allocatorIsED2Ev to void (%"class.std::allocator.472"*)*)(%"class.std::allocator.472"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEED2Ev(%"class.thrust::detail::contiguous_storage.471"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIsEC2Ev(%"class.std::allocator.472"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.472"*, align 8
  store %"class.std::allocator.472"* %this, %"class.std::allocator.472"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.472"* %this1 to %"class.__gnu_cxx::new_allocator.473"*
  call void @_ZN9__gnu_cxx13new_allocatorIsEC2Ev(%"class.__gnu_cxx::new_allocator.473"* %0) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsSaIsEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.471"* %this, %"class.std::allocator.472"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %alloc.addr = alloca %"class.std::allocator.472"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.472"* %alloc, %"class.std::allocator.472"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %alloc.addr, align 8
  call void @_ZNSaIsEC2ERKS_(%"class.std::allocator.472"* %m_allocator, %"class.std::allocator.472"* dereferenceable(1) %0) #5
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust6detail15normal_iteratorIPsEC2ES2_(%"class.thrust::detail::normal_iterator.475"* %m_begin, i16* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !356
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.473"*)* @_ZN9__gnu_cxx13new_allocatorIsED2Ev to void (%"class.std::allocator.472"*)*)(%"class.std::allocator.472"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIsED2Ev(%"class.__gnu_cxx::new_allocator.473"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.473"*, align 8
  store %"class.__gnu_cxx::new_allocator.473"* %this, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.473"*, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsSaIsEE12default_initEm(%"class.thrust::detail::vector_base.470"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEE8allocateEm(%"class.thrust::detail::contiguous_storage.471"* %m_storage, i64 %1)
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 1
  store i64 %2, i64* %m_size, align 8, !tbaa !351
  %m_storage2 = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  %call = call i16* @_ZN6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive3, align 8
  %call4 = call i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE4sizeEv(%"class.thrust::detail::vector_base.470"* %this1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive5, i32 0, i32 0
  %3 = load i16*, i16** %coerce.dive6, align 8
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEE19default_construct_nENS0_15normal_iteratorIPsEEm(%"class.thrust::detail::contiguous_storage.471"* %m_storage2, i16* %3, i64 %call4)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsSaIsEED2Ev(%"class.thrust::detail::contiguous_storage.471"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsSaIsEE10deallocateEv(%"class.thrust::detail::contiguous_storage.471"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.473"*)* @_ZN9__gnu_cxx13new_allocatorIsED2Ev to void (%"class.std::allocator.472"*)*)(%"class.std::allocator.472"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.473"*)* @_ZN9__gnu_cxx13new_allocatorIsED2Ev to void (%"class.std::allocator.472"*)*)(%"class.std::allocator.472"* %m_allocator2) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIsEC2Ev(%"class.__gnu_cxx::new_allocator.473"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.473"*, align 8
  store %"class.__gnu_cxx::new_allocator.473"* %this, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.473"*, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIsEC2ERKS_(%"class.std::allocator.472"* %this, %"class.std::allocator.472"* dereferenceable(1) %__a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.472"*, align 8
  %__a.addr = alloca %"class.std::allocator.472"*, align 8
  store %"class.std::allocator.472"* %this, %"class.std::allocator.472"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.472"* %__a, %"class.std::allocator.472"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.472"* %this1 to %"class.__gnu_cxx::new_allocator.473"*
  %1 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator.472"* %1 to %"class.__gnu_cxx::new_allocator.473"*
  call void @_ZN9__gnu_cxx13new_allocatorIsEC2ERKS1_(%"class.__gnu_cxx::new_allocator.473"* %0, %"class.__gnu_cxx::new_allocator.473"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPsEC2ES2_(%"class.thrust::detail::normal_iterator.475"* %this, i16* %p) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %p.addr = alloca i16*, align 8
  store %"class.thrust::detail::normal_iterator.475"* %this, %"class.thrust::detail::normal_iterator.475"** %this.addr, align 8, !tbaa !1
  store i16* %p, i16** %p.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.475"* %this1 to %"class.thrust::iterator_adaptor.476"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor.476"* %0, i16** dereferenceable(8) %p.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIsEC2ERKS1_(%"class.__gnu_cxx::new_allocator.473"* %this, %"class.__gnu_cxx::new_allocator.473"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.473"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator.473"*, align 8
  store %"class.__gnu_cxx::new_allocator.473"* %this, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator.473"* %0, %"class.__gnu_cxx::new_allocator.473"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator.473"*, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor.476"* %this, i16** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  %iter.addr = alloca i16**, align 8
  store %"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8, !tbaa !1
  store i16** %iter, i16*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.476"* %this1 to %"class.thrust::iterator_facade.477"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %this1, i32 0, i32 0
  %1 = load i16**, i16*** %iter.addr, align 8
  %2 = load i16*, i16** %1, align 8, !tbaa !1
  store i16* %2, i16** %m_iterator, align 8, !tbaa !357
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsSaIsEE8allocateEm(%"class.thrust::detail::contiguous_storage.471"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %ref.tmp3 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i16* @_ZN6thrust6detail16allocator_traitsISaIsEE8allocateERS2_m(%"class.std::allocator.472"* dereferenceable(1) %m_allocator, i64 %1)
  call void @_ZN6thrust6detail15normal_iteratorIPsEC2ES2_(%"class.thrust::detail::normal_iterator.475"* %ref.tmp, i16* %call)
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %m_begin to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 2
  store i64 %4, i64* %m_size, align 8, !tbaa !356
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPsEC2ES2_(%"class.thrust::detail::normal_iterator.475"* %ref.tmp3, i16* null)
  %5 = bitcast %"class.thrust::detail::normal_iterator.475"* %m_begin2 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.475"* %ref.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size4, align 8, !tbaa !356
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsSaIsEE19default_construct_nENS0_15normal_iteratorIPsEEm(%"class.thrust::detail::contiguous_storage.471"* %this, i16* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %n.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this2, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.475"* %first to %"class.thrust::iterator_adaptor.476"*
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %0)
  %1 = load i16*, i16** %call, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23default_construct_rangeISaIsEPsmEEvRT_T0_T1_(%"class.std::allocator.472"* dereferenceable(1) %m_allocator, i16* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE4sizeEv(%"class.thrust::detail::vector_base.470"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !351
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust6detail16allocator_traitsISaIsEE8allocateERS2_m(%"class.std::allocator.472"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i16* @_ZZN6thrust6detail16allocator_traitsISaIsEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.472"* dereferenceable(1) %0, i64 %1)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZZN6thrust6detail16allocator_traitsISaIsEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.472"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.472"* %0 to %"class.__gnu_cxx::new_allocator.473"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i16* @_ZN9__gnu_cxx13new_allocatorIsE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.473"* %1, i64 %2, i8* null)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN9__gnu_cxx13new_allocatorIsE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.473"* %this, i64 %__n, i8*) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.473"*, align 8
  %__n.addr = alloca i64, align 8
  %.addr = alloca i8*, align 8
  store %"class.__gnu_cxx::new_allocator.473"* %this, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.473"*, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8
  %1 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK9__gnu_cxx13new_allocatorIsE8max_sizeEv(%"class.__gnu_cxx::new_allocator.473"* %this1) #5
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZSt17__throw_bad_allocv() #15
  unreachable

if.end:                                           ; preds = %entry
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %mul = mul i64 %2, 2
  %call2 = call i8* @_Znwm(i64 %mul)
  %3 = bitcast i8* %call2 to i16*
  ret i16* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK9__gnu_cxx13new_allocatorIsE8max_sizeEv(%"class.__gnu_cxx::new_allocator.473"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.473"*, align 8
  store %"class.__gnu_cxx::new_allocator.473"* %this, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.473"*, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8
  ret i64 9223372036854775807
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23default_construct_rangeISaIsEPsmEEvRT_T0_T1_(%"class.std::allocator.472"* dereferenceable(1) %a, i16* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %p.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i16* %p, i16** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %1 = load i16*, i16** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIsEPsmEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.472"* dereferenceable(1) %0, i16* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  store %"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %this1, i32 0, i32 0
  ret i16** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIsEPsmEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.472"* dereferenceable(1) %a, i16* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %p.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %ref.tmp1 = alloca i16, align 2
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i16* %p, i16** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaIsEE3getERS2_(%"class.std::allocator.472"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i16*, i16** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  store i16 0, i16* %ref.tmp1, align 2, !tbaa !346
  %call = call i16* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPsmsEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i16* %2, i64 %3, i16* dereferenceable(2) %ref.tmp1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPsmsEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i16* %first, i64 %n, i16* dereferenceable(2) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i16*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i16* %x, i16** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i16*, i16** %x.addr, align 8
  %call2 = call i16* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i16* %2, i64 %3, i16* dereferenceable(2) %4)
  ret i16* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemISaIsEE3getERS2_(%"class.std::allocator.472"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemISaIsEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.472"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i16* %first, i64 %n, i16* dereferenceable(2) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i16*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  %ref.tmp = alloca %"struct.thrust::detail::has_trivial_copy_constructor.514", align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i16* %x, i16** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %3 = load i16*, i16** %x.addr, align 8
  %4 = bitcast %"struct.thrust::detail::has_trivial_copy_constructor.514"* %ref.tmp to %"struct.thrust::detail::integral_constant"*
  %call = call i16* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, i16* %1, i64 %2, i16* dereferenceable(2) %3)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i16* %first, i64 %n, i16* dereferenceable(2) %x) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i16*, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i16* %x, i16** %x.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %5 = load i16*, i16** %x.addr, align 8
  %call = call i16* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPsmsEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i16* %3, i64 %4, i16* dereferenceable(2) %5)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPsmsEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i16* %first, i64 %n, i16* dereferenceable(2) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i16*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i16* %value, i16** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i16*, i16** %value.addr, align 8
  %call2 = call i16* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i16* %2, i64 %3, i16* dereferenceable(2) %4)
  ret i16* %call2
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPsmsEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i16* %first, i64 %n, i16* dereferenceable(2) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i16*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor.515", align 2
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i16* %value, i16** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i16*, i16** %value.addr, align 8
  call void @_ZN6thrust6detail12fill_functorIsEC2ERKs(%"struct.thrust::detail::fill_functor.515"* %agg.tmp, i16* dereferenceable(2) %4)
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %agg.tmp, i32 0, i32 0
  %5 = load i16, i16* %coerce.dive, align 2
  %call = call i16* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPsmNS_6detail12fill_functorIsEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i16* %2, i64 %3, i16 %5)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPsmNS_6detail12fill_functorIsEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i16* %first, i64 %n, i16 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor.515", align 2
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor.515", align 2
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %gen, i32 0, i32 0
  store i16 %gen.coerce, i16* %coerce.dive, align 2
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor.515"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor.515"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 2, i32 2, i1 false), !tbaa.struct !359
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %agg.tmp, i32 0, i32 0
  %6 = load i16, i16* %coerce.dive2, align 2
  %call3 = call i16* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPsmNS_6detail12fill_functorIsEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i16* %2, i64 %3, i16 %6)
  ret i16* %call3
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail12fill_functorIsEC2ERKs(%"struct.thrust::detail::fill_functor.515"* %this, i16* dereferenceable(2) %_exemplar) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor.515"*, align 8
  %_exemplar.addr = alloca i16*, align 8
  store %"struct.thrust::detail::fill_functor.515"* %this, %"struct.thrust::detail::fill_functor.515"** %this.addr, align 8, !tbaa !1
  store i16* %_exemplar, i16** %_exemplar.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::fill_functor.515"*, %"struct.thrust::detail::fill_functor.515"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %_exemplar.addr, align 8
  %1 = load i16, i16* %0, align 2, !tbaa !346
  store i16 %1, i16* %exemplar, align 2, !tbaa !360
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPsmNS_6detail12fill_functorIsEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i16* %first, i64 %n, i16 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor.515", align 2
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor.516", align 2
  %agg.tmp1 = alloca %"struct.thrust::detail::fill_functor.515", align 2
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %gen, i32 0, i32 0
  store i16 %gen.coerce, i16* %coerce.dive, align 2
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor.515"* %agg.tmp1 to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor.515"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 2, i32 2, i1 false), !tbaa.struct !359
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %agg.tmp1, i32 0, i32 0
  %6 = load i16, i16* %coerce.dive2, align 2
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIsEEEC2ES3_(%"struct.thrust::detail::host_generate_functor.516"* %agg.tmp, i16 %6)
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.516", %"struct.thrust::detail::host_generate_functor.516"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %coerce.dive3, i32 0, i32 0
  %7 = load i16, i16* %coerce.dive4, align 2
  %call = call i16* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPsmNS_6detail21host_generate_functorINS6_12fill_functorIsEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i16* %2, i64 %3, i16 %7)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPsmNS_6detail21host_generate_functorINS6_12fill_functorIsEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i16* %first, i64 %n, i16 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor.516", align 2
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor.516", align 2
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.516", %"struct.thrust::detail::host_generate_functor.516"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %coerce.dive, i32 0, i32 0
  store i16 %f.coerce, i16* %coerce.dive1, align 2
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::host_generate_functor.516"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::host_generate_functor.516"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 2, i32 2, i1 false), !tbaa.struct !359
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.516", %"struct.thrust::detail::host_generate_functor.516"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %coerce.dive3, i32 0, i32 0
  %6 = load i16, i16* %coerce.dive4, align 2
  %call5 = call i16* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPsmNS_6detail21host_generate_functorINS8_12fill_functorIsEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, i16* %2, i64 %3, i16 %6)
  ret i16* %call5
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIsEEEC2ES3_(%"struct.thrust::detail::host_generate_functor.516"* %this, i16 %g.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %g = alloca %"struct.thrust::detail::fill_functor.515", align 2
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor.516"*, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %g, i32 0, i32 0
  store i16 %g.coerce, i16* %coerce.dive, align 2
  store %"struct.thrust::detail::host_generate_functor.516"* %this, %"struct.thrust::detail::host_generate_functor.516"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::host_generate_functor.516"*, %"struct.thrust::detail::host_generate_functor.516"** %this.addr, align 8
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.516", %"struct.thrust::detail::host_generate_functor.516"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::fill_functor.515"* %gen to i8*
  %1 = bitcast %"struct.thrust::detail::fill_functor.515"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 2, i32 2, i1 false), !tbaa.struct !359
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPsmNS_6detail21host_generate_functorINS8_12fill_functorIsEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i16* %first, i64 %n, i16 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor.516", align 2
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.517", align 2
  %i = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.516", %"struct.thrust::detail::host_generate_functor.516"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %coerce.dive, i32 0, i32 0
  store i16 %f.coerce, i16* %coerce.dive1, align 2
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i16* %first, i16** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.517"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 2, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIsEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function.517"* %wrapped_f, %"struct.thrust::detail::host_generate_functor.516"* dereferenceable(2) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load i16*, i16** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIsEEEEvEclIsEEvRT_(%"struct.thrust::detail::wrapped_function.517"* %wrapped_f, i16* dereferenceable(2) %6)
  %7 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds i16, i16* %7, i32 1
  store i16* %incdec.ptr, i16** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load i16*, i16** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.517"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 2, i8* %10) #5
  ret i16* %9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIsEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function.517"* %this, %"struct.thrust::detail::host_generate_functor.516"* dereferenceable(2) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.517"*, align 8
  %f.addr = alloca %"struct.thrust::detail::host_generate_functor.516"*, align 8
  store %"struct.thrust::detail::wrapped_function.517"* %this, %"struct.thrust::detail::wrapped_function.517"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::host_generate_functor.516"* %f, %"struct.thrust::detail::host_generate_functor.516"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.517"*, %"struct.thrust::detail::wrapped_function.517"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.517", %"struct.thrust::detail::wrapped_function.517"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::host_generate_functor.516"*, %"struct.thrust::detail::host_generate_functor.516"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::host_generate_functor.516"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::host_generate_functor.516"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 2, i32 2, i1 false), !tbaa.struct !359
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIsEEEEvEclIsEEvRT_(%"struct.thrust::detail::wrapped_function.517"* %this, i16* dereferenceable(2) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.517"*, align 8
  %x.addr = alloca i16*, align 8
  store %"struct.thrust::detail::wrapped_function.517"* %this, %"struct.thrust::detail::wrapped_function.517"** %this.addr, align 8, !tbaa !1
  store i16* %x, i16** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.517"*, %"struct.thrust::detail::wrapped_function.517"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.517", %"struct.thrust::detail::wrapped_function.517"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %x.addr, align 8
  %call = call dereferenceable(2) i16* @_ZN6thrust18raw_reference_castIsEENS_6detail13raw_referenceIT_E4typeERS3_(i16* dereferenceable(2) %0)
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIsEEEclIsEEvRKT_(%"struct.thrust::detail::host_generate_functor.516"* %m_f, i16* dereferenceable(2) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIsEEEclIsEEvRKT_(%"struct.thrust::detail::host_generate_functor.516"* %this, i16* dereferenceable(2) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor.516"*, align 8
  %x.addr = alloca i16*, align 8
  %lvalue = alloca i16*, align 8
  store %"struct.thrust::detail::host_generate_functor.516"* %this, %"struct.thrust::detail::host_generate_functor.516"** %this.addr, align 8, !tbaa !1
  store i16* %x, i16** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::host_generate_functor.516"*, %"struct.thrust::detail::host_generate_functor.516"** %this.addr, align 8
  %0 = bitcast i16** %lvalue to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load i16*, i16** %x.addr, align 8
  store i16* %1, i16** %lvalue, align 8, !tbaa !7
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.516", %"struct.thrust::detail::host_generate_functor.516"* %this1, i32 0, i32 0
  %call = call signext i16 @_ZNK6thrust6detail12fill_functorIsEclEv(%"struct.thrust::detail::fill_functor.515"* %gen)
  %2 = load i16*, i16** %lvalue, align 8
  store i16 %call, i16* %2, align 2, !tbaa !346
  %3 = bitcast i16** %lvalue to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust18raw_reference_castIsEENS_6detail13raw_referenceIT_E4typeERS3_(i16* dereferenceable(2) %ref) #8 comdat {
entry:
  %ref.addr = alloca i16*, align 8
  %ref.tmp = alloca i16*, align 8
  store i16* %ref, i16** %ref.addr, align 8, !tbaa !7
  %0 = load i16*, i16** %ref.addr, align 8
  store i16* %0, i16** %ref.tmp, align 8, !tbaa !1
  %call = call i16* @_ZN6thrust16raw_pointer_castIPsEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i16** dereferenceable(8) %ref.tmp)
  ret i16* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr signext i16 @_ZNK6thrust6detail12fill_functorIsEclEv(%"struct.thrust::detail::fill_functor.515"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor.515"*, align 8
  store %"struct.thrust::detail::fill_functor.515"* %this, %"struct.thrust::detail::fill_functor.515"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::fill_functor.515"*, %"struct.thrust::detail::fill_functor.515"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor.515", %"struct.thrust::detail::fill_functor.515"* %this1, i32 0, i32 0
  %0 = load i16, i16* %exemplar, align 2, !tbaa !360
  ret i16 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust16raw_pointer_castIPsEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i16** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i16**, align 8
  store i16** %ptr, i16*** %ptr.addr, align 8, !tbaa !7
  %0 = load i16**, i16*** %ptr.addr, align 8
  %1 = load i16*, i16** %0, align 8, !tbaa !1
  %call = call i16* @_ZN6thrust6detail14pointer_traitsIPsE3getES2_(i16* %1)
  ret i16* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i16* @_ZN6thrust6detail14pointer_traitsIPsE3getES2_(i16* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i16*, align 8
  store i16* %ptr, i16** %ptr.addr, align 8, !tbaa !1
  %0 = load i16*, i16** %ptr.addr, align 8, !tbaa !1
  ret i16* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemISaIsEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.472"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsSaIsEE10deallocateEv(%"class.thrust::detail::contiguous_storage.471"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIsSaIsEE4sizeEv(%"class.thrust::detail::contiguous_storage.471"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.475"* %m_begin to %"class.thrust::iterator_adaptor.476"*
  %call2 = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %0)
  %1 = load i16*, i16** %call2, align 8, !tbaa !1
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIsSaIsEE4sizeEv(%"class.thrust::detail::contiguous_storage.471"* %this1)
  call void @_ZN6thrust6detail16allocator_traitsISaIsEE10deallocateERS2_Psm(%"class.std::allocator.472"* dereferenceable(1) %m_allocator, i16* %1, i64 %call3)
  %m_begin4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPsEC2ES2_(%"class.thrust::detail::normal_iterator.475"* %ref.tmp, i16* null)
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %m_begin4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !356
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIsSaIsEE4sizeEv(%"class.thrust::detail::contiguous_storage.471"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !356
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaIsEE10deallocateERS2_Psm(%"class.std::allocator.472"* dereferenceable(1) %a, i16* %p, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %p.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i16* %p, i16** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %1 = load i16*, i16** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZZN6thrust6detail16allocator_traitsISaIsEE10deallocateERS2_PsmEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.472"* dereferenceable(1) %0, i16* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsISaIsEE10deallocateERS2_PsmEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.472"* dereferenceable(1) %a, i16* %p, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %p.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i16* %p, i16** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.472"* %0 to %"class.__gnu_cxx::new_allocator.473"*
  %2 = load i16*, i16** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorIsE10deallocateEPsm(%"class.__gnu_cxx::new_allocator.473"* %1, i16* %2, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIsE10deallocateEPsm(%"class.__gnu_cxx::new_allocator.473"* %this, i16* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.473"*, align 8
  %__p.addr = alloca i16*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.473"* %this, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8, !tbaa !1
  store i16* %__p, i16** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.473"*, %"class.__gnu_cxx::new_allocator.473"** %this.addr, align 8
  %1 = load i16*, i16** %__p.addr, align 8, !tbaa !1
  %2 = bitcast i16* %1 to i8*
  call void @_ZdlPv(i8* %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %op = alloca %"struct.unittest::random_integer.513", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp5 = alloca %"struct.unittest::random_integer.513", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::execution_policy.88"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp3, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp4, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive6, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive7, align 8
  %call8 = call i16* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp3, i16* %4)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive9, i32 0, i32 0
  store i16* %call8, i16** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive11, i32 0, i32 0
  %5 = load i16*, i16** %coerce.dive12, align 8
  ret i16* %5
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPsEEN8unittest14random_integerIsLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %op = alloca %"struct.unittest::random_integer.513", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.518", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.518", align 8
  %agg.tmp2 = alloca %"class.thrust::tuple.520", align 8
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.518", align 8
  %agg.tmp4 = alloca %"class.thrust::tuple.520", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::unary_transform_functor.523", align 1
  %agg.tmp6 = alloca %"struct.unittest::random_integer.513", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.518"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.520"* sret %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %first, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.518"* sret %agg.tmp, %"class.thrust::tuple.520"* %agg.tmp2)
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.520"* sret %agg.tmp4, %"class.thrust::counting_iterator"* dereferenceable(8) %last, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.518"* sret %agg.tmp3, %"class.thrust::tuple.520"* %agg.tmp4)
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIsLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor.523"* %agg.tmp5)
  call void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPsEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator.518"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, %"class.thrust::zip_iterator.518"* %agg.tmp, %"class.thrust::zip_iterator.518"* %agg.tmp3)
  %call = call dereferenceable(16) %"class.thrust::tuple.520"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.518"* %zipped_result)
  %3 = bitcast %"class.thrust::tuple.520"* %call to %"struct.thrust::detail::cons.521"*
  %call7 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.521"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.475"* %retval to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.475"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.518"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %6) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive8, i32 0, i32 0
  %7 = load i16*, i16** %coerce.dive9, align 8
  ret i16* %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPsEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator.518"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.518"* %first, %"class.thrust::zip_iterator.518"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor.523", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.518", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.518", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::unary_transform_functor.523", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.518"* %agg.tmp, %"class.thrust::zip_iterator.518"* dereferenceable(16) %first)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.518"* %agg.tmp2, %"class.thrust::zip_iterator.518"* dereferenceable(16) %last)
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor.523"* %agg.tmp3 to i8*
  %3 = bitcast %"struct.thrust::detail::unary_transform_functor.523"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPsEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator.518"* sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"class.thrust::zip_iterator.518"* %agg.tmp, %"class.thrust::zip_iterator.518"* %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.518"* noalias sret %agg.result, %"class.thrust::tuple.520"* %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.520", align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.520"* %agg.tmp, %"class.thrust::tuple.520"* dereferenceable(16) %t)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator.518"* %agg.result, %"class.thrust::tuple.520"* %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.520"* noalias sret %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t1) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %t1, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple.520"* %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIsLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor.523"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.unittest::random_integer.513", align 1
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor.523"*, align 8
  store %"struct.thrust::detail::unary_transform_functor.523"* %this, %"struct.thrust::detail::unary_transform_functor.523"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor.523"*, %"struct.thrust::detail::unary_transform_functor.523"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor.523", %"struct.thrust::detail::unary_transform_functor.523"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.521"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  store %"struct.thrust::detail::cons.521"* %c, %"struct.thrust::detail::cons.521"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPsEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.521"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.475"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.520"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.518"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.518", %"class.thrust::zip_iterator.518"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.520"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPsEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator.518"* noalias sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"class.thrust::zip_iterator.518"* %first, %"class.thrust::zip_iterator.518"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor.523", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.524", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.525", align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %1 = bitcast %"struct.thrust::detail::wrapped_function.524"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.524"* %wrapped_f, %"struct.thrust::detail::unary_transform_functor.523"* dereferenceable(1) %f)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = bitcast %"class.thrust::zip_iterator.518"* %first to %"class.thrust::iterator_facade.519"*
  %3 = bitcast %"class.thrust::zip_iterator.518"* %last to %"class.thrust::iterator_facade.519"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.519"* dereferenceable(1) %2, %"class.thrust::iterator_facade.519"* dereferenceable(1) %3)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"class.thrust::zip_iterator.518"* %first to %"class.thrust::iterator_facade.519"*
  %call1 = call { i64, i16* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.519"* %4)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.525", %"class.thrust::detail::tuple_of_iterator_references.525"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %coerce.dive, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive2 to { i64, i16* }*
  %6 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %5, i32 0, i32 0
  %7 = extractvalue { i64, i16* } %call1, 0
  store i64 %7, i64* %6, align 8
  %8 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %5, i32 0, i32 1
  %9 = extractvalue { i64, i16* } %call1, 1
  store i16* %9, i16** %8, align 8
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRsNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.524"* %wrapped_f, %"class.thrust::detail::tuple_of_iterator_references.525"* dereferenceable(16) %ref.tmp)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %10 = bitcast %"class.thrust::zip_iterator.518"* %first to %"class.thrust::iterator_facade.519"*
  %call3 = call dereferenceable(16) %"class.thrust::zip_iterator.518"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.519"* %10)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator.518"* %agg.result, %"class.thrust::zip_iterator.518"* dereferenceable(16) %first)
  %11 = bitcast %"struct.thrust::detail::wrapped_function.524"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %11) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.518"* %0, %"class.thrust::zip_iterator.518"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.518"* %this1 to %"class.thrust::iterator_facade.519"*
  %2 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.518"* %2 to %"class.thrust::iterator_facade.519"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.518", %"class.thrust::zip_iterator.518"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator.518", %"class.thrust::zip_iterator.518"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.520"* %m_iterator_tuple, %"class.thrust::tuple.520"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.524"* %this, %"struct.thrust::detail::unary_transform_functor.523"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.524"*, align 8
  %f.addr = alloca %"struct.thrust::detail::unary_transform_functor.523"*, align 8
  store %"struct.thrust::detail::wrapped_function.524"* %this, %"struct.thrust::detail::wrapped_function.524"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::unary_transform_functor.523"* %f, %"struct.thrust::detail::unary_transform_functor.523"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.524"*, %"struct.thrust::detail::wrapped_function.524"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.524", %"struct.thrust::detail::wrapped_function.524"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::unary_transform_functor.523"*, %"struct.thrust::detail::unary_transform_functor.523"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::unary_transform_functor.523"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor.523"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.519"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.519"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.519"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.519"*, align 8
  store %"class.thrust::iterator_facade.519"* %lhs, %"class.thrust::iterator_facade.519"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.519"* %rhs, %"class.thrust::iterator_facade.519"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.519"*, %"class.thrust::iterator_facade.519"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.519"* %0 to %"class.thrust::zip_iterator.518"*
  %2 = load %"class.thrust::iterator_facade.519"*, %"class.thrust::iterator_facade.519"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.519"* %2 to %"class.thrust::zip_iterator.518"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator.518"* dereferenceable(16) %1, %"class.thrust::zip_iterator.518"* dereferenceable(16) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIsLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRsNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.524"* %this, %"class.thrust::detail::tuple_of_iterator_references.525"* dereferenceable(16) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.524"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.525"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.525", align 8
  store %"struct.thrust::detail::wrapped_function.524"* %this, %"struct.thrust::detail::wrapped_function.524"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.525"* %x, %"class.thrust::detail::tuple_of_iterator_references.525"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.524"*, %"struct.thrust::detail::wrapped_function.524"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.524", %"struct.thrust::detail::wrapped_function.524"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.525"*, %"class.thrust::detail::tuple_of_iterator_references.525"** %x.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references.525"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references.525"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.525"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.525"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.525"* %agg.tmp to { i64, i16* }*
  %4 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %3, i32 0, i32 0
  %5 = load i64, i64* %4, align 8
  %6 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %3, i32 0, i32 1
  %7 = load i16*, i16** %6, align 8
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIsLb0EEEEclINS0_28tuple_of_iterator_referencesImRsNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor.523"* %m_f, i64 %5, i16* %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i16* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.519"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.525", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.519"*, align 8
  store %"class.thrust::iterator_facade.519"* %this, %"class.thrust::iterator_facade.519"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.519"*, %"class.thrust::iterator_facade.519"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.518"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.519"* %this1)
  %call2 = call { i64, i16* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator.518"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.525", %"class.thrust::detail::tuple_of_iterator_references.525"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %coerce.dive, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive3 to { i64, i16* }*
  %1 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i16* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i16* } %call2, 1
  store i16* %4, i16** %3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.525", %"class.thrust::detail::tuple_of_iterator_references.525"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %coerce.dive4, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive5 to { i64, i16* }*
  %6 = load { i64, i16* }, { i64, i16* }* %5, align 8
  ret { i64, i16* } %6
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.518"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.519"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.519"*, align 8
  store %"class.thrust::iterator_facade.519"* %this, %"class.thrust::iterator_facade.519"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.519"*, %"class.thrust::iterator_facade.519"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.518"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.519"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator.518"* dereferenceable(16) %call)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.518"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.519"* %this1)
  ret %"class.thrust::zip_iterator.518"* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.518"* %0, %"class.thrust::zip_iterator.518"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.518"* %this1 to %"class.thrust::iterator_facade.519"*
  %2 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.518"* %2 to %"class.thrust::iterator_facade.519"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.518", %"class.thrust::zip_iterator.518"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator.518", %"class.thrust::zip_iterator.518"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple.520"* %m_iterator_tuple, %"class.thrust::tuple.520"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator.518"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.518"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %f1, %"class.thrust::zip_iterator.518"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.518"* %f2, %"class.thrust::zip_iterator.518"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.518"* %0, %"class.thrust::zip_iterator.518"* dereferenceable(16) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.518"* %other, %"class.thrust::zip_iterator.518"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.520"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.518"* %this1)
  %0 = bitcast %"class.thrust::tuple.520"* %call to %"struct.thrust::detail::cons.521"*
  %call2 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.521"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::counting_iterator"* %call2 to %"class.thrust::iterator_facade.84"*
  %2 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %other.addr, align 8
  %call3 = call dereferenceable(16) %"class.thrust::tuple.520"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.518"* %2)
  %3 = bitcast %"class.thrust::tuple.520"* %call3 to %"struct.thrust::detail::cons.521"*
  %call4 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.521"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::counting_iterator"* %call4 to %"class.thrust::iterator_facade.84"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxS3_mS4_S5_mxEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNS6_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.84"* dereferenceable(1) %1, %"class.thrust::iterator_facade.84"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.521"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  store %"struct.thrust::detail::cons.521"* %c, %"struct.thrust::detail::cons.521"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPsEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.521"* dereferenceable(16) %0)
  ret %"class.thrust::counting_iterator"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPsEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.521"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  store %"struct.thrust::detail::cons.521"* %t, %"struct.thrust::detail::cons.521"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %0, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIsLb0EEEEclINS0_28tuple_of_iterator_referencesImRsNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor.523"* %this, i64 %t.coerce0, i16* %t.coerce1) #8 comdat align 2 {
entry:
  %t = alloca %"class.thrust::detail::tuple_of_iterator_references.525", align 8
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor.523"*, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.525"* %t to { i64, i16* }*
  %1 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %0, i32 0, i32 0
  store i64 %t.coerce0, i64* %1, align 8
  %2 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %0, i32 0, i32 1
  store i16* %t.coerce1, i16** %2, align 8
  store %"struct.thrust::detail::unary_transform_functor.523"* %this, %"struct.thrust::detail::unary_transform_functor.523"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor.523"*, %"struct.thrust::detail::unary_transform_functor.523"** %this.addr, align 8
  %f = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor.523", %"struct.thrust::detail::unary_transform_functor.523"* %this1, i32 0, i32 0
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.525"* %t to %"struct.thrust::detail::cons.527"*
  %call = call dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRsNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.527"* dereferenceable(16) %3)
  %4 = load i64, i64* %call, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %call2 = call signext i16 @_ZNK8unittest14random_integerIsLb0EEclEj(%"struct.unittest::random_integer.513"* %f, i32 %conv)
  %5 = bitcast %"class.thrust::detail::tuple_of_iterator_references.525"* %t to %"struct.thrust::detail::cons.527"*
  %call3 = call dereferenceable(2) i16* @_ZN6thrust3getILi1EmNS_6detail4consIRsNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.527"* dereferenceable(16) %5)
  store i16 %call2, i16* %call3, align 2, !tbaa !346
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references.525"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references.525"* dereferenceable(16) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.525"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.525"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.525"* %ref, %"class.thrust::detail::tuple_of_iterator_references.525"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.525"*, %"class.thrust::detail::tuple_of_iterator_references.525"** %ref.addr, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.525"* %0, %"class.thrust::detail::tuple_of_iterator_references.525"** %ref.tmp, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.525"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references.525"** dereferenceable(8) %ref.tmp)
  ret %"class.thrust::detail::tuple_of_iterator_references.525"* %call
}

; Function Attrs: uwtable
define linkonce_odr signext i16 @_ZNK8unittest14random_integerIsLb0EEclEj(%"struct.unittest::random_integer.513"* %this, i32 %i) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::random_integer.513"*, align 8
  %i.addr = alloca i32, align 4
  %rng = alloca %"class.thrust::random::linear_congruential_engine", align 4
  %dist = alloca %"class.thrust::random::uniform_int_distribution.529", align 2
  store %"struct.unittest::random_integer.513"* %this, %"struct.unittest::random_integer.513"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"struct.unittest::random_integer.513"*, %"struct.unittest::random_integer.513"** %this.addr, align 8
  %0 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %i.addr, align 4, !tbaa !11
  %call = call i32 @_ZN8unittest4hashEj(i32 %1)
  call void @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEC2Ej(%"class.thrust::random::linear_congruential_engine"* %rng, i32 %call)
  %2 = bitcast %"class.thrust::random::uniform_int_distribution.529"* %dist to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  call void @_ZN6thrust6random24uniform_int_distributionIsEC2Ess(%"class.thrust::random::uniform_int_distribution.529"* %dist, i16 signext 0, i16 signext 32767)
  %call2 = call signext i16 @_ZN6thrust6random24uniform_int_distributionIsEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEsRT_(%"class.thrust::random::uniform_int_distribution.529"* %dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %rng)
  %3 = bitcast %"class.thrust::random::uniform_int_distribution.529"* %dist to i8*
  call void @llvm.lifetime.end(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.end(i64 4, i8* %4) #5
  ret i16 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRsNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.527"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.527"*, align 8
  store %"struct.thrust::detail::cons.527"* %c, %"struct.thrust::detail::cons.527"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.527"*, %"struct.thrust::detail::cons.527"** %c.addr, align 8
  %call = call dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRsNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.527"* dereferenceable(16) %0)
  ret i64* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust3getILi1EmNS_6detail4consIRsNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.527"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.527"*, align 8
  store %"struct.thrust::detail::cons.527"* %c, %"struct.thrust::detail::cons.527"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.527"*, %"struct.thrust::detail::cons.527"** %c.addr, align 8
  %call = call dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi1EE3getIRsmNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.527"* dereferenceable(16) %0)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6random24uniform_int_distributionIsEC2Ess(%"class.thrust::random::uniform_int_distribution.529"* %this, i16 signext %a, i16 signext %b) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.529"*, align 8
  %a.addr = alloca i16, align 2
  %b.addr = alloca i16, align 2
  store %"class.thrust::random::uniform_int_distribution.529"* %this, %"class.thrust::random::uniform_int_distribution.529"** %this.addr, align 8, !tbaa !1
  store i16 %a, i16* %a.addr, align 2, !tbaa !346
  store i16 %b, i16* %b.addr, align 2, !tbaa !346
  %this1 = load %"class.thrust::random::uniform_int_distribution.529"*, %"class.thrust::random::uniform_int_distribution.529"** %this.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution.529", %"class.thrust::random::uniform_int_distribution.529"* %this1, i32 0, i32 0
  call void @_ZN6thrust4pairIssEC2ERKsS3_(%"struct.thrust::pair.487"* %m_param, i16* dereferenceable(2) %a.addr, i16* dereferenceable(2) %b.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr signext i16 @_ZN6thrust6random24uniform_int_distributionIsEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEsRT_(%"class.thrust::random::uniform_int_distribution.529"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.529"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  store %"class.thrust::random::uniform_int_distribution.529"* %this, %"class.thrust::random::uniform_int_distribution.529"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution.529"*, %"class.thrust::random::uniform_int_distribution.529"** %this.addr, align 8
  %0 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution.529", %"class.thrust::random::uniform_int_distribution.529"* %this1, i32 0, i32 0
  %call = call signext i16 @_ZN6thrust6random24uniform_int_distributionIsEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEsRT_RKNS_4pairIssEE(%"class.thrust::random::uniform_int_distribution.529"* %this1, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %0, %"struct.thrust::pair.487"* dereferenceable(4) %m_param)
  ret i16 %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIssEC2ERKsS3_(%"struct.thrust::pair.487"* %this, i16* dereferenceable(2) %x, i16* dereferenceable(2) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.487"*, align 8
  %x.addr = alloca i16*, align 8
  %y.addr = alloca i16*, align 8
  store %"struct.thrust::pair.487"* %this, %"struct.thrust::pair.487"** %this.addr, align 8, !tbaa !1
  store i16* %x, i16** %x.addr, align 8, !tbaa !7
  store i16* %y, i16** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %x.addr, align 8
  %1 = load i16, i16* %0, align 2, !tbaa !346
  store i16 %1, i16* %first, align 2, !tbaa !348
  %second = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %this1, i32 0, i32 1
  %2 = load i16*, i16** %y.addr, align 8
  %3 = load i16, i16* %2, align 2, !tbaa !346
  store i16 %3, i16* %second, align 2, !tbaa !350
  ret void
}

; Function Attrs: uwtable
define linkonce_odr signext i16 @_ZN6thrust6random24uniform_int_distributionIsEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEsRT_RKNS_4pairIssEE(%"class.thrust::random::uniform_int_distribution.529"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng, %"struct.thrust::pair.487"* dereferenceable(4) %parm) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.529"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  %parm.addr = alloca %"struct.thrust::pair.487"*, align 8
  %real_min = alloca double, align 8
  %real_max = alloca double, align 8
  %real_dist = alloca %"class.thrust::random::uniform_real_distribution", align 8
  store %"class.thrust::random::uniform_int_distribution.529"* %this, %"class.thrust::random::uniform_int_distribution.529"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %parm, %"struct.thrust::pair.487"** %parm.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution.529"*, %"class.thrust::random::uniform_int_distribution.529"** %this.addr, align 8
  %0 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %parm.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %1, i32 0, i32 0
  %2 = load i16, i16* %first, align 2, !tbaa !348
  %conv = sitofp i16 %2 to double
  store double %conv, double* %real_min, align 8, !tbaa !44
  %3 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %parm.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %4, i32 0, i32 1
  %5 = load i16, i16* %second, align 2, !tbaa !350
  %conv2 = sitofp i16 %5 to double
  store double %conv2, double* %real_max, align 8, !tbaa !44
  %6 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.start(i64 16, i8* %6) #5
  %7 = load double, double* %real_min, align 8, !tbaa !44
  %8 = load double, double* %real_max, align 8, !tbaa !44
  %add = fadd double %8, 1.000000e+00
  call void @_ZN6thrust6random25uniform_real_distributionIdEC2Edd(%"class.thrust::random::uniform_real_distribution"* %real_dist, double %7, double %add)
  %9 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %call = call double @_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_(%"class.thrust::random::uniform_real_distribution"* %real_dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %9)
  %conv3 = fptosi double %call to i16
  %10 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.end(i64 16, i8* %10) #5
  %11 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.end(i64 8, i8* %11) #5
  %12 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret i16 %conv3
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRsNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.527"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.527"*, align 8
  store %"struct.thrust::detail::cons.527"* %t, %"struct.thrust::detail::cons.527"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.527"*, %"struct.thrust::detail::cons.527"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.527", %"struct.thrust::detail::cons.527"* %0, i32 0, i32 0
  ret i64* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi1EE3getIRsmNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.527"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.527"*, align 8
  store %"struct.thrust::detail::cons.527"* %t, %"struct.thrust::detail::cons.527"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.527"*, %"struct.thrust::detail::cons.527"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.527", %"struct.thrust::detail::cons.527"* %0, i32 0, i32 1
  %call = call dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.528"* dereferenceable(8) %tail)
  ret i16* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.528"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.528"*, align 8
  store %"struct.thrust::detail::cons.528"* %t, %"struct.thrust::detail::cons.528"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.528"*, %"struct.thrust::detail::cons.528"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.528", %"struct.thrust::detail::cons.528"* %0, i32 0, i32 0
  %ref = load i16*, i16** %head, align 8, !tbaa !7
  ret i16* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.525"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references.525"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.525"**, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.525"** %ptr, %"class.thrust::detail::tuple_of_iterator_references.525"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.525"**, %"class.thrust::detail::tuple_of_iterator_references.525"*** %ptr.addr, align 8
  %1 = load %"class.thrust::detail::tuple_of_iterator_references.525"*, %"class.thrust::detail::tuple_of_iterator_references.525"** %0, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.525"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references.525"* %1)
  ret %"class.thrust::detail::tuple_of_iterator_references.525"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.525"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRsNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references.525"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.525"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.525"* %ptr, %"class.thrust::detail::tuple_of_iterator_references.525"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.525"*, %"class.thrust::detail::tuple_of_iterator_references.525"** %ptr.addr, align 8, !tbaa !1
  ret %"class.thrust::detail::tuple_of_iterator_references.525"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i16* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator.518"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.525", align 8
  %f.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %f, %"class.thrust::zip_iterator.518"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %f.addr, align 8
  %call = call { i64, i16* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator.518"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.525", %"class.thrust::detail::tuple_of_iterator_references.525"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %coerce.dive, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive1 to { i64, i16* }*
  %2 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i16* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i16* } %call, 1
  store i16* %5, i16** %4, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.525", %"class.thrust::detail::tuple_of_iterator_references.525"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %coerce.dive2, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive3 to { i64, i16* }*
  %7 = load { i64, i16* }, { i64, i16* }* %6, align 8
  ret { i64, i16* } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.518"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.519"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.519"*, align 8
  store %"class.thrust::iterator_facade.519"* %this, %"class.thrust::iterator_facade.519"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.519"*, %"class.thrust::iterator_facade.519"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.519"* %this1 to %"class.thrust::zip_iterator.518"*
  ret %"class.thrust::zip_iterator.518"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i16* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator.518"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.525", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.526", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.520"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.518"* %this1)
  %call2 = call { i64, i16* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple.520"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %ref.tmp, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive to { i64, i16* }*
  %1 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i16* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i16* } %call2, 1
  store i16* %4, i16** %3, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesImRsNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references.525"* %retval, %"class.thrust::tuple.526"* dereferenceable(16) %ref.tmp)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.525", %"class.thrust::detail::tuple_of_iterator_references.525"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %coerce.dive3, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive4 to { i64, i16* }*
  %6 = load { i64, i16* }, { i64, i16* }* %5, align 8
  ret { i64, i16* } %6
}

; Function Attrs: uwtable
define linkonce_odr { i64, i16* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple.520"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.526", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.520"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.520"* %t, %"class.thrust::tuple.520"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %t.addr, align 8
  %call = call { i64, i16* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple.520"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive to { i64, i16* }*
  %2 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i16* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i16* }, { i64, i16* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i16* } %call, 1
  store i16* %5, i16** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive1 to { i64, i16* }*
  %7 = load { i64, i16* }, { i64, i16* }* %6, align 8
  ret { i64, i16* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesImRsNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references.525"* %this, %"class.thrust::tuple.526"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.525"*, align 8
  %other.addr = alloca %"class.thrust::tuple.526"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.525"* %this, %"class.thrust::detail::tuple_of_iterator_references.525"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.526"* %other, %"class.thrust::tuple.526"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.525"*, %"class.thrust::detail::tuple_of_iterator_references.525"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.525"* %this1 to %"class.thrust::tuple.526"*
  %1 = load %"class.thrust::tuple.526"*, %"class.thrust::tuple.526"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.526"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.526"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i16* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple.520"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.526", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.520"*, align 8
  %ref.tmp = alloca i64, align 8
  store %"class.thrust::tuple.520"* %t, %"class.thrust::tuple.520"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.520"* %0 to %"struct.thrust::detail::cons.521"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.521"* dereferenceable(16) %1)
  %call1 = call i64 @_ZN6thrust6detail20dereference_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  store i64 %call1, i64* %ref.tmp, align 8, !tbaa !13
  %2 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.520"* %2 to %"struct.thrust::detail::cons.521"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPsEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.521"* dereferenceable(16) %3)
  %call3 = call dereferenceable(2) i16* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPsEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call2)
  call void @_ZN6thrust5tupleImRsNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.526"* %retval, i64* dereferenceable(8) %ref.tmp, i16* dereferenceable(2) %call3)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.526", %"class.thrust::tuple.526"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.527"* %coerce.dive to { i64, i16* }*
  %5 = load { i64, i16* }, { i64, i16* }* %4, align 8
  ret { i64, i16* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPsEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.475"* %it, %"class.thrust::detail::normal_iterator.475"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to %"class.thrust::iterator_facade.477"*
  %call = call dereferenceable(2) i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEdeEv(%"class.thrust::iterator_facade.477"* %1)
  ret i16* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleImRsNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.526"* %this, i64* dereferenceable(8) %t0, i16* dereferenceable(2) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.526"*, align 8
  %t0.addr = alloca i64*, align 8
  %t1.addr = alloca i16*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.526"* %this, %"class.thrust::tuple.526"** %this.addr, align 8, !tbaa !1
  store i64* %t0, i64** %t0.addr, align 8, !tbaa !7
  store i16* %t1, i16** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.526"*, %"class.thrust::tuple.526"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.526"* %this1 to %"struct.thrust::detail::cons.527"*
  %1 = load i64*, i64** %t0.addr, align 8
  %2 = load i16*, i16** %t1.addr, align 8
  call void @_ZN6thrust6detail4consImNS1_IRsNS_9null_typeEEEEC2IKmsKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.527"* %0, i64* dereferenceable(8) %1, i16* dereferenceable(2) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEdeEv(%"class.thrust::iterator_facade.477"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  store %"class.thrust::iterator_facade.477"* %this, %"class.thrust::iterator_facade.477"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv(%"class.thrust::iterator_facade.477"* %this1)
  %call2 = call dereferenceable(2) i16* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPsEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call)
  ret i16* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPsEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  store %"class.thrust::detail::normal_iterator.475"* %f, %"class.thrust::detail::normal_iterator.475"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to %"class.thrust::iterator_adaptor.476"*
  %call = call dereferenceable(2) i16* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor.476"* %1)
  ret i16* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv(%"class.thrust::iterator_facade.477"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  store %"class.thrust::iterator_facade.477"* %this, %"class.thrust::iterator_facade.477"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.477"* %this1 to %"class.thrust::detail::normal_iterator.475"*
  ret %"class.thrust::detail::normal_iterator.475"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(2) i16* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor.476"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  store %"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %m_iterator, align 8, !tbaa !357
  ret i16* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consImNS1_IRsNS_9null_typeEEEEC2IKmsKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.527"* %this, i64* dereferenceable(8) %t1, i16* dereferenceable(2) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.527"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca i16*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.527"* %this, %"struct.thrust::detail::cons.527"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store i16* %t2, i16** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.527"*, %"struct.thrust::detail::cons.527"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.527", %"struct.thrust::detail::cons.527"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !362
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.527", %"struct.thrust::detail::cons.527"* %this1, i32 0, i32 1
  %2 = load i16*, i16** %t2.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRsNS_9null_typeEEC2IsEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.528"* %tail, i16* dereferenceable(2) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRsNS_9null_typeEEC2IsEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.528"* %this, i16* dereferenceable(2) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.528"*, align 8
  %t1.addr = alloca i16*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.528"* %this, %"struct.thrust::detail::cons.528"** %this.addr, align 8, !tbaa !1
  store i16* %t1, i16** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.528"*, %"struct.thrust::detail::cons.528"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.528", %"struct.thrust::detail::cons.528"* %this9, i32 0, i32 0
  %9 = load i16*, i16** %t1.addr, align 8
  store i16* %9, i16** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPsEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator.518"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %f, %"class.thrust::zip_iterator.518"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator.518"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.518"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImsSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRsSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.519"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.519"*, align 8
  store %"class.thrust::iterator_facade.519"* %this, %"class.thrust::iterator_facade.519"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.519"*, %"class.thrust::iterator_facade.519"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.519"* %this1 to %"class.thrust::zip_iterator.518"*
  ret %"class.thrust::zip_iterator.518"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator.518"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.518", %"class.thrust::zip_iterator.518"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple.520"* dereferenceable(16) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPsEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple.520"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.520"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.520"* %t, %"class.thrust::tuple.520"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.520"* %0 to %"struct.thrust::detail::cons.521"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.521"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.520"* %2 to %"struct.thrust::detail::cons.521"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.522"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.521"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPsEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.522"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.521"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  store %"struct.thrust::detail::cons.521"* %this, %"struct.thrust::detail::cons.521"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %this1, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPsEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.522"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.522"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.522"* %t, %"struct.thrust::detail::cons.522"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.522"*, %"struct.thrust::detail::cons.522"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.522"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPsEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.522"*, %"struct.thrust::detail::cons.522"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.522"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.522"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.521"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  store %"struct.thrust::detail::cons.521"* %this, %"struct.thrust::detail::cons.521"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.522"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPsEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.475"* %it, %"class.thrust::detail::normal_iterator.475"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to %"class.thrust::iterator_facade.477"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEppEv(%"class.thrust::iterator_facade.477"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.522"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.522"*, align 8
  store %"struct.thrust::detail::cons.522"* %this, %"struct.thrust::detail::cons.522"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.522"*, %"struct.thrust::detail::cons.522"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.522", %"struct.thrust::detail::cons.522"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.475"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.522"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.522"*, align 8
  store %"struct.thrust::detail::cons.522"* %this, %"struct.thrust::detail::cons.522"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.522"*, %"struct.thrust::detail::cons.522"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEppEv(%"class.thrust::iterator_facade.477"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  store %"class.thrust::iterator_facade.477"* %this, %"class.thrust::iterator_facade.477"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv(%"class.thrust::iterator_facade.477"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPsEEEEvRT_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv(%"class.thrust::iterator_facade.477"* %this1)
  ret %"class.thrust::detail::normal_iterator.475"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPsEEEEvRT_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  store %"class.thrust::detail::normal_iterator.475"* %f, %"class.thrust::detail::normal_iterator.475"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to %"class.thrust::iterator_adaptor.476"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor.476"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv(%"class.thrust::iterator_facade.477"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  store %"class.thrust::iterator_facade.477"* %this, %"class.thrust::iterator_facade.477"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.477"* %this1 to %"class.thrust::detail::normal_iterator.475"*
  ret %"class.thrust::detail::normal_iterator.475"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor.476"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  store %"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %m_iterator, align 8, !tbaa !357
  %incdec.ptr = getelementptr inbounds i16, i16* %0, i32 1
  store i16* %incdec.ptr, i16** %m_iterator, align 8, !tbaa !357
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple.520"* %this, %"class.thrust::tuple.520"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.520"*, align 8
  %.addr = alloca %"class.thrust::tuple.520"*, align 8
  store %"class.thrust::tuple.520"* %this, %"class.thrust::tuple.520"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.520"* %0, %"class.thrust::tuple.520"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple.520"* %this1 to %"struct.thrust::detail::cons.521"*
  %2 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple.520"* %2 to %"struct.thrust::detail::cons.521"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.521"* %1, %"struct.thrust::detail::cons.521"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.521"* %this, %"struct.thrust::detail::cons.521"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  %.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  store %"struct.thrust::detail::cons.521"* %this, %"struct.thrust::detail::cons.521"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::cons.521"* %0, %"struct.thrust::detail::cons.521"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %.addr, align 8
  %head2 = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %1, i32 0, i32 0
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %head2)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %.addr, align 8
  %tail3 = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %2, i32 0, i32 1
  %3 = bitcast %"struct.thrust::detail::cons.522"* %tail to i8*
  %4 = bitcast %"struct.thrust::detail::cons.522"* %tail3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.520"* %this, %"class.thrust::tuple.520"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.520"*, align 8
  %.addr = alloca %"class.thrust::tuple.520"*, align 8
  store %"class.thrust::tuple.520"* %this, %"class.thrust::tuple.520"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.520"* %0, %"class.thrust::tuple.520"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple.520"* %this1 to %"struct.thrust::detail::cons.521"*
  %2 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple.520"* %2 to %"struct.thrust::detail::cons.521"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.521"* %1, %"struct.thrust::detail::cons.521"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPsEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator.518"* %this, %"class.thrust::tuple.520"* %iterator_tuple) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.518"*, align 8
  store %"class.thrust::zip_iterator.518"* %this, %"class.thrust::zip_iterator.518"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.518"*, %"class.thrust::zip_iterator.518"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.518"* %this1 to %"class.thrust::iterator_facade.519"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.518", %"class.thrust::zip_iterator.518"* %this1, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.520"* %m_iterator_tuple, %"class.thrust::tuple.520"* dereferenceable(16) %iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPsEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple.520"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.520"*, align 8
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.520"* %this, %"class.thrust::tuple.520"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %t1, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.520"*, %"class.thrust::tuple.520"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.520"* %this1 to %"struct.thrust::detail::cons.521"*
  %1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.521"* %0, %"class.thrust::counting_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPsEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.521"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  %t1.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.521"* %this, %"struct.thrust::detail::cons.521"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t1, %"class.thrust::counting_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %t2, %"class.thrust::detail::normal_iterator.475"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t1.addr, align 8
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %0)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.522"* %tail, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.522"* %this, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.522"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.522"* %this, %"struct.thrust::detail::cons.522"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.475"* %t1, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.522"*, %"struct.thrust::detail::cons.522"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.522", %"struct.thrust::detail::cons.522"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.475"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.475"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPsEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.521"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.521"*, align 8
  store %"struct.thrust::detail::cons.521"* %t, %"struct.thrust::detail::cons.521"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.521"*, %"struct.thrust::detail::cons.521"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.521", %"struct.thrust::detail::cons.521"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.522"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.475"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.522"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.522"*, align 8
  store %"struct.thrust::detail::cons.522"* %t, %"struct.thrust::detail::cons.522"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.522"*, %"struct.thrust::detail::cons.522"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.522", %"struct.thrust::detail::cons.522"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.475"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEC2Em(%"class.thrust::detail::vector_base.479"* %this, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.std::allocator.481", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  call void @_ZNSaIN6thrust4pairIssEEEC2Ev(%"class.std::allocator.481"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EEC2ERKS4_(%"class.thrust::detail::contiguous_storage.480"* %m_storage, %"class.std::allocator.481"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.482"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEED2Ev to void (%"class.std::allocator.481"*)*)(%"class.std::allocator.481"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !365
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE12default_initEm(%"class.thrust::detail::vector_base.479"* %this1, i64 %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.482"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEED2Ev to void (%"class.std::allocator.481"*)*)(%"class.std::allocator.481"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.480"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIN6thrust4pairIssEEEC2Ev(%"class.std::allocator.481"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.481"*, align 8
  store %"class.std::allocator.481"* %this, %"class.std::allocator.481"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.481"* %this1 to %"class.__gnu_cxx::new_allocator.482"*
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEEC2Ev(%"class.__gnu_cxx::new_allocator.482"* %0) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EEC2ERKS4_(%"class.thrust::detail::contiguous_storage.480"* %this, %"class.std::allocator.481"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  %alloc.addr = alloca %"class.std::allocator.481"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.481"* %alloc, %"class.std::allocator.481"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %alloc.addr, align 8
  call void @_ZNSaIN6thrust4pairIssEEEC2ERKS2_(%"class.std::allocator.481"* %m_allocator, %"class.std::allocator.481"* dereferenceable(1) %0) #5
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIssEEEC2ES4_(%"class.thrust::detail::normal_iterator.484"* %m_begin, %"struct.thrust::pair.487"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !370
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.482"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEED2Ev to void (%"class.std::allocator.481"*)*)(%"class.std::allocator.481"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEED2Ev(%"class.__gnu_cxx::new_allocator.482"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  store %"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.482"*, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE12default_initEm(%"class.thrust::detail::vector_base.479"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.484", align 8
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE8allocateEm(%"class.thrust::detail::contiguous_storage.480"* %m_storage, i64 %1)
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 1
  store i64 %2, i64* %m_size, align 8, !tbaa !365
  %m_storage2 = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %call4 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.479"* %this1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive5, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm(%"class.thrust::detail::contiguous_storage.480"* %m_storage2, %"struct.thrust::pair.487"* %3, i64 %call4)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.480"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE10deallocateEv(%"class.thrust::detail::contiguous_storage.480"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.482"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEED2Ev to void (%"class.std::allocator.481"*)*)(%"class.std::allocator.481"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.482"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEED2Ev to void (%"class.std::allocator.481"*)*)(%"class.std::allocator.481"* %m_allocator2) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEEC2Ev(%"class.__gnu_cxx::new_allocator.482"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  store %"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.482"*, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIN6thrust4pairIssEEEC2ERKS2_(%"class.std::allocator.481"* %this, %"class.std::allocator.481"* dereferenceable(1) %__a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.481"*, align 8
  %__a.addr = alloca %"class.std::allocator.481"*, align 8
  store %"class.std::allocator.481"* %this, %"class.std::allocator.481"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.481"* %__a, %"class.std::allocator.481"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.481"* %this1 to %"class.__gnu_cxx::new_allocator.482"*
  %1 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator.481"* %1 to %"class.__gnu_cxx::new_allocator.482"*
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEEC2ERKS4_(%"class.__gnu_cxx::new_allocator.482"* %0, %"class.__gnu_cxx::new_allocator.482"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIssEEEC2ES4_(%"class.thrust::detail::normal_iterator.484"* %this, %"struct.thrust::pair.487"* %p) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::detail::normal_iterator.484"* %this, %"class.thrust::detail::normal_iterator.484"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.484"* %this1 to %"class.thrust::iterator_adaptor.485"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_(%"class.thrust::iterator_adaptor.485"* %0, %"struct.thrust::pair.487"** dereferenceable(8) %p.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEEC2ERKS4_(%"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  store %"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator.482"* %0, %"class.__gnu_cxx::new_allocator.482"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator.482"*, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_(%"class.thrust::iterator_adaptor.485"* %this, %"struct.thrust::pair.487"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.485"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"class.thrust::iterator_adaptor.485"* %this, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"** %iter, %"struct.thrust::pair.487"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.485"*, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.485"* %this1 to %"class.thrust::iterator_facade.486"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !371
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE8allocateEm(%"class.thrust::detail::contiguous_storage.480"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %ref.tmp3 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE8allocateERS4_m(%"class.std::allocator.481"* dereferenceable(1) %m_allocator, i64 %1)
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIssEEEC2ES4_(%"class.thrust::detail::normal_iterator.484"* %ref.tmp, %"struct.thrust::pair.487"* %call)
  %2 = bitcast %"class.thrust::detail::normal_iterator.484"* %m_begin to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.484"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 2
  store i64 %4, i64* %m_size, align 8, !tbaa !370
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIssEEEC2ES4_(%"class.thrust::detail::normal_iterator.484"* %ref.tmp3, %"struct.thrust::pair.487"* null)
  %5 = bitcast %"class.thrust::detail::normal_iterator.484"* %m_begin2 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.484"* %ref.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size4, align 8, !tbaa !370
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm(%"class.thrust::detail::contiguous_storage.480"* %this, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  %n.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this2, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.484"* %first to %"class.thrust::iterator_adaptor.485"*
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.485"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23default_construct_rangeISaINS_4pairIssEEEPS3_mEEvRT_T0_T1_(%"class.std::allocator.481"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.487"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.479"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !365
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE8allocateERS4_m(%"class.std::allocator.481"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m(%"class.std::allocator.481"* dereferenceable(1) %0, i64 %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m(%"class.std::allocator.481"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.481"* %0 to %"class.__gnu_cxx::new_allocator.482"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.482"* %1, i64 %2, i8* null)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.482"* %this, i64 %__n, i8*) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  %__n.addr = alloca i64, align 8
  %.addr = alloca i8*, align 8
  store %"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.482"*, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8
  %1 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.482"* %this1) #5
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZSt17__throw_bad_allocv() #15
  unreachable

if.end:                                           ; preds = %entry
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %mul = mul i64 %2, 4
  %call2 = call i8* @_Znwm(i64 %mul)
  %3 = bitcast i8* %call2 to %"struct.thrust::pair.487"*
  ret %"struct.thrust::pair.487"* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.482"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  store %"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.482"*, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8
  ret i64 4611686018427387903
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23default_construct_rangeISaINS_4pairIssEEEPS3_mEEvRT_T0_T1_(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIssEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_(%"class.std::allocator.481"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.485"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.485"*, align 8
  store %"class.thrust::iterator_adaptor.485"* %this, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.485"*, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.487"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIssEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaINS_4pairIssEEEE3getERS4_(%"class.std::allocator.481"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEC2ERS5_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %agg.tmp, %"class.std::allocator.481"* dereferenceable(1) %4)
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %agg.tmp, i32 0, i32 0
  %5 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %coerce.dive, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIssEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %2, i64 %3, %"class.std::allocator.481"* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIssEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first, i64 %n, %"class.std::allocator.481"* %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %f, i32 0, i32 0
  store %"class.std::allocator.481"* %f.coerce, %"class.std::allocator.481"** %coerce.dive, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !62
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %agg.tmp, i32 0, i32 0
  %6 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %coerce.dive2, align 8
  %call3 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIssEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %2, i64 %3, %"class.std::allocator.481"* %6)
  ret %"struct.thrust::pair.487"* %call3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemISaINS_4pairIssEEEE3getERS4_(%"class.std::allocator.481"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIssEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_(%"class.std::allocator.481"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEC2ERS5_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %this, %"class.std::allocator.481"* dereferenceable(1) %a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"*, align 8
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"** %this.addr, align 8
  %a2 = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  store %"class.std::allocator.481"* %0, %"class.std::allocator.481"** %a2, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIssEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.487"* %first, i64 %n, %"class.std::allocator.481"* %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.531", align 8
  %i = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %f, i32 0, i32 0
  store %"class.std::allocator.481"* %f.coerce, %"class.std::allocator.481"** %coerce.dive, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.531"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.531"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* dereferenceable(8) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEEvEclIS5_EEvRT_(%"struct.thrust::detail::wrapped_function.531"* %wrapped_f, %"struct.thrust::pair.487"* dereferenceable(4) %6)
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %7, i32 1
  store %"struct.thrust::pair.487"* %incdec.ptr, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.531"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 8, i8* %10) #5
  ret %"struct.thrust::pair.487"* %9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.531"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* dereferenceable(8) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.531"*, align 8
  %f.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"*, align 8
  store %"struct.thrust::detail::wrapped_function.531"* %this, %"struct.thrust::detail::wrapped_function.531"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %f, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.531"*, %"struct.thrust::detail::wrapped_function.531"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.531", %"struct.thrust::detail::wrapped_function.531"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false), !tbaa.struct !62
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEEvEclIS5_EEvRT_(%"struct.thrust::detail::wrapped_function.531"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.531"*, align 8
  %x.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::detail::wrapped_function.531"* %this, %"struct.thrust::detail::wrapped_function.531"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %x, %"struct.thrust::pair.487"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.531"*, %"struct.thrust::detail::wrapped_function.531"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.531", %"struct.thrust::detail::wrapped_function.531"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_4pairIssEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair.487"* dereferenceable(4) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEclIS4_EEvRT_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %m_f, %"struct.thrust::pair.487"* dereferenceable(4) %call)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIssEEEEclIS4_EEvRT_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"*, align 8
  %x.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %x, %"struct.thrust::pair.487"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"** %this.addr, align 8
  %a = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.530"* %this1, i32 0, i32 0
  %ref = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  call void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE9constructIS3_EEvRS4_PT_(%"class.std::allocator.481"* dereferenceable(1) %ref, %"struct.thrust::pair.487"* %0)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_4pairIssEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair.487"* dereferenceable(4) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::pair.487"* %ref, %"struct.thrust::pair.487"** %ref.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %ref.addr, align 8
  store %"struct.thrust::pair.487"* %0, %"struct.thrust::pair.487"** %ref.tmp, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castIPNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_(%"struct.thrust::pair.487"** dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE9constructIS3_EEvRS4_PT_(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  call void @_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIssEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_(%"class.std::allocator.481"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIssEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p) #8 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.481"* %0 to %"class.__gnu_cxx::new_allocator.482"*
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE9constructIS3_JEEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.482"* %1, %"struct.thrust::pair.487"* %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE9constructIS3_JEEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.482"* %this, %"struct.thrust::pair.487"* %__p) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  %__p.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %__p, %"struct.thrust::pair.487"** %__p.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.482"*, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %__p.addr, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::pair.487"* %0 to i8*
  %2 = bitcast i8* %1 to %"struct.thrust::pair.487"*
  call void @_ZN6thrust4pairIssEC2Ev(%"struct.thrust::pair.487"* %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIssEC2Ev(%"struct.thrust::pair.487"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::pair.487"* %this, %"struct.thrust::pair.487"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %this1, i32 0, i32 0
  store i16 0, i16* %first, align 2, !tbaa !348
  %second = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %this1, i32 0, i32 1
  store i16 0, i16* %second, align 2, !tbaa !350
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castIPNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_(%"struct.thrust::pair.487"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"struct.thrust::pair.487"** %ptr, %"struct.thrust::pair.487"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %ptr.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %0, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsIPNS_4pairIssEEE3getES4_(%"struct.thrust::pair.487"* %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsIPNS_4pairIssEEE3getES4_(%"struct.thrust::pair.487"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::pair.487"* %ptr, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIssEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_(%"class.std::allocator.481"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE10deallocateEv(%"class.thrust::detail::contiguous_storage.480"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.484", align 8
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.480"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.484"* %m_begin to %"class.thrust::iterator_adaptor.485"*
  %call2 = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.485"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call2, align 8, !tbaa !1
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.480"* %this1)
  call void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE10deallocateERS4_PS3_m(%"class.std::allocator.481"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.487"* %1, i64 %call3)
  %m_begin4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIssEEEC2ES4_(%"class.thrust::detail::normal_iterator.484"* %ref.tmp, %"struct.thrust::pair.487"* null)
  %2 = bitcast %"class.thrust::detail::normal_iterator.484"* %m_begin4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.484"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !370
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.480"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !370
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE10deallocateERS4_PS3_m(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m(%"class.std::allocator.481"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIssEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.481"* %0 to %"class.__gnu_cxx::new_allocator.482"*
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE10deallocateEPS3_m(%"class.__gnu_cxx::new_allocator.482"* %1, %"struct.thrust::pair.487"* %2, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIssEEE10deallocateEPS3_m(%"class.__gnu_cxx::new_allocator.482"* %this, %"struct.thrust::pair.487"* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.482"*, align 8
  %__p.addr = alloca %"struct.thrust::pair.487"*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.482"* %this, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %__p, %"struct.thrust::pair.487"** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.482"*, %"class.__gnu_cxx::new_allocator.482"** %this.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %__p.addr, align 8, !tbaa !1
  %2 = bitcast %"struct.thrust::pair.487"* %1 to i8*
  call void @_ZdlPv(i8* %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPsEES8_NS6_IPNS_4pairIssEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i16* %first1.coerce, i16* %last1.coerce, i16* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp12 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive2, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive4, i32 0, i32 0
  store i16* %first2.coerce, i16** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call8 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call8 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp9 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.475"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp10 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.475"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.484"* %agg.tmp11 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive13, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp9, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive15, i32 0, i32 0
  %11 = load i16*, i16** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp10, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive17, i32 0, i32 0
  %12 = load i16*, i16** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp11, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive19, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive20, align 8
  %call21 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPsEESA_NS8_IPNS_4pairIssEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i16* %10, i16* %11, i16* %12, %"struct.thrust::pair.487"* %13)
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call21, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive24, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  ret %"struct.thrust::pair.487"* %14
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPsEESA_NS8_IPNS_4pairIssEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i16* %first1.coerce, i16* %last1.coerce, i16* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.532", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.532", align 8
  %agg.tmp8 = alloca %"class.thrust::tuple.534", align 8
  %agg.tmp9 = alloca %"class.thrust::zip_iterator.532", align 8
  %agg.tmp10 = alloca %"class.thrust::tuple.534", align 8
  %agg.tmp11 = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %agg.tmp12 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive2, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive4, i32 0, i32 0
  store i16* %first2.coerce, i16** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.532"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.534"* sret %agg.tmp8, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.532"* sret %agg.tmp, %"class.thrust::tuple.534"* byval align 8 %agg.tmp8)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.534"* sret %agg.tmp10, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.532"* sret %agg.tmp9, %"class.thrust::tuple.534"* byval align 8 %agg.tmp10)
  call void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEC2ES2_(%"struct.thrust::detail::binary_transform_functor"* %agg.tmp11)
  call void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEESA_NS8_IPNS_4pairIssEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_(%"class.thrust::zip_iterator.532"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, %"class.thrust::zip_iterator.532"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.532"* byval align 8 %agg.tmp9)
  %call = call dereferenceable(24) %"class.thrust::tuple.534"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.532"* %zipped_result)
  %3 = bitcast %"class.thrust::tuple.534"* %call to %"struct.thrust::detail::cons.535"*
  %call13 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.484"* %retval to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.484"* %call13 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.532"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %6) #5
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive14, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  ret %"struct.thrust::pair.487"* %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEESA_NS8_IPNS_4pairIssEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_(%"class.thrust::zip_iterator.532"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.532"* byval align 8 %first, %"class.thrust::zip_iterator.532"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.532", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.532", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::zip_iterator.532"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::zip_iterator.532"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %4 = bitcast %"class.thrust::zip_iterator.532"* %agg.tmp2 to i8*
  %5 = bitcast %"class.thrust::zip_iterator.532"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor"* %agg.tmp3 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEESC_NSA_IPNS_4pairIssEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_(%"class.thrust::zip_iterator.532"* sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"class.thrust::zip_iterator.532"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.532"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.532"* noalias sret %agg.result, %"class.thrust::tuple.534"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.534", align 8
  %0 = bitcast %"class.thrust::tuple.534"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.534"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_(%"class.thrust::zip_iterator.532"* %agg.result, %"class.thrust::tuple.534"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.534"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  store %"class.thrust::detail::normal_iterator.475"* %t0, %"class.thrust::detail::normal_iterator.475"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %t1, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.484"* %t2, %"class.thrust::detail::normal_iterator.484"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_(%"class.thrust::tuple.534"* %agg.result, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %c, %"struct.thrust::detail::cons.535"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEENS4_IPsEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.535"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.484"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.534"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.532"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  store %"class.thrust::zip_iterator.532"* %this, %"class.thrust::zip_iterator.532"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.532", %"class.thrust::zip_iterator.532"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.534"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEESC_NSA_IPNS_4pairIssEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_(%"class.thrust::zip_iterator.532"* noalias sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"class.thrust::zip_iterator.532"* byval align 8 %first, %"class.thrust::zip_iterator.532"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.106", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.538", align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %1 = bitcast %"struct.thrust::detail::wrapped_function.106"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEC2ERKS4_(%"struct.thrust::detail::wrapped_function.106"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor"* dereferenceable(1) %f)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = bitcast %"class.thrust::zip_iterator.532"* %first to %"class.thrust::iterator_facade.533"*
  %3 = bitcast %"class.thrust::zip_iterator.532"* %last to %"class.thrust::iterator_facade.533"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.533"* dereferenceable(1) %2, %"class.thrust::iterator_facade.533"* dereferenceable(1) %3)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"class.thrust::zip_iterator.532"* %first to %"class.thrust::iterator_facade.533"*
  call void @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv(%"class.thrust::detail::tuple_of_iterator_references.538"* sret %ref.tmp, %"class.thrust::iterator_facade.533"* %4)
  call void @_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRsS8_RNS_4pairIssEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.106"* %wrapped_f, %"class.thrust::detail::tuple_of_iterator_references.538"* dereferenceable(24) %ref.tmp)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %5 = bitcast %"class.thrust::zip_iterator.532"* %first to %"class.thrust::iterator_facade.533"*
  %call1 = call dereferenceable(24) %"class.thrust::zip_iterator.532"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv(%"class.thrust::iterator_facade.533"* %5)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %6 = bitcast %"class.thrust::zip_iterator.532"* %agg.result to i8*
  %7 = bitcast %"class.thrust::zip_iterator.532"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 24, i32 8, i1 false)
  %8 = bitcast %"struct.thrust::detail::wrapped_function.106"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %8) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.533"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.533"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.533"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.533"*, align 8
  store %"class.thrust::iterator_facade.533"* %lhs, %"class.thrust::iterator_facade.533"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.533"* %rhs, %"class.thrust::iterator_facade.533"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.533"*, %"class.thrust::iterator_facade.533"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.533"* %0 to %"class.thrust::zip_iterator.532"*
  %2 = load %"class.thrust::iterator_facade.533"*, %"class.thrust::iterator_facade.533"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.533"* %2 to %"class.thrust::zip_iterator.532"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_(%"class.thrust::zip_iterator.532"* dereferenceable(24) %1, %"class.thrust::zip_iterator.532"* dereferenceable(24) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRsS8_RNS_4pairIssEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.106"* %this, %"class.thrust::detail::tuple_of_iterator_references.538"* dereferenceable(24) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.106"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.538"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.538", align 8
  store %"struct.thrust::detail::wrapped_function.106"* %this, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.538"* %x, %"class.thrust::detail::tuple_of_iterator_references.538"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.106"*, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.106", %"struct.thrust::detail::wrapped_function.106"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.538"*, %"class.thrust::detail::tuple_of_iterator_references.538"** %x.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::detail::tuple_of_iterator_references.538"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_(%"class.thrust::detail::tuple_of_iterator_references.538"* dereferenceable(24) %0)
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.538"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.538"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  call void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRsS6_RNS_4pairIssEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_(%"struct.thrust::detail::binary_transform_functor"* %m_f, %"class.thrust::detail::tuple_of_iterator_references.538"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv(%"class.thrust::detail::tuple_of_iterator_references.538"* noalias sret %agg.result, %"class.thrust::iterator_facade.533"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.533"*, align 8
  store %"class.thrust::iterator_facade.533"* %this, %"class.thrust::iterator_facade.533"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.533"*, %"class.thrust::iterator_facade.533"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.532"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.533"* %this1)
  call void @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_(%"class.thrust::detail::tuple_of_iterator_references.538"* sret %agg.result, %"class.thrust::zip_iterator.532"* dereferenceable(24) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.532"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv(%"class.thrust::iterator_facade.533"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.533"*, align 8
  store %"class.thrust::iterator_facade.533"* %this, %"class.thrust::iterator_facade.533"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.533"*, %"class.thrust::iterator_facade.533"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.532"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.533"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_(%"class.thrust::zip_iterator.532"* dereferenceable(24) %call)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.532"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.533"* %this1)
  ret %"class.thrust::zip_iterator.532"* %call2
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_(%"class.thrust::zip_iterator.532"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.532"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  store %"class.thrust::zip_iterator.532"* %f1, %"class.thrust::zip_iterator.532"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.532"* %f2, %"class.thrust::zip_iterator.532"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.532"* %0, %"class.thrust::zip_iterator.532"* dereferenceable(24) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.532"* %this, %"class.thrust::zip_iterator.532"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  store %"class.thrust::zip_iterator.532"* %this, %"class.thrust::zip_iterator.532"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.532"* %other, %"class.thrust::zip_iterator.532"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.534"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.532"* %this1)
  %0 = bitcast %"class.thrust::tuple.534"* %call to %"struct.thrust::detail::cons.535"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %0)
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %call2 to %"class.thrust::iterator_facade.477"*
  %2 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %other.addr, align 8
  %call3 = call dereferenceable(24) %"class.thrust::tuple.534"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.532"* %2)
  %3 = bitcast %"class.thrust::tuple.534"* %call3 to %"struct.thrust::detail::cons.535"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.475"* %call4 to %"class.thrust::iterator_facade.477"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.477"* dereferenceable(1) %1, %"class.thrust::iterator_facade.477"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.477"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.477"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  store %"class.thrust::iterator_facade.477"* %lhs, %"class.thrust::iterator_facade.477"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.477"* %rhs, %"class.thrust::iterator_facade.477"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.477"* %0 to %"class.thrust::detail::normal_iterator.475"*
  %2 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.477"* %2 to %"class.thrust::detail::normal_iterator.475"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPsEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %c, %"struct.thrust::detail::cons.535"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.535"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.475"* %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPsEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  store %"class.thrust::detail::normal_iterator.475"* %f1, %"class.thrust::detail::normal_iterator.475"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %f2, %"class.thrust::detail::normal_iterator.475"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to %"class.thrust::iterator_adaptor.476"*
  %2 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %2 to %"class.thrust::iterator_adaptor.476"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.476"* %1, %"class.thrust::iterator_adaptor.476"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"* dereferenceable(8) %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  store %"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.476"* %x, %"class.thrust::iterator_adaptor.476"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %m_iterator, align 8, !tbaa !357
  %1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %x.addr, align 8
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %1)
  %2 = load i16*, i16** %call, align 8, !tbaa !1
  %cmp = icmp eq i16* %0, %2
  ret i1 %cmp
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.535"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %t, %"struct.thrust::detail::cons.535"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.535", %"struct.thrust::detail::cons.535"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.475"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRsS6_RNS_4pairIssEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_(%"struct.thrust::detail::binary_transform_functor"* %this, %"class.thrust::detail::tuple_of_iterator_references.538"* byval align 8 %t) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.487", align 2
  store %"struct.thrust::detail::binary_transform_functor"* %this, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor"*, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.538"* %t to %"struct.thrust::detail::cons.540"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi2ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.540"* dereferenceable(24) %0)
  %f = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor", %"struct.thrust::detail::binary_transform_functor"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.538"* %t to %"struct.thrust::detail::cons.540"*
  %call2 = call dereferenceable(2) i16* @_ZN6thrust3getILi0ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.540"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.538"* %t to %"struct.thrust::detail::cons.540"*
  %call3 = call dereferenceable(2) i16* @_ZN6thrust3getILi1ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.540"* dereferenceable(24) %2)
  %call4 = call i32 @_ZN17make_pair_functorclIssEEN6thrust4pairIT_T0_EERKS3_RKS4_(%struct.make_pair_functor* %f, i16* dereferenceable(2) %call2, i16* dereferenceable(2) %call3)
  %3 = bitcast %"struct.thrust::pair.487"* %ref.tmp to i32*
  store i32 %call4, i32* %3, align 2
  %4 = bitcast %"struct.thrust::pair.487"* %call to i8*
  %5 = bitcast %"struct.thrust::pair.487"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 4, i32 2, i1 false), !tbaa.struct !345
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::detail::tuple_of_iterator_references.538"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_(%"class.thrust::detail::tuple_of_iterator_references.538"* dereferenceable(24) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.538"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.538"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.538"* %ref, %"class.thrust::detail::tuple_of_iterator_references.538"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.538"*, %"class.thrust::detail::tuple_of_iterator_references.538"** %ref.addr, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.538"* %0, %"class.thrust::detail::tuple_of_iterator_references.538"** %ref.tmp, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.538"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::detail::tuple_of_iterator_references.538"** dereferenceable(8) %ref.tmp)
  ret %"class.thrust::detail::tuple_of_iterator_references.538"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi2ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.540"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.540"*, align 8
  store %"struct.thrust::detail::cons.540"* %c, %"struct.thrust::detail::cons.540"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.540"*, %"struct.thrust::detail::cons.540"** %c.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIssEERsNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.540"* dereferenceable(24) %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN17make_pair_functorclIssEEN6thrust4pairIT_T0_EERKS3_RKS4_(%struct.make_pair_functor* %this, i16* dereferenceable(2) %x, i16* dereferenceable(2) %y) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.487", align 2
  %this.addr = alloca %struct.make_pair_functor*, align 8
  %x.addr = alloca i16*, align 8
  %y.addr = alloca i16*, align 8
  store %struct.make_pair_functor* %this, %struct.make_pair_functor** %this.addr, align 8, !tbaa !1
  store i16* %x, i16** %x.addr, align 8, !tbaa !7
  store i16* %y, i16** %y.addr, align 8, !tbaa !7
  %this1 = load %struct.make_pair_functor*, %struct.make_pair_functor** %this.addr, align 8
  %0 = load i16*, i16** %x.addr, align 8
  %1 = load i16, i16* %0, align 2, !tbaa !346
  %2 = load i16*, i16** %y.addr, align 8
  %3 = load i16, i16* %2, align 2, !tbaa !346
  %call = call i32 @_ZN6thrust9make_pairIssEENS_4pairIT_T0_EES2_S3_(i16 signext %1, i16 signext %3)
  %4 = bitcast %"struct.thrust::pair.487"* %retval to i32*
  store i32 %call, i32* %4, align 2
  %5 = bitcast %"struct.thrust::pair.487"* %retval to i32*
  %6 = load i32, i32* %5, align 2
  ret i32 %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust3getILi0ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.540"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.540"*, align 8
  store %"struct.thrust::detail::cons.540"* %c, %"struct.thrust::detail::cons.540"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.540"*, %"struct.thrust::detail::cons.540"** %c.addr, align 8
  %call = call dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS0_4consIS4_NS5_IRNS_4pairIssEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.540"* dereferenceable(24) %0)
  ret i16* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust3getILi1ERsNS_6detail4consIS1_NS3_IRNS_4pairIssEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.540"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.540"*, align 8
  store %"struct.thrust::detail::cons.540"* %c, %"struct.thrust::detail::cons.540"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.540"*, %"struct.thrust::detail::cons.540"** %c.addr, align 8
  %call = call dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi1EE3getIRsS4_NS0_4consIS4_NS5_IRNS_4pairIssEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.540"* dereferenceable(24) %0)
  ret i16* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIssEERsNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.540"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.540"*, align 8
  store %"struct.thrust::detail::cons.540"* %t, %"struct.thrust::detail::cons.540"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.540"*, %"struct.thrust::detail::cons.540"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.540", %"struct.thrust::detail::cons.540"* %0, i32 0, i32 1
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIssEERsNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.541"* dereferenceable(16) %tail)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIssEERsNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.541"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.541"*, align 8
  store %"struct.thrust::detail::cons.541"* %t, %"struct.thrust::detail::cons.541"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.541"*, %"struct.thrust::detail::cons.541"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.541", %"struct.thrust::detail::cons.541"* %0, i32 0, i32 1
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIssEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.542"* dereferenceable(8) %tail)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIssEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.542"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.542"*, align 8
  store %"struct.thrust::detail::cons.542"* %t, %"struct.thrust::detail::cons.542"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.542"*, %"struct.thrust::detail::cons.542"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.542", %"struct.thrust::detail::cons.542"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.487"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32 @_ZN6thrust9make_pairIssEENS_4pairIT_T0_EES2_S3_(i16 signext %x, i16 signext %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.487", align 2
  %x.addr = alloca i16, align 2
  %y.addr = alloca i16, align 2
  store i16 %x, i16* %x.addr, align 2, !tbaa !346
  store i16 %y, i16* %y.addr, align 2, !tbaa !346
  call void @_ZN6thrust4pairIssEC2ERKsS3_(%"struct.thrust::pair.487"* %retval, i16* dereferenceable(2) %x.addr, i16* dereferenceable(2) %y.addr)
  %0 = bitcast %"struct.thrust::pair.487"* %retval to i32*
  %1 = load i32, i32* %0, align 2
  ret i32 %1
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS0_4consIS4_NS5_IRNS_4pairIssEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.540"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.540"*, align 8
  store %"struct.thrust::detail::cons.540"* %t, %"struct.thrust::detail::cons.540"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.540"*, %"struct.thrust::detail::cons.540"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.540", %"struct.thrust::detail::cons.540"* %0, i32 0, i32 0
  %ref = load i16*, i16** %head, align 8, !tbaa !7
  ret i16* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi1EE3getIRsS4_NS0_4consIS4_NS5_IRNS_4pairIssEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.540"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.540"*, align 8
  store %"struct.thrust::detail::cons.540"* %t, %"struct.thrust::detail::cons.540"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.540"*, %"struct.thrust::detail::cons.540"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.540", %"struct.thrust::detail::cons.540"* %0, i32 0, i32 1
  %call = call dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS0_4consIRNS_4pairIssEENS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.541"* dereferenceable(16) %tail)
  ret i16* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust6detail9get_classILi0EE3getIRsS4_NS0_4consIRNS_4pairIssEENS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.541"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.541"*, align 8
  store %"struct.thrust::detail::cons.541"* %t, %"struct.thrust::detail::cons.541"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.541"*, %"struct.thrust::detail::cons.541"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.541", %"struct.thrust::detail::cons.541"* %0, i32 0, i32 0
  %ref = load i16*, i16** %head, align 8, !tbaa !7
  ret i16* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.538"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::detail::tuple_of_iterator_references.538"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.538"**, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.538"** %ptr, %"class.thrust::detail::tuple_of_iterator_references.538"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.538"**, %"class.thrust::detail::tuple_of_iterator_references.538"*** %ptr.addr, align 8
  %1 = load %"class.thrust::detail::tuple_of_iterator_references.538"*, %"class.thrust::detail::tuple_of_iterator_references.538"** %0, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.538"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_(%"class.thrust::detail::tuple_of_iterator_references.538"* %1)
  ret %"class.thrust::detail::tuple_of_iterator_references.538"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.538"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRsS3_RNS_4pairIssEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_(%"class.thrust::detail::tuple_of_iterator_references.538"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.538"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.538"* %ptr, %"class.thrust::detail::tuple_of_iterator_references.538"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.538"*, %"class.thrust::detail::tuple_of_iterator_references.538"** %ptr.addr, align 8, !tbaa !1
  ret %"class.thrust::detail::tuple_of_iterator_references.538"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_(%"class.thrust::detail::tuple_of_iterator_references.538"* noalias sret %agg.result, %"class.thrust::zip_iterator.532"* dereferenceable(24) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  store %"class.thrust::zip_iterator.532"* %f, %"class.thrust::zip_iterator.532"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %f.addr, align 8
  call void @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv(%"class.thrust::detail::tuple_of_iterator_references.538"* sret %agg.result, %"class.thrust::zip_iterator.532"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.532"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.533"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.533"*, align 8
  store %"class.thrust::iterator_facade.533"* %this, %"class.thrust::iterator_facade.533"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.533"*, %"class.thrust::iterator_facade.533"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.533"* %this1 to %"class.thrust::zip_iterator.532"*
  ret %"class.thrust::zip_iterator.532"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv(%"class.thrust::detail::tuple_of_iterator_references.538"* noalias sret %agg.result, %"class.thrust::zip_iterator.532"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.539", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.532"* %this, %"class.thrust::zip_iterator.532"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.534"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.532"* %this1)
  call void @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_(%"class.thrust::tuple.539"* sret %ref.tmp, %"class.thrust::tuple.534"* dereferenceable(24) %call)
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRsS2_RNS_4pairIssEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE(%"class.thrust::detail::tuple_of_iterator_references.538"* %agg.result, %"class.thrust::tuple.539"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_(%"class.thrust::tuple.539"* noalias sret %agg.result, %"class.thrust::tuple.534"* dereferenceable(24) %t) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.534"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.534"* %t, %"class.thrust::tuple.534"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.534"*, %"class.thrust::tuple.534"** %t.addr, align 8
  call void @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_(%"class.thrust::tuple.539"* sret %agg.result, %"class.thrust::tuple.534"* dereferenceable(24) %0)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRsS2_RNS_4pairIssEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE(%"class.thrust::detail::tuple_of_iterator_references.538"* %this, %"class.thrust::tuple.539"* dereferenceable(24) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.538"*, align 8
  %other.addr = alloca %"class.thrust::tuple.539"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.538"* %this, %"class.thrust::detail::tuple_of_iterator_references.538"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.539"* %other, %"class.thrust::tuple.539"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.538"*, %"class.thrust::detail::tuple_of_iterator_references.538"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.538"* %this1 to %"class.thrust::tuple.539"*
  %1 = load %"class.thrust::tuple.539"*, %"class.thrust::tuple.539"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.539"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.539"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_(%"class.thrust::tuple.539"* noalias sret %agg.result, %"class.thrust::tuple.534"* dereferenceable(24) %t) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.534"*, align 8
  store %"class.thrust::tuple.534"* %t, %"class.thrust::tuple.534"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.534"*, %"class.thrust::tuple.534"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.534"* %0 to %"struct.thrust::detail::cons.535"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %1)
  %call1 = call dereferenceable(2) i16* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPsEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.534"*, %"class.thrust::tuple.534"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.534"* %2 to %"struct.thrust::detail::cons.535"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %3)
  %call3 = call dereferenceable(2) i16* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPsEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call2)
  %4 = load %"class.thrust::tuple.534"*, %"class.thrust::tuple.534"** %t.addr, align 8
  %5 = bitcast %"class.thrust::tuple.534"* %4 to %"struct.thrust::detail::cons.535"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %5)
  %call5 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIssEEEEEENS1_5applyIT_E4typeERKS9_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %call4)
  call void @_ZN6thrust5tupleIRsS1_RNS_4pairIssEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_(%"class.thrust::tuple.539"* %agg.result, i16* dereferenceable(2) %call1, i16* dereferenceable(2) %call3, %"struct.thrust::pair.487"* dereferenceable(4) %call5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPsEENS1_4consIS4_NS5_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.535"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %c, %"struct.thrust::detail::cons.535"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.535"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.475"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIssEEEEEENS1_5applyIT_E4typeERKS9_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.484"* %it, %"class.thrust::detail::normal_iterator.484"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.484"* %0 to %"class.thrust::iterator_facade.486"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.486"* %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRsS1_RNS_4pairIssEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_(%"class.thrust::tuple.539"* %this, i16* dereferenceable(2) %t0, i16* dereferenceable(2) %t1, %"struct.thrust::pair.487"* dereferenceable(4) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.539"*, align 8
  %t0.addr = alloca i16*, align 8
  %t1.addr = alloca i16*, align 8
  %t2.addr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.539"* %this, %"class.thrust::tuple.539"** %this.addr, align 8, !tbaa !1
  store i16* %t0, i16** %t0.addr, align 8, !tbaa !7
  store i16* %t1, i16** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %t2, %"struct.thrust::pair.487"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.539"*, %"class.thrust::tuple.539"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.539"* %this1 to %"struct.thrust::detail::cons.540"*
  %1 = load i16*, i16** %t0.addr, align 8
  %2 = load i16*, i16** %t1.addr, align 8
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consIRsNS1_IS2_NS1_IRNS_4pairIssEENS_9null_typeEEEEEEC2IssS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.540"* %0, i16* dereferenceable(2) %1, i16* dereferenceable(2) %2, %"struct.thrust::pair.487"* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.535"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %t, %"struct.thrust::detail::cons.535"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.535", %"struct.thrust::detail::cons.535"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consINS4_IPNS_4pairIssEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.536"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.475"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPsEES6_NS0_4consINS4_IPNS_4pairIssEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.536"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.536"*, align 8
  store %"struct.thrust::detail::cons.536"* %t, %"struct.thrust::detail::cons.536"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.536"*, %"struct.thrust::detail::cons.536"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.536", %"struct.thrust::detail::cons.536"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.475"* %head
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.486"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.486"*, align 8
  store %"class.thrust::iterator_facade.486"* %this, %"class.thrust::iterator_facade.486"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.486"*, %"class.thrust::iterator_facade.486"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.486"* %this1)
  %call2 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIssEEEEEENT_9referenceERKS8_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %call)
  ret %"struct.thrust::pair.487"* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIssEEEEEENT_9referenceERKS8_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  store %"class.thrust::detail::normal_iterator.484"* %f, %"class.thrust::detail::normal_iterator.484"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.484"* %0 to %"class.thrust::iterator_adaptor.485"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv(%"class.thrust::iterator_adaptor.485"* %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.486"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.486"*, align 8
  store %"class.thrust::iterator_facade.486"* %this, %"class.thrust::iterator_facade.486"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.486"*, %"class.thrust::iterator_facade.486"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.486"* %this1 to %"class.thrust::detail::normal_iterator.484"*
  ret %"class.thrust::detail::normal_iterator.484"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv(%"class.thrust::iterator_adaptor.485"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.485"*, align 8
  store %"class.thrust::iterator_adaptor.485"* %this, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.485"*, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !371
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRsNS1_IS2_NS1_IRNS_4pairIssEENS_9null_typeEEEEEEC2IssS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.540"* %this, i16* dereferenceable(2) %t1, i16* dereferenceable(2) %t2, %"struct.thrust::pair.487"* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.540"*, align 8
  %t1.addr = alloca i16*, align 8
  %t2.addr = alloca i16*, align 8
  %t3.addr = alloca %"struct.thrust::pair.487"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.540"* %this, %"struct.thrust::detail::cons.540"** %this.addr, align 8, !tbaa !1
  store i16* %t1, i16** %t1.addr, align 8, !tbaa !7
  store i16* %t2, i16** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %t3, %"struct.thrust::pair.487"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.540"*, %"struct.thrust::detail::cons.540"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.540", %"struct.thrust::detail::cons.540"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %t1.addr, align 8
  store i16* %0, i16** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.540", %"struct.thrust::detail::cons.540"* %this1, i32 0, i32 1
  %1 = load i16*, i16** %t2.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRsNS1_IRNS_4pairIssEENS_9null_typeEEEEC2IsS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.541"* %tail, i16* dereferenceable(2) %1, %"struct.thrust::pair.487"* dereferenceable(4) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRsNS1_IRNS_4pairIssEENS_9null_typeEEEEC2IsS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.541"* %this, i16* dereferenceable(2) %t1, %"struct.thrust::pair.487"* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.541"*, align 8
  %t1.addr = alloca i16*, align 8
  %t2.addr = alloca %"struct.thrust::pair.487"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.541"* %this, %"struct.thrust::detail::cons.541"** %this.addr, align 8, !tbaa !1
  store i16* %t1, i16** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %t2, %"struct.thrust::pair.487"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.541"*, %"struct.thrust::detail::cons.541"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.541", %"struct.thrust::detail::cons.541"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %t1.addr, align 8
  store i16* %0, i16** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.541", %"struct.thrust::detail::cons.541"* %this1, i32 0, i32 1
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRNS_4pairIssEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.542"* %tail, %"struct.thrust::pair.487"* dereferenceable(4) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRNS_4pairIssEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.542"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.542"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.487"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.542"* %this, %"struct.thrust::detail::cons.542"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %t1, %"struct.thrust::pair.487"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.542"*, %"struct.thrust::detail::cons.542"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.542", %"struct.thrust::detail::cons.542"* %this9, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t1.addr, align 8
  store %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES7_NS5_IPNS_4pairIssEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_(%"class.thrust::zip_iterator.532"* dereferenceable(24) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  store %"class.thrust::zip_iterator.532"* %f, %"class.thrust::zip_iterator.532"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv(%"class.thrust::zip_iterator.532"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.532"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IssS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRsSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.533"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.533"*, align 8
  store %"class.thrust::iterator_facade.533"* %this, %"class.thrust::iterator_facade.533"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.533"*, %"class.thrust::iterator_facade.533"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.533"* %this1 to %"class.thrust::zip_iterator.532"*
  ret %"class.thrust::zip_iterator.532"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv(%"class.thrust::zip_iterator.532"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.532"* %this, %"class.thrust::zip_iterator.532"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.532", %"class.thrust::zip_iterator.532"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_(%"class.thrust::tuple.534"* dereferenceable(24) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPsEES6_NS4_IPNS_4pairIssEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_(%"class.thrust::tuple.534"* dereferenceable(24) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.534"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.534"* %t, %"class.thrust::tuple.534"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.534"*, %"class.thrust::tuple.534"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.534"* %0 to %"struct.thrust::detail::cons.535"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.535"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPsEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.534"*, %"class.thrust::tuple.534"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.534"* %2 to %"struct.thrust::detail::cons.535"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.536"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.535"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPsEENS3_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_(%"struct.thrust::detail::cons.536"* dereferenceable(16) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.535"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %this, %"struct.thrust::detail::cons.535"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.535", %"struct.thrust::detail::cons.535"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.475"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPsEENS3_INS4_IPNS_4pairIssEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_(%"struct.thrust::detail::cons.536"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.536"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.536"* %t, %"struct.thrust::detail::cons.536"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.536"*, %"struct.thrust::detail::cons.536"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.536"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPsEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.536"*, %"struct.thrust::detail::cons.536"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.537"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.536"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_(%"struct.thrust::detail::cons.537"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.536"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.535"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %this, %"struct.thrust::detail::cons.535"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.535", %"struct.thrust::detail::cons.535"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.536"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.536"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.536"*, align 8
  store %"struct.thrust::detail::cons.536"* %this, %"struct.thrust::detail::cons.536"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.536"*, %"struct.thrust::detail::cons.536"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.536", %"struct.thrust::detail::cons.536"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.475"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_(%"struct.thrust::detail::cons.537"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.537"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.537"* %t, %"struct.thrust::detail::cons.537"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.537"*, %"struct.thrust::detail::cons.537"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.537"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIssEEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.537"*, %"struct.thrust::detail::cons.537"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.537"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.537"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.536"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.536"*, align 8
  store %"struct.thrust::detail::cons.536"* %this, %"struct.thrust::detail::cons.536"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.536"*, %"struct.thrust::detail::cons.536"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.536", %"struct.thrust::detail::cons.536"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.537"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIssEEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.484"* %it, %"class.thrust::detail::normal_iterator.484"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.484"* %0 to %"class.thrust::iterator_facade.486"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.486"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.537"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.537"*, align 8
  store %"struct.thrust::detail::cons.537"* %this, %"struct.thrust::detail::cons.537"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.537"*, %"struct.thrust::detail::cons.537"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.537", %"struct.thrust::detail::cons.537"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.484"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.537"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.537"*, align 8
  store %"struct.thrust::detail::cons.537"* %this, %"struct.thrust::detail::cons.537"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.537"*, %"struct.thrust::detail::cons.537"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.486"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.486"*, align 8
  store %"class.thrust::iterator_facade.486"* %this, %"class.thrust::iterator_facade.486"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.486"*, %"class.thrust::iterator_facade.486"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.486"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIssEEEEEEvRT_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.486"* %this1)
  ret %"class.thrust::detail::normal_iterator.484"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIssEEEEEEvRT_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  store %"class.thrust::detail::normal_iterator.484"* %f, %"class.thrust::detail::normal_iterator.484"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.484"* %0 to %"class.thrust::iterator_adaptor.485"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv(%"class.thrust::iterator_adaptor.485"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.486"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.486"*, align 8
  store %"class.thrust::iterator_facade.486"* %this, %"class.thrust::iterator_facade.486"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.486"*, %"class.thrust::iterator_facade.486"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.486"* %this1 to %"class.thrust::detail::normal_iterator.484"*
  ret %"class.thrust::detail::normal_iterator.484"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv(%"class.thrust::iterator_adaptor.485"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.485"*, align 8
  store %"class.thrust::iterator_adaptor.485"* %this, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.485"*, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !371
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %0, i32 1
  store %"struct.thrust::pair.487"* %incdec.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !371
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPsEES5_NS3_IPNS_4pairIssEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_(%"class.thrust::zip_iterator.532"* %this, %"class.thrust::tuple.534"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.532"*, align 8
  store %"class.thrust::zip_iterator.532"* %this, %"class.thrust::zip_iterator.532"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.532"*, %"class.thrust::zip_iterator.532"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.532"* %this1 to %"class.thrust::iterator_facade.533"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.532", %"class.thrust::zip_iterator.532"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.534"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.534"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorIPsEES4_NS2_IPNS_4pairIssEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_(%"class.thrust::tuple.534"* %this, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.534"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.534"* %this, %"class.thrust::tuple.534"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.475"* %t0, %"class.thrust::detail::normal_iterator.475"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %t1, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.484"* %t2, %"class.thrust::detail::normal_iterator.484"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.534"*, %"class.thrust::tuple.534"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.534"* %this1 to %"struct.thrust::detail::cons.535"*
  %1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.535"* %0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_IS4_NS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.535"* %this, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.535"* %this, %"struct.thrust::detail::cons.535"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.475"* %t1, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %t2, %"class.thrust::detail::normal_iterator.475"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.484"* %t3, %"class.thrust::detail::normal_iterator.484"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.535", %"struct.thrust::detail::cons.535"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.535", %"struct.thrust::detail::cons.535"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.536"* %tail, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPsEENS1_INS2_IPNS_4pairIssEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.536"* %this, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.536"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.536"* %this, %"struct.thrust::detail::cons.536"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.475"* %t1, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.484"* %t2, %"class.thrust::detail::normal_iterator.484"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.536"*, %"struct.thrust::detail::cons.536"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.536", %"struct.thrust::detail::cons.536"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.536", %"struct.thrust::detail::cons.536"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_(%"struct.thrust::detail::cons.537"* %tail, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIssEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_(%"struct.thrust::detail::cons.537"* %this, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.537"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.537"* %this, %"struct.thrust::detail::cons.537"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.484"* %t1, %"class.thrust::detail::normal_iterator.484"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.537"*, %"struct.thrust::detail::cons.537"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.537", %"struct.thrust::detail::cons.537"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.484"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.484"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEENS4_IPsEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.535"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.535"*, align 8
  store %"struct.thrust::detail::cons.535"* %t, %"struct.thrust::detail::cons.535"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.535"*, %"struct.thrust::detail::cons.535"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.535", %"struct.thrust::detail::cons.535"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEENS4_IPsEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.536"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.484"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEENS4_IPsEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.536"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.536"*, align 8
  store %"struct.thrust::detail::cons.536"* %t, %"struct.thrust::detail::cons.536"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.536"*, %"struct.thrust::detail::cons.536"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.536", %"struct.thrust::detail::cons.536"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.537"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.484"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIssEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.537"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.537"*, align 8
  store %"struct.thrust::detail::cons.537"* %t, %"struct.thrust::detail::cons.537"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.537"*, %"struct.thrust::detail::cons.537"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.537", %"struct.thrust::detail::cons.537"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.484"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr i16* @_ZN6thrust6detail18contiguous_storageIsSaIsEE5beginEv(%"class.thrust::detail::contiguous_storage.471"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.475"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive2, align 8
  ret i16* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.475"* %i, %"class.thrust::detail::normal_iterator.475"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.475"* %i, %"class.thrust::detail::normal_iterator.475"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.475"* %i, %"class.thrust::detail::normal_iterator.475"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %1 to %"class.thrust::iterator_facade.477"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEpLEl(%"class.thrust::iterator_facade.477"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEpLEl(%"class.thrust::iterator_facade.477"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.477"* %this, %"class.thrust::iterator_facade.477"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv(%"class.thrust::iterator_facade.477"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPsEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslE7derivedEv(%"class.thrust::iterator_facade.477"* %this1)
  ret %"class.thrust::detail::normal_iterator.475"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPsEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.475"* %f, %"class.thrust::detail::normal_iterator.475"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.475"* %0 to %"class.thrust::iterator_adaptor.476"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor.476"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor.476"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %this1, i32 0, i32 0
  %1 = load i16*, i16** %m_iterator, align 8, !tbaa !357
  %add.ptr = getelementptr inbounds i16, i16* %1, i64 %0
  store i16* %add.ptr, i16** %m_iterator, align 8, !tbaa !357
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.480"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.484"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.484"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEEC2IsSaIsEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.470"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %ref.tmp = alloca %"class.thrust::device_malloc_allocator.491", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.470"* %v, %"class.thrust::detail::vector_base.470"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIsEC2Ev(%"class.thrust::device_malloc_allocator.491"* %ref.tmp)
  invoke void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEEC2ERKS3_(%"class.thrust::detail::contiguous_storage.490"* %m_storage, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZN6thrust23device_malloc_allocatorIsED2Ev(%"class.thrust::device_malloc_allocator.491"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !373
  %0 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %v.addr, align 8
  %call = invoke i16* @_ZNK6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %v.addr, align 8
  %call7 = invoke i16* @_ZNK6thrust6detail11vector_baseIsSaIsEE3endEv(%"class.thrust::detail::vector_base.470"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive8, i32 0, i32 0
  store i16* %call7, i16** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive10, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive12, i32 0, i32 0
  %3 = load i16*, i16** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE10range_initINS0_15normal_iteratorIPKsEEEEvT_SA_(%"class.thrust::detail::vector_base.489"* %this1, i16* %2, i16* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorIsED2Ev(%"class.thrust::device_malloc_allocator.491"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEED2Ev(%"class.thrust::detail::contiguous_storage.490"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIsEC2Ev(%"class.thrust::device_malloc_allocator.491"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  store %"class.thrust::device_malloc_allocator.491"* %this, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEEC2ERKS3_(%"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  %alloc.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.491"* %alloc, %"class.thrust::device_malloc_allocator.491"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %alloc.addr, align 8
  call void @_ZN6thrust23device_malloc_allocatorIsEC2ERKS1_(%"class.thrust::device_malloc_allocator.491"* %m_allocator, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust10device_ptrIsEC2IsEEPT_(%"class.thrust::device_ptr.496"* %agg.tmp, i16* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive2, i32 0, i32 0
  %1 = load i16*, i16** %coerce.dive3, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEC2ES3_(%"class.thrust::detail::normal_iterator.493"* %m_begin, i16* %1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !378
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorIsED2Ev(%"class.thrust::device_malloc_allocator.491"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIsED2Ev(%"class.thrust::device_malloc_allocator.491"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  store %"class.thrust::device_malloc_allocator.491"* %this, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE10range_initINS0_15normal_iteratorIPKsEEEEvT_SA_(%"class.thrust::detail::vector_base.489"* %this, i16* %first.coerce, i16* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive7, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive9, i32 0, i32 0
  %5 = load i16*, i16** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE10range_initINS0_15normal_iteratorIPKsEEEEvT_SA_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.489"* %this4, i16* %4, i16* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  %call = call i16* @_ZNK6thrust6detail18contiguous_storageIsSaIsEE5beginEv(%"class.thrust::detail::contiguous_storage.471"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive3, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive4, align 8
  ret i16* %0
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust6detail11vector_baseIsSaIsEE3endEv(%"class.thrust::detail::vector_base.470"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %call = call i16* @_ZNK6thrust6detail11vector_baseIsSaIsEE5beginEv(%"class.thrust::detail::vector_base.470"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE4sizeEv(%"class.thrust::detail::vector_base.470"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive4, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive5, align 8
  ret i16* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEED2Ev(%"class.thrust::detail::contiguous_storage.490"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.490"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIsED2Ev(%"class.thrust::device_malloc_allocator.491"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIsED2Ev(%"class.thrust::device_malloc_allocator.491"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIsEC2ERKS1_(%"class.thrust::device_malloc_allocator.491"* %this, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  store %"class.thrust::device_malloc_allocator.491"* %this, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.491"* %0, %"class.thrust::device_malloc_allocator.491"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIsEC2IsEEPT_(%"class.thrust::device_ptr.496"* %this, i16* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  %ptr.addr = alloca i16*, align 8
  store %"class.thrust::device_ptr.496"* %this, %"class.thrust::device_ptr.496"** %this.addr, align 8, !tbaa !1
  store i16* %ptr, i16** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.496"* %this1 to %"class.thrust::pointer.497"*
  %1 = load i16*, i16** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEEC2IsEEPT_(%"class.thrust::pointer.497"* %0, i16* %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEC2ES3_(%"class.thrust::detail::normal_iterator.493"* %this, i16* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.496", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %p.coerce, i16** %coerce.dive2, align 8
  store %"class.thrust::detail::normal_iterator.493"* %this, %"class.thrust::detail::normal_iterator.493"** %this.addr, align 8, !tbaa !1
  %this3 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.493"* %this3 to %"class.thrust::iterator_adaptor.494"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.494"* %0, %"class.thrust::device_ptr.496"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEEC2IsEEPT_(%"class.thrust::pointer.497"* %this, i16* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.497"*, align 8
  %other.addr = alloca i16*, align 8
  store %"class.thrust::pointer.497"* %this, %"class.thrust::pointer.497"** %this.addr, align 8, !tbaa !1
  store i16* %other, i16** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.497"*, %"class.thrust::pointer.497"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.497"* %this1 to %"class.thrust::iterator_adaptor.498"*
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEC2ERKS3_(%"class.thrust::iterator_adaptor.498"* %0, i16** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEC2ERKS3_(%"class.thrust::iterator_adaptor.498"* %this, i16** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.498"*, align 8
  %iter.addr = alloca i16**, align 8
  store %"class.thrust::iterator_adaptor.498"* %this, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8, !tbaa !1
  store i16** %iter, i16*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.498"*, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.498"* %this1 to %"class.thrust::iterator_facade.499"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %this1, i32 0, i32 0
  %1 = load i16**, i16*** %iter.addr, align 8
  %2 = load i16*, i16** %1, align 8, !tbaa !1
  store i16* %2, i16** %m_iterator, align 8, !tbaa !379
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.494"* %this, %"class.thrust::device_ptr.496"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.494"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  store %"class.thrust::iterator_adaptor.494"* %this, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.496"* %iter, %"class.thrust::device_ptr.496"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.494"*, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.494"* %this1 to %"class.thrust::iterator_facade.495"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.496"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.496"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE10range_initINS0_15normal_iteratorIPKsEEEEvT_SA_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.489"* %this, i16* %first.coerce, i16* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive6, i32 0, i32 0
  %6 = load i16*, i16** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive8, i32 0, i32 0
  %7 = load i16*, i16** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i16* %6, i16* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive12, i32 0, i32 0
  %13 = load i16*, i16** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive14, i32 0, i32 0
  %14 = load i16*, i16** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE17allocate_and_copyINS0_15normal_iteratorIPKsEEEEvmT_SA_RNS0_18contiguous_storageIsS3_EE(%"class.thrust::detail::vector_base.489"* %this4, i64 %8, i16* %13, i16* %14, %"class.thrust::detail::contiguous_storage.490"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !373
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i16* %first.coerce, i16* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive5, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive7, i32 0, i32 0
  %5 = load i16*, i16** %coerce.dive8, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i16* %4, i16* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE17allocate_and_copyINS0_15normal_iteratorIPKsEEEEvmT_SA_RNS0_18contiguous_storageIsS3_EE(%"class.thrust::detail::vector_base.489"* %this, i64 %requested_size, i16* %first.coerce, i16* %last.coerce, %"class.thrust::detail::contiguous_storage.490"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp54 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.490"* %new_storage, %"class.thrust::detail::contiguous_storage.490"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.490"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE8capacityEv(%"class.thrust::detail::vector_base.489"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE8max_sizeEv(%"class.thrust::detail::vector_base.489"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup78

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE8allocateEm(%"class.thrust::detail::contiguous_storage.490"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %new_storage.addr, align 8
  %call21 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::contiguous_storage.490"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive25, i32 0, i32 0
  store i16* %call21, i16** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive27, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive29, i32 0, i32 0
  %20 = load i16*, i16** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp18, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive34, i32 0, i32 0
  %21 = load i16*, i16** %coerce.dive35, align 8
  %call37 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE18uninitialized_copyINS0_15normal_iteratorIPKsEEEENS6_INS_10device_ptrIsEEEET_SD_SC_(%"class.thrust::detail::contiguous_storage.490"* %m_storage, i16* %19, i16* %20, i16* %21)
          to label %invoke.cont36 unwind label %lpad19

invoke.cont36:                                    ; preds = %invoke.cont20
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %coerce, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive41, i32 0, i32 0
  store i16* %call37, i16** %coerce.dive42, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.493"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %new_storage.addr, align 8
  %call45 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::contiguous_storage.490"* %27)
          to label %invoke.cont44 unwind label %lpad43

invoke.cont44:                                    ; preds = %catch
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %new_storage_end, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive49, i32 0, i32 0
  store i16* %call45, i16** %coerce.dive50, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont52 unwind label %lpad51

invoke.cont52:                                    ; preds = %invoke.cont44
  %m_storage53 = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %new_storage.addr, align 8
  %call56 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::contiguous_storage.490"* %29)
          to label %invoke.cont55 unwind label %lpad51

invoke.cont55:                                    ; preds = %invoke.cont52
  %coerce.dive57 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp54, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive60, i32 0, i32 0
  store i16* %call56, i16** %coerce.dive61, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp62 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.493"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive63 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp54, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive64, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive66, i32 0, i32 0
  %32 = load i16*, i16** %coerce.dive67, align 8
  %coerce.dive68 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp62, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive68, i32 0, i32 0
  %coerce.dive70 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive69, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive71, i32 0, i32 0
  %33 = load i16*, i16** %coerce.dive72, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE7destroyENS0_15normal_iteratorINS_10device_ptrIsEEEES8_(%"class.thrust::detail::contiguous_storage.490"* %m_storage53, i16* %32, i16* %33)
          to label %invoke.cont73 unwind label %lpad51

invoke.cont73:                                    ; preds = %invoke.cont55
  %34 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.490"* %34)
          to label %invoke.cont74 unwind label %lpad51

invoke.cont74:                                    ; preds = %invoke.cont73
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad51

lpad43:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup76

lpad51:                                           ; preds = %invoke.cont74, %invoke.cont73, %invoke.cont55, %invoke.cont52, %invoke.cont44
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.493"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup76

ehcleanup76:                                      ; preds = %lpad51, %lpad43
  invoke void @__cxa_end_catch()
          to label %invoke.cont77 unwind label %terminate.lpad

invoke.cont77:                                    ; preds = %ehcleanup76
  br label %ehcleanup78

try.cont:                                         ; preds = %invoke.cont36
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup78:                                      ; preds = %invoke.cont77, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup78
  %exn79 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn79, 0
  %lpad.val80 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val80

terminate.lpad:                                   ; preds = %ehcleanup76
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont74, %invoke.cont14
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i16* %first.coerce, i16* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive6, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive8, i32 0, i32 0
  %5 = load i16*, i16** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i16* %4, i16* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKsEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i16* %first.coerce, i16* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to %"class.thrust::iterator_facade.545"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to %"class.thrust::iterator_facade.545"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_sS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.545"* dereferenceable(1) %1, %"class.thrust::iterator_facade.545"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_sS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.545"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.545"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.545"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.545"*, align 8
  store %"class.thrust::iterator_facade.545"* %lhs, %"class.thrust::iterator_facade.545"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.545"* %rhs, %"class.thrust::iterator_facade.545"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.545"*, %"class.thrust::iterator_facade.545"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.545"* %0 to %"class.thrust::detail::normal_iterator.543"*
  %2 = load %"class.thrust::iterator_facade.545"*, %"class.thrust::iterator_facade.545"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.545"* %2 to %"class.thrust::detail::normal_iterator.543"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKsEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKsEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.543"* %f1, %"class.thrust::detail::normal_iterator.543"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.543"* %f2, %"class.thrust::detail::normal_iterator.543"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKsEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKsEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  store %"class.thrust::detail::normal_iterator.543"* %f1, %"class.thrust::detail::normal_iterator.543"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.543"* %f2, %"class.thrust::detail::normal_iterator.543"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %1 to %"class.thrust::iterator_adaptor.544"*
  %3 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.543"* %3 to %"class.thrust::iterator_adaptor.544"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.544"* %2, %"class.thrust::iterator_adaptor.544"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.544"* %this, %"class.thrust::iterator_adaptor.544"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.544"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.544"*, align 8
  store %"class.thrust::iterator_adaptor.544"* %this, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.544"* %y, %"class.thrust::iterator_adaptor.544"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.544"*, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.544"*, %"class.thrust::iterator_adaptor.544"** %y.addr, align 8
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.544"* %0)
  %1 = load i16*, i16** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %this1, i32 0, i32 0
  %2 = load i16*, i16** %m_iterator, align 8, !tbaa !381
  %sub.ptr.lhs.cast = ptrtoint i16* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i16* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.544"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.544"*, align 8
  store %"class.thrust::iterator_adaptor.544"* %this, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.544"*, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %this1, i32 0, i32 0
  ret i16** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.490"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp7 = alloca %"class.thrust::device_ptr.496", align 8
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE4sizeEv(%"class.thrust::detail::contiguous_storage.490"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.493"* %m_begin to %"class.thrust::iterator_adaptor.494"*
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.494"* %0)
  %1 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.496"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE4sizeEv(%"class.thrust::detail::contiguous_storage.490"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %3 = load i16*, i16** %coerce.dive5, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE10deallocateERS3_NS_10device_ptrIsEEm(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %m_allocator, i16* %3, i64 %call3)
  %m_begin6 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrIsEC2IsEEPT_(%"class.thrust::device_ptr.496"* %agg.tmp7, i16* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive9, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEC2ES3_(%"class.thrust::detail::normal_iterator.493"* %ref.tmp, i16* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.493"* %m_begin6 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.493"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !378
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE8capacityEv(%"class.thrust::detail::vector_base.489"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE4sizeEv(%"class.thrust::detail::contiguous_storage.490"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE8max_sizeEv(%"class.thrust::detail::vector_base.489"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.490"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE8allocateEm(%"class.thrust::detail::contiguous_storage.490"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %ref.tmp8 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.496", align 8
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i16* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8allocateERS3_m(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive2, i32 0, i32 0
  store i16* %call, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive6, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEC2ES3_(%"class.thrust::detail::normal_iterator.493"* %ref.tmp, i16* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.493"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.493"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !378
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin7 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrIsEC2IsEEPT_(%"class.thrust::device_ptr.496"* %agg.tmp9, i16* null)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive11, i32 0, i32 0
  %6 = load i16*, i16** %coerce.dive12, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEC2ES3_(%"class.thrust::detail::normal_iterator.493"* %ref.tmp8, i16* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.493"* %m_begin7 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.493"* %ref.tmp8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size13 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size13, align 8, !tbaa !378
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE18uninitialized_copyINS0_15normal_iteratorIPKsEEEENS6_INS_10device_ptrIsEEEET_SD_SC_(%"class.thrust::detail::contiguous_storage.490"* %this, i16* %first.coerce, i16* %last.coerce, i16* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive7, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive8, align 8
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  %this9 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this9, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp11 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.493"* %result to %"class.thrust::iterator_adaptor.494"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.494"* %6)
  %7 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::device_ptr.496"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp10, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive13, i32 0, i32 0
  %9 = load i16*, i16** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive15, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive18, i32 0, i32 0
  %11 = load i16*, i16** %coerce.dive19, align 8
  %call20 = call i16* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIsEENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %m_allocator, i16* %9, i16* %10, i16* %11)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive22, i32 0, i32 0
  store i16* %call20, i16** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive25, i32 0, i32 0
  %12 = load i16*, i16** %coerce.dive26, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEC2ES3_(%"class.thrust::detail::normal_iterator.493"* %retval, i16* %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %13) #5
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive30, i32 0, i32 0
  %14 = load i16*, i16** %coerce.dive31, align 8
  ret i16* %14
}

; Function Attrs: nounwind uwtable
define linkonce_odr i16* @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE5beginEv(%"class.thrust::detail::contiguous_storage.490"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.493"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.493"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive5, align 8
  ret i16* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.493"* %i, %"class.thrust::detail::normal_iterator.493"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE7destroyENS0_15normal_iteratorINS_10device_ptrIsEEEES8_(%"class.thrust::detail::contiguous_storage.490"* %this, i16* %first.coerce, i16* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive9, align 8
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  %this10 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this10, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.493"* %first to %"class.thrust::iterator_adaptor.494"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.494"* %0)
  %1 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.496"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.493"* %last to %"class.thrust::iterator_facade.495"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.493"* %first to %"class.thrust::iterator_facade.495"*
  %call11 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS5_sS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.495"* dereferenceable(1) %3, %"class.thrust::iterator_facade.495"* dereferenceable(1) %4)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive13, i32 0, i32 0
  %5 = load i16*, i16** %coerce.dive14, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIsEENS_10device_ptrIsEElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %m_allocator, i16* %5, i64 %call11)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE4sizeEv(%"class.thrust::detail::contiguous_storage.490"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !378
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE10deallocateERS3_NS_10device_ptrIsEEm(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a, i16* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.496", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %p.coerce, i16** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.496"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive5, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE10deallocateERS3_NS_10device_ptrIsEEmEN19workaround_warnings10deallocateES5_S7_m(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %0, i16* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.494"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.494"*, align 8
  store %"class.thrust::iterator_adaptor.494"* %this, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.494"*, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.496"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE10deallocateERS3_NS_10device_ptrIsEEmEN19workaround_warnings10deallocateES5_S7_m(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a, i16* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.496", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %p.coerce, i16** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.496"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive5, align 8
  call void @_ZN6thrust23device_malloc_allocatorIsE10deallocateENS_10device_ptrIsEEm(%"class.thrust::device_malloc_allocator.491"* %0, i16* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIsE10deallocateENS_10device_ptrIsEEm(%"class.thrust::device_malloc_allocator.491"* %this, i16* %p.coerce, i64 %cnt) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.496", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %cnt.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %p.coerce, i16** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.491"* %this, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8
  call void @_ZN6thrust10device_ptrIvEC2IsEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %agg.tmp, %"class.thrust::device_ptr.496"* dereferenceable(8) %p)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive5, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust11device_freeENS_10device_ptrIvEE(i8* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIvEC2IsEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.496"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.115"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  store %"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.115"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.496"* %other, %"class.thrust::device_ptr.496"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.115"*, %"class.thrust::device_ptr.115"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.115"* %this1 to %"class.thrust::pointer.116"*
  %1 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %other.addr, align 8
  call void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IsEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE(%"class.thrust::pointer.116"* %0, %"class.thrust::device_ptr.496"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IsEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE(%"class.thrust::pointer.116"* %this, %"class.thrust::device_ptr.496"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.116"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  store %"class.thrust::pointer.116"* %this, %"class.thrust::pointer.116"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.496"* %other, %"class.thrust::device_ptr.496"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.116"*, %"class.thrust::pointer.116"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.116"* %this1 to %"class.thrust::iterator_adaptor.117"*
  %2 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.496"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive2, i32 0, i32 0
  %5 = load i16*, i16** %coerce.dive3, align 8
  %call = call i16* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIsEEE3getES3_(i16* %5)
  %6 = bitcast i16* %call to i8*
  store i8* %6, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_(%"class.thrust::iterator_adaptor.117"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIsEEE3getES3_(i16* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %ptr.coerce, i16** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.496"* %ptr to %"class.thrust::pointer.497"*
  %call = call i16* @_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEE3getEv(%"class.thrust::pointer.497"* %0)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEE3getEv(%"class.thrust::pointer.497"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.497"*, align 8
  store %"class.thrust::pointer.497"* %this, %"class.thrust::pointer.497"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.497"*, %"class.thrust::pointer.497"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.497"* %this1 to %"class.thrust::iterator_adaptor.498"*
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE4baseEv(%"class.thrust::iterator_adaptor.498"* %0)
  %1 = load i16*, i16** %call, align 8, !tbaa !1
  ret i16* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE4baseEv(%"class.thrust::iterator_adaptor.498"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.498"*, align 8
  store %"class.thrust::iterator_adaptor.498"* %this, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.498"*, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %this1, i32 0, i32 0
  ret i16** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.490"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.490"*, align 8
  store %"class.thrust::detail::contiguous_storage.490"* %this, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.490"*, %"class.thrust::detail::contiguous_storage.490"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.490", %"class.thrust::detail::contiguous_storage.490"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8max_sizeERKS3_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8max_sizeERKS3_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIsEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIsEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8allocateERS3_m(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i16* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %call, i16** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive5, align 8
  ret i16* %2
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIsEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.546", align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust10device_ptrIKsEC2IsEEPT_(%"class.thrust::device_ptr.546"* %agg.tmp, i16* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.546", %"class.thrust::device_ptr.546"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.547", %"class.thrust::pointer.547"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.548", %"class.thrust::iterator_adaptor.548"* %coerce.dive1, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive2, align 8
  %call = call i16* @_ZN6thrust23device_malloc_allocatorIsE8allocateEmNS_10device_ptrIKsEE(%"class.thrust::device_malloc_allocator.491"* %0, i64 %1, i16* %2)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  store i16* %call, i16** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive7, i32 0, i32 0
  %3 = load i16*, i16** %coerce.dive8, align 8
  ret i16* %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust23device_malloc_allocatorIsE8allocateEmNS_10device_ptrIKsEE(%"class.thrust::device_malloc_allocator.491"* %this, i64 %cnt, i16* %.coerce) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %0 = alloca %"class.thrust::device_ptr.546", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %cnt.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.546", %"class.thrust::device_ptr.546"* %0, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.547", %"class.thrust::pointer.547"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.548", %"class.thrust::iterator_adaptor.548"* %coerce.dive1, i32 0, i32 0
  store i16* %.coerce, i16** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.491"* %this, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8
  %1 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK6thrust23device_malloc_allocatorIsE8max_sizeEv(%"class.thrust::device_malloc_allocator.491"* %this3)
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %2 = bitcast i8* %exception to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %2) #5
  call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt9bad_alloc to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD1Ev to i8*)) #15
  unreachable

if.end:                                           ; preds = %entry
  %3 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call4 = call i16* @_ZN6thrust13device_mallocIsEENS_10device_ptrIT_EEm(i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive6, i32 0, i32 0
  store i16* %call4, i16** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive9, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive10, align 8
  ret i16* %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKsEC2IsEEPT_(%"class.thrust::device_ptr.546"* %this, i16* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.546"*, align 8
  %ptr.addr = alloca i16*, align 8
  store %"class.thrust::device_ptr.546"* %this, %"class.thrust::device_ptr.546"** %this.addr, align 8, !tbaa !1
  store i16* %ptr, i16** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.546"*, %"class.thrust::device_ptr.546"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.546"* %this1 to %"class.thrust::pointer.547"*
  %1 = load i16*, i16** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIKsNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IsEEPT_(%"class.thrust::pointer.547"* %0, i16* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust23device_malloc_allocatorIsE8max_sizeEv(%"class.thrust::device_malloc_allocator.491"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  store %"class.thrust::device_malloc_allocator.491"* %this, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %this.addr, align 8
  %call = call i64 @_ZNSt14numeric_limitsImE3maxEv() #5
  %div = udiv i64 %call, 2
  ret i64 %div
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust13device_mallocIsEENS_10device_ptrIT_EEm(i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %n.addr = alloca i64, align 8
  %s = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %coerce = alloca %"class.thrust::pointer.550", align 8
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i16* @_ZN6thrust6mallocIsNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.550", %"class.thrust::pointer.550"* %coerce, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %coerce.dive, i32 0, i32 0
  store i16* %call, i16** %coerce.dive1, align 8
  %call2 = call i16* @_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.550"* %coerce)
  call void @_ZN6thrust10device_ptrIsEC2IsEEPT_(%"class.thrust::device_ptr.496"* %retval, i16* %call2)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.end(i64 1, i8* %3) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive5, align 8
  ret i16* %4
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6mallocIsNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.550", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca i16*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.550", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i16** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call i16* @_ZN6thrust6system6detail7generic6mallocIsNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.550", %"class.thrust::pointer.550"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %coerce.dive, i32 0, i32 0
  store i16* %call2, i16** %coerce.dive3, align 8
  %call4 = call i16* @_ZN6thrust16raw_pointer_castINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.550"* dereferenceable(8) %ref.tmp)
  store i16* %call4, i16** %raw_ptr, align 8, !tbaa !1
  %4 = load i16*, i16** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IsEEPT_(%"class.thrust::pointer.550"* %retval, i16* %4)
  %5 = bitcast i16** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.550", %"class.thrust::pointer.550"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %coerce.dive5, i32 0, i32 0
  %6 = load i16*, i16** %coerce.dive6, align 8
  ret i16* %6
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.550"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.550"*, align 8
  store %"class.thrust::pointer.550"* %this, %"class.thrust::pointer.550"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.550"*, %"class.thrust::pointer.550"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.550"* %this1 to %"class.thrust::iterator_adaptor.551"*
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPssS5_NS_27random_access_traversal_tagENS_9referenceIsS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.551"* %0)
  %1 = load i16*, i16** %call, align 8, !tbaa !1
  ret i16* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust16raw_pointer_castINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.550"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.550"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.550", align 8
  store %"class.thrust::pointer.550"* %ptr, %"class.thrust::pointer.550"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.550"*, %"class.thrust::pointer.550"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.550"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.550"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.550", %"class.thrust::pointer.550"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %coerce.dive, i32 0, i32 0
  %3 = load i16*, i16** %coerce.dive1, align 8
  %call = call i16* @_ZN6thrust6detail14pointer_traitsINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i16* %3)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail7generic6mallocIsNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.550", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 2, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to i16*
  call void @_ZN6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IsEEPT_(%"class.thrust::pointer.550"* %retval, i16* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.550", %"class.thrust::pointer.550"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %coerce.dive3, i32 0, i32 0
  %6 = load i16*, i16** %coerce.dive4, align 8
  ret i16* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IsEEPT_(%"class.thrust::pointer.550"* %this, i16* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.550"*, align 8
  %other.addr = alloca i16*, align 8
  store %"class.thrust::pointer.550"* %this, %"class.thrust::pointer.550"** %this.addr, align 8, !tbaa !1
  store i16* %other, i16** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.550"*, %"class.thrust::pointer.550"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.550"* %this1 to %"class.thrust::iterator_adaptor.551"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPssS5_NS_27random_access_traversal_tagENS_9referenceIsS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.551"* %0, i16** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust6detail14pointer_traitsINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i16* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.550", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.550", %"class.thrust::pointer.550"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %coerce.dive, i32 0, i32 0
  store i16* %ptr.coerce, i16** %coerce.dive1, align 8
  %call = call i16* @_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.550"* %ptr)
  ret i16* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPssS5_NS_27random_access_traversal_tagENS_9referenceIsS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.551"* %this, i16** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.551"*, align 8
  %iter.addr = alloca i16**, align 8
  store %"class.thrust::iterator_adaptor.551"* %this, %"class.thrust::iterator_adaptor.551"** %this.addr, align 8, !tbaa !1
  store i16** %iter, i16*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.551"*, %"class.thrust::iterator_adaptor.551"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.551"* %this1 to %"class.thrust::iterator_facade.552"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %this1, i32 0, i32 0
  %1 = load i16**, i16*** %iter.addr, align 8
  %2 = load i16*, i16** %1, align 8, !tbaa !1
  store i16* %2, i16** %m_iterator, align 8, !tbaa !383
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPssS5_NS_27random_access_traversal_tagENS_9referenceIsS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.551"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.551"*, align 8
  store %"class.thrust::iterator_adaptor.551"* %this, %"class.thrust::iterator_adaptor.551"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.551"*, %"class.thrust::iterator_adaptor.551"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.551", %"class.thrust::iterator_adaptor.551"* %this1, i32 0, i32 0
  ret i16** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKsNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IsEEPT_(%"class.thrust::pointer.547"* %this, i16* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.547"*, align 8
  %other.addr = alloca i16*, align 8
  %ref.tmp = alloca i16*, align 8
  store %"class.thrust::pointer.547"* %this, %"class.thrust::pointer.547"** %this.addr, align 8, !tbaa !1
  store i16* %other, i16** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.547"*, %"class.thrust::pointer.547"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.547"* %this1 to %"class.thrust::iterator_adaptor.548"*
  %1 = load i16*, i16** %other.addr, align 8, !tbaa !1
  store i16* %1, i16** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKsEEPS2_sNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_(%"class.thrust::iterator_adaptor.548"* %0, i16** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKsEEPS2_sNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_(%"class.thrust::iterator_adaptor.548"* %this, i16** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.548"*, align 8
  %iter.addr = alloca i16**, align 8
  store %"class.thrust::iterator_adaptor.548"* %this, %"class.thrust::iterator_adaptor.548"** %this.addr, align 8, !tbaa !1
  store i16** %iter, i16*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.548"*, %"class.thrust::iterator_adaptor.548"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.548"* %this1 to %"class.thrust::iterator_facade.549"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.548", %"class.thrust::iterator_adaptor.548"* %this1, i32 0, i32 0
  %1 = load i16**, i16*** %iter.addr, align 8
  %2 = load i16*, i16** %1, align 8, !tbaa !1
  store i16* %2, i16** %m_iterator, align 8, !tbaa !385
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIsEENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a, i16* %first.coerce, i16* %last.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp8 to i8*
  %7 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive9, i32 0, i32 0
  %8 = load i16*, i16** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive11, i32 0, i32 0
  %9 = load i16*, i16** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive14, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive15, align 8
  %call = call i16* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIsEENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %1, i16* %8, i16* %9, i16* %10)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive17, i32 0, i32 0
  store i16* %call, i16** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive20, i32 0, i32 0
  %11 = load i16*, i16** %coerce.dive21, align 8
  ret i16* %11
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIsEENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a, i16* %first.coerce, i16* %last.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIsEEE3getERS3_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive9, i32 0, i32 0
  %9 = load i16*, i16** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive11, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive14, i32 0, i32 0
  %11 = load i16*, i16** %coerce.dive15, align 8
  %call = call i16* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i16* %9, i16* %10, i16* %11)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive17, i32 0, i32 0
  store i16* %call, i16** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive20, i32 0, i32 0
  %12 = load i16*, i16** %coerce.dive21, align 8
  ret i16* %12
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2, i16* %first.coerce, i16* %last.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  %call8 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call8)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call9 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call10 = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %2, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 0
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 1
  store %"struct.thrust::execution_policy.120"* %10, %"struct.thrust::execution_policy.120"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.132"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp12 to i8*
  %17 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive13, i32 0, i32 0
  %18 = load i16*, i16** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive15, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive18, i32 0, i32 0
  %20 = load i16*, i16** %coerce.dive19, align 8
  %call20 = call i16* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %11, i16* %18, i16* %19, i16* %20)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive22, i32 0, i32 0
  store i16* %call20, i16** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive25, i32 0, i32 0
  %21 = load i16*, i16** %coerce.dive26, align 8
  ret i16* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIsEEE3getERS3_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIsEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, i16* %first.coerce, i16* %last.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call7 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp8 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp9 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp10 to i8*
  %8 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive11, i32 0, i32 0
  %14 = load i16*, i16** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp9, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive13, i32 0, i32 0
  %15 = load i16*, i16** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp10, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive16, i32 0, i32 0
  %16 = load i16*, i16** %coerce.dive17, align 8
  %call18 = call i16* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, i16* %14, i16* %15, i16* %16)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive20, i32 0, i32 0
  store i16* %call18, i16** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive23, i32 0, i32 0
  %17 = load i16*, i16** %coerce.dive24, align 8
  ret i16* %17
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i16* %first.coerce, i16* %last.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.496", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.543"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive10, i32 0, i32 0
  %16 = load i16*, i16** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp8, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive12, i32 0, i32 0
  %17 = load i16*, i16** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive15, i32 0, i32 0
  %18 = load i16*, i16** %coerce.dive16, align 8
  %call = call i16* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i16* %16, i16* %17, i16* %18)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive18, i32 0, i32 0
  store i16* %call, i16** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive21, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive22, align 8
  ret i16* %19
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i16* %begin.coerce, i16* %end.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.496", align 8
  %agg.tmp10 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %begin.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %end.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.543"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.543"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp7, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive12, i32 0, i32 0
  %16 = load i16*, i16** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive14, i32 0, i32 0
  %17 = load i16*, i16** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive17, i32 0, i32 0
  %18 = load i16*, i16** %coerce.dive18, align 8
  %call = call i16* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i16* %16, i16* %17, i16* %18)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive20, i32 0, i32 0
  store i16* %call, i16** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive23, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive24, align 8
  ret i16* %19
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i16* %begin.coerce, i16* %end.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.496", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp12 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp13 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %begin.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %end.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.543"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp9 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.543"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive14, i32 0, i32 0
  %16 = load i16*, i16** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive16, i32 0, i32 0
  %17 = load i16*, i16** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive19, i32 0, i32 0
  %18 = load i16*, i16** %coerce.dive20, align 8
  %call = call i16* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i16* %16, i16* %17, i16* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive22, i32 0, i32 0
  store i16* %call, i16** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive25, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive26, align 8
  ret i16* %19
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEENS_10device_ptrIsEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i16* %begin.coerce, i16* %end.coerce, i16* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.496", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %begin.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive2, i32 0, i32 0
  store i16* %end.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive6, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.543"* %end to %"class.thrust::iterator_facade.545"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.543"* %begin to %"class.thrust::iterator_facade.545"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_sS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.545"* dereferenceable(1) %7, %"class.thrust::iterator_facade.545"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.543"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.543"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp9 to i8*
  %13 = bitcast %"class.thrust::device_ptr.496"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive10, i32 0, i32 0
  %14 = load i16*, i16** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive13, i32 0, i32 0
  %15 = load i16*, i16** %coerce.dive14, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEElNS_10device_ptrIsEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i16* %14, i64 %11, i16* %15)
  %16 = bitcast %"class.thrust::device_ptr.496"* %result to %"class.thrust::iterator_facade.499"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call15 = call i16* @_ZN6thrustplINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE(%"class.thrust::iterator_facade.499"* dereferenceable(1) %16, i64 %17)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive17, i32 0, i32 0
  store i16* %call15, i16** %coerce.dive18, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive20, i32 0, i32 0
  %19 = load i16*, i16** %coerce.dive21, align 8
  ret i16* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKsEElNS_10device_ptrIsEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i16* %first.coerce, i64 %n, i16* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %result = alloca %"class.thrust::device_ptr.496", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %coerce = alloca %"class.thrust::device_reference.553", align 8
  %src = alloca i8*, align 8
  %ref.tmp15 = alloca i16*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %result, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive4, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::device_ptr.496"* %result to %"class.thrust::iterator_facade.499"*
  %call = call i16* @_ZNK6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEdeEv(%"class.thrust::iterator_facade.499"* %1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.553", %"class.thrust::device_reference.553"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  store i16* %call, i16** %coerce.dive9, align 8
  %2 = bitcast %"class.thrust::device_reference.553"* %coerce to %"class.thrust::reference.554"*
  %call10 = call i16* @_ZNK6thrust9referenceIsNS_10device_ptrIsEENS_16device_referenceIsEEEadEv(%"class.thrust::reference.554"* %2)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive12, i32 0, i32 0
  store i16* %call10, i16** %coerce.dive13, align 8
  %call14 = call i16* @_ZN6thrust16raw_pointer_castINS_10device_ptrIsEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr.496"* dereferenceable(8) %ref.tmp)
  %3 = bitcast i16* %call14 to i8*
  store i8* %3, i8** %dst, align 8, !tbaa !1
  %4 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  %5 = bitcast %"class.thrust::detail::normal_iterator.543"* %first to %"class.thrust::iterator_facade.545"*
  %call16 = call dereferenceable(2) i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.545"* %5)
  store i16* %call16, i16** %ref.tmp15, align 8, !tbaa !1
  %call17 = call i16* @_ZN6thrust16raw_pointer_castIPKsEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i16** dereferenceable(8) %ref.tmp15)
  %6 = bitcast i16* %call17 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call18 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call18 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %11, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %10, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %13)
  store i32 %call21, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system122 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %15, i32 0, i32 0
  %ref23 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system122, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.88"* %ref23 to %"struct.thrust::detail::execution_policy_base.85"*
  %call24 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call24 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system225 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %18, i32 0, i32 1
  %ref26 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system225, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.120"* %ref26 to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call28 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %17, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call28, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 2
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrustplINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE(%"class.thrust::iterator_facade.499"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.499"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::device_ptr.496", align 8
  store %"class.thrust::iterator_facade.499"* %i, %"class.thrust::iterator_facade.499"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::device_ptr.496"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.499"*, %"class.thrust::iterator_facade.499"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.499"* %1 to %"class.thrust::device_ptr.496"*
  %3 = bitcast %"class.thrust::device_ptr.496"* %tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.496"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::device_ptr.496"* %tmp to %"class.thrust::iterator_facade.499"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl(%"class.thrust::iterator_facade.499"* %5, i64 %6)
  %7 = bitcast %"class.thrust::device_ptr.496"* %retval to i8*
  %8 = bitcast %"class.thrust::device_ptr.496"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.496"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive2, align 8
  ret i16* %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust16raw_pointer_castINS_10device_ptrIsEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr.496"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  store %"class.thrust::device_ptr.496"* %ptr, %"class.thrust::device_ptr.496"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.496"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  %3 = load i16*, i16** %coerce.dive2, align 8
  %call = call i16* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIsEEE3getES3_(i16* %3)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEdeEv(%"class.thrust::iterator_facade.499"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.553", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.499"*, align 8
  store %"class.thrust::iterator_facade.499"* %this, %"class.thrust::iterator_facade.499"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.499"*, %"class.thrust::iterator_facade.499"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.499"* %this1)
  %call2 = call i16* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIsEEEENT_9referenceERKS4_(%"class.thrust::device_ptr.496"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.553", %"class.thrust::device_reference.553"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  store i16* %call2, i16** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.553", %"class.thrust::device_reference.553"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive10, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive11, align 8
  ret i16* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i16* @_ZNK6thrust9referenceIsNS_10device_ptrIsEENS_16device_referenceIsEEEadEv(%"class.thrust::reference.554"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.496", align 8
  %this.addr = alloca %"class.thrust::reference.554"*, align 8
  store %"class.thrust::reference.554"* %this, %"class.thrust::reference.554"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.554"*, %"class.thrust::reference.554"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.496"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.496"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive2, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive3, align 8
  ret i16* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrust16raw_pointer_castIPKsEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i16** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i16**, align 8
  store i16** %ptr, i16*** %ptr.addr, align 8, !tbaa !7
  %0 = load i16**, i16*** %ptr.addr, align 8
  %1 = load i16*, i16** %0, align 8, !tbaa !1
  %call = call i16* @_ZN6thrust6detail14pointer_traitsIPKsE3getES3_(i16* %1)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.545"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.545"*, align 8
  store %"class.thrust::iterator_facade.545"* %this, %"class.thrust::iterator_facade.545"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.545"*, %"class.thrust::iterator_facade.545"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.543"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.545"* %this1)
  %call2 = call dereferenceable(2) i16* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKsEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %call)
  ret i16* %call2
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIsEEEENT_9referenceERKS4_(%"class.thrust::device_ptr.496"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.553", align 8
  %f.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  store %"class.thrust::device_ptr.496"* %f, %"class.thrust::device_ptr.496"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.496"* %0 to %"class.thrust::pointer.497"*
  %call = call i16* @_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEE11dereferenceEv(%"class.thrust::pointer.497"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.553", %"class.thrust::device_reference.553"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %call, i16** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.553", %"class.thrust::device_reference.553"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  %2 = load i16*, i16** %coerce.dive9, align 8
  ret i16* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.499"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.499"*, align 8
  store %"class.thrust::iterator_facade.499"* %this, %"class.thrust::iterator_facade.499"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.499"*, %"class.thrust::iterator_facade.499"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.499"* %this1 to %"class.thrust::device_ptr.496"*
  ret %"class.thrust::device_ptr.496"* %0
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust7pointerIsNS_6system4cuda6detail3tagENS_16device_referenceIsEENS_10device_ptrIsEEE11dereferenceEv(%"class.thrust::pointer.497"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.553", align 8
  %this.addr = alloca %"class.thrust::pointer.497"*, align 8
  store %"class.thrust::pointer.497"* %this, %"class.thrust::pointer.497"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.497"*, %"class.thrust::pointer.497"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.497"* %this1 to %"class.thrust::device_ptr.496"*
  call void @_ZN6thrust16device_referenceIsEC2ERKNS_10device_ptrIsEE(%"class.thrust::device_reference.553"* %retval, %"class.thrust::device_ptr.496"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.553", %"class.thrust::device_reference.553"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %1 = load i16*, i16** %coerce.dive5, align 8
  ret i16* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceIsEC2ERKNS_10device_ptrIsEE(%"class.thrust::device_reference.553"* %this, %"class.thrust::device_ptr.496"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.553"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  store %"class.thrust::device_reference.553"* %this, %"class.thrust::device_reference.553"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.496"* %ptr, %"class.thrust::device_ptr.496"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.553"*, %"class.thrust::device_reference.553"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.553"* %this1 to %"class.thrust::reference.554"*
  %1 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceIsNS_10device_ptrIsEENS_16device_referenceIsEEEC2ERKS2_(%"class.thrust::reference.554"* %0, %"class.thrust::device_ptr.496"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceIsNS_10device_ptrIsEENS_16device_referenceIsEEEC2ERKS2_(%"class.thrust::reference.554"* %this, %"class.thrust::device_ptr.496"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.554"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  store %"class.thrust::reference.554"* %this, %"class.thrust::reference.554"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.496"* %ptr, %"class.thrust::device_ptr.496"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.554"*, %"class.thrust::reference.554"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.554", %"class.thrust::reference.554"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.496"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.496"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i16* @_ZN6thrust6detail14pointer_traitsIPKsE3getES3_(i16* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i16*, align 8
  store i16* %ptr, i16** %ptr.addr, align 8, !tbaa !1
  %0 = load i16*, i16** %ptr.addr, align 8, !tbaa !1
  ret i16* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(2) i16* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKsEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  store %"class.thrust::detail::normal_iterator.543"* %f, %"class.thrust::detail::normal_iterator.543"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.543"* %0 to %"class.thrust::iterator_adaptor.544"*
  %call = call dereferenceable(2) i16* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.544"* %1)
  ret i16* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.543"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.545"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.545"*, align 8
  store %"class.thrust::iterator_facade.545"* %this, %"class.thrust::iterator_facade.545"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.545"*, %"class.thrust::iterator_facade.545"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.545"* %this1 to %"class.thrust::detail::normal_iterator.543"*
  ret %"class.thrust::detail::normal_iterator.543"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(2) i16* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.544"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.544"*, align 8
  store %"class.thrust::iterator_adaptor.544"* %this, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.544"*, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %this1, i32 0, i32 0
  %0 = load i16*, i16** %m_iterator, align 8, !tbaa !381
  ret i16* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl(%"class.thrust::iterator_facade.499"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.499"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.499"* %this, %"class.thrust::iterator_facade.499"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.499"*, %"class.thrust::iterator_facade.499"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.499"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIsEEEEvRT_NS4_15difference_typeE(%"class.thrust::device_ptr.496"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.499"* %this1)
  ret %"class.thrust::device_ptr.496"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIsEEEEvRT_NS4_15difference_typeE(%"class.thrust::device_ptr.496"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.496"* %f, %"class.thrust::device_ptr.496"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.496"* %0 to %"class.thrust::iterator_adaptor.498"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7advanceEl(%"class.thrust::iterator_adaptor.498"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.499"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.499"*, align 8
  store %"class.thrust::iterator_facade.499"* %this, %"class.thrust::iterator_facade.499"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.499"*, %"class.thrust::iterator_facade.499"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.499"* %this1 to %"class.thrust::device_ptr.496"*
  ret %"class.thrust::device_ptr.496"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7advanceEl(%"class.thrust::iterator_adaptor.498"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.498"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.498"* %this, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.498"*, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %this1, i32 0, i32 0
  %1 = load i16*, i16** %m_iterator, align 8, !tbaa !379
  %add.ptr = getelementptr inbounds i16, i16* %1, i64 %0
  store i16* %add.ptr, i16** %m_iterator, align 8, !tbaa !379
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIsEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.493"* %i, %"class.thrust::detail::normal_iterator.493"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.493"* %i, %"class.thrust::detail::normal_iterator.493"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %1 to %"class.thrust::iterator_facade.495"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl(%"class.thrust::iterator_facade.495"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl(%"class.thrust::iterator_facade.495"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.495"* %this, %"class.thrust::iterator_facade.495"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.495"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.495"* %this1)
  ret %"class.thrust::detail::normal_iterator.493"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.493"* %f, %"class.thrust::detail::normal_iterator.493"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.493"* %0 to %"class.thrust::iterator_adaptor.494"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.494"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.495"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  store %"class.thrust::iterator_facade.495"* %this, %"class.thrust::iterator_facade.495"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.495"* %this1 to %"class.thrust::detail::normal_iterator.493"*
  ret %"class.thrust::detail::normal_iterator.493"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.494"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.494"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.494"* %this, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.494"*, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.496"* %m_iterator to %"class.thrust::iterator_facade.499"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZN6thrust15iterator_facadeINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl(%"class.thrust::iterator_facade.499"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIsEENS_10device_ptrIsEElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %a, i16* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.496", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.496", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %p.coerce, i16** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.491"* %a, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.491"*, %"class.thrust::device_malloc_allocator.491"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.496"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.496"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive4, i32 0, i32 0
  %4 = load i16*, i16** %coerce.dive5, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIsEENS_10device_ptrIsEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1) %0, i16* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS5_sS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.495"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.495"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  store %"class.thrust::iterator_facade.495"* %lhs, %"class.thrust::iterator_facade.495"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.495"* %rhs, %"class.thrust::iterator_facade.495"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.495"* %0 to %"class.thrust::detail::normal_iterator.493"*
  %2 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.495"* %2 to %"class.thrust::detail::normal_iterator.493"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIsEENS_10device_ptrIsEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_(%"class.thrust::device_malloc_allocator.491"* dereferenceable(1), i16* %.coerce, i64) #1 comdat {
entry:
  %2 = alloca %"class.thrust::device_ptr.496", align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator.491"*, align 8
  %.addr3 = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %2, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive1, i32 0, i32 0
  store i16* %.coerce, i16** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.491"* %0, %"class.thrust::device_malloc_allocator.491"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr3, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.493"* %f1, %"class.thrust::detail::normal_iterator.493"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.493"* %f2, %"class.thrust::detail::normal_iterator.493"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  store %"class.thrust::detail::normal_iterator.493"* %f1, %"class.thrust::detail::normal_iterator.493"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.493"* %f2, %"class.thrust::detail::normal_iterator.493"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %1 to %"class.thrust::iterator_adaptor.494"*
  %3 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.493"* %3 to %"class.thrust::iterator_adaptor.494"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.494"* %2, %"class.thrust::iterator_adaptor.494"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.494"* %this, %"class.thrust::iterator_adaptor.494"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.494"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.494"*, align 8
  store %"class.thrust::iterator_adaptor.494"* %this, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.494"* %y, %"class.thrust::iterator_adaptor.494"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.494"*, %"class.thrust::iterator_adaptor.494"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.494"*, %"class.thrust::iterator_adaptor.494"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.496"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIsEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.494"* %0)
  %1 = bitcast %"class.thrust::device_ptr.496"* %call to %"class.thrust::iterator_facade.499"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.496"* %m_iterator to %"class.thrust::iterator_facade.499"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS2_sS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.499"* dereferenceable(1) %1, %"class.thrust::iterator_facade.499"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrIsEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS2_sS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.499"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.499"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.499"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.499"*, align 8
  store %"class.thrust::iterator_facade.499"* %lhs, %"class.thrust::iterator_facade.499"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.499"* %rhs, %"class.thrust::iterator_facade.499"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.499"*, %"class.thrust::iterator_facade.499"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.499"* %0 to %"class.thrust::device_ptr.496"*
  %2 = load %"class.thrust::iterator_facade.499"*, %"class.thrust::iterator_facade.499"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.499"* %2 to %"class.thrust::device_ptr.496"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIsEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_(%"class.thrust::device_ptr.496"* dereferenceable(8) %1, %"class.thrust::device_ptr.496"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIsEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_(%"class.thrust::device_ptr.496"* dereferenceable(8) %f1, %"class.thrust::device_ptr.496"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.496"* %f1, %"class.thrust::device_ptr.496"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.496"* %f2, %"class.thrust::device_ptr.496"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIsEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.496"* dereferenceable(8) %0, %"class.thrust::device_ptr.496"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIsEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.496"* dereferenceable(8) %f1, %"class.thrust::device_ptr.496"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.496"*, align 8
  store %"class.thrust::device_ptr.496"* %f1, %"class.thrust::device_ptr.496"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.496"* %f2, %"class.thrust::device_ptr.496"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.496"* %1 to %"class.thrust::iterator_adaptor.498"*
  %3 = load %"class.thrust::device_ptr.496"*, %"class.thrust::device_ptr.496"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.496"* %3 to %"class.thrust::iterator_adaptor.498"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE11distance_toIS2_S3_sS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.498"* %2, %"class.thrust::iterator_adaptor.498"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE11distance_toIS2_S3_sS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.498"* %this, %"class.thrust::iterator_adaptor.498"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.498"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.498"*, align 8
  store %"class.thrust::iterator_adaptor.498"* %this, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.498"* %y, %"class.thrust::iterator_adaptor.498"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.498"*, %"class.thrust::iterator_adaptor.498"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.498"*, %"class.thrust::iterator_adaptor.498"** %y.addr, align 8
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE4baseEv(%"class.thrust::iterator_adaptor.498"* %0)
  %1 = load i16*, i16** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %this1, i32 0, i32 0
  %2 = load i16*, i16** %m_iterator, align 8, !tbaa !379
  %sub.ptr.lhs.cast = ptrtoint i16* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i16* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust6detail18contiguous_storageIsSaIsEE5beginEv(%"class.thrust::detail::contiguous_storage.471"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.543", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPKsEC2IPsEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.543"* %retval, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.543", %"class.thrust::detail::normal_iterator.543"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %coerce.dive, i32 0, i32 0
  %0 = load i16*, i16** %coerce.dive2, align 8
  ret i16* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPKsEC2IPsEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.543"* %this, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i16*, align 8
  store %"class.thrust::detail::normal_iterator.543"* %this, %"class.thrust::detail::normal_iterator.543"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.475"* %other, %"class.thrust::detail::normal_iterator.475"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.543"* %this1 to %"class.thrust::iterator_adaptor.544"*
  %2 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %2 to %"class.thrust::iterator_adaptor.476"*
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %3)
  %4 = load i16*, i16** %call, align 8, !tbaa !1
  store i16* %4, i16** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.544"* %1, i16** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.544"* %this, i16** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.544"*, align 8
  %iter.addr = alloca i16**, align 8
  store %"class.thrust::iterator_adaptor.544"* %this, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8, !tbaa !1
  store i16** %iter, i16*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.544"*, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.544"* %this1 to %"class.thrust::iterator_facade.545"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %this1, i32 0, i32 0
  %1 = load i16**, i16*** %iter.addr, align 8
  %2 = load i16*, i16** %1, align 8, !tbaa !1
  store i16* %2, i16** %m_iterator, align 8, !tbaa !381
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.543"* %i, %"class.thrust::detail::normal_iterator.543"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.543"* %i, %"class.thrust::detail::normal_iterator.543"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKsEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.543"* %i, %"class.thrust::detail::normal_iterator.543"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.543"* %1 to %"class.thrust::iterator_facade.545"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.543"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.545"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.543"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.545"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.545"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.545"* %this, %"class.thrust::iterator_facade.545"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.545"*, %"class.thrust::iterator_facade.545"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.543"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.545"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKsEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.543"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.545"* %this1)
  ret %"class.thrust::detail::normal_iterator.543"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKsEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.543"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.543"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.543"* %f, %"class.thrust::detail::normal_iterator.543"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.543"*, %"class.thrust::detail::normal_iterator.543"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.543"* %0 to %"class.thrust::iterator_adaptor.544"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.544"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.543"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.545"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.545"*, align 8
  store %"class.thrust::iterator_facade.545"* %this, %"class.thrust::iterator_facade.545"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.545"*, %"class.thrust::iterator_facade.545"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.545"* %this1 to %"class.thrust::detail::normal_iterator.543"*
  ret %"class.thrust::detail::normal_iterator.543"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.544"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.544"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.544"* %this, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.544"*, %"class.thrust::iterator_adaptor.544"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.544", %"class.thrust::iterator_adaptor.544"* %this1, i32 0, i32 0
  %1 = load i16*, i16** %m_iterator, align 8, !tbaa !381
  %add.ptr = getelementptr inbounds i16, i16* %1, i64 %0
  store i16* %add.ptr, i16** %m_iterator, align 8, !tbaa !381
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.479"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  %ref.tmp = alloca %"class.thrust::device_malloc_allocator.503", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.479"* %v, %"class.thrust::detail::vector_base.479"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEEC2Ev(%"class.thrust::device_malloc_allocator.503"* %ref.tmp)
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_(%"class.thrust::detail::contiguous_storage.502"* %m_storage, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEED2Ev(%"class.thrust::device_malloc_allocator.503"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !387
  %0 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %v.addr, align 8
  %call = invoke %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %v.addr, align 8
  %call7 = invoke %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.479"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call7, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive10, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive12, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_(%"class.thrust::detail::vector_base.501"* %this1, %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEED2Ev(%"class.thrust::device_malloc_allocator.503"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.502"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEEC2Ev(%"class.thrust::device_malloc_allocator.503"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  store %"class.thrust::device_malloc_allocator.503"* %this, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_(%"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  %alloc.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.503"* %alloc, %"class.thrust::device_malloc_allocator.503"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %alloc.addr, align 8
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEEC2ERKS3_(%"class.thrust::device_malloc_allocator.503"* %m_allocator, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust10device_ptrINS_4pairIssEEEC2IS2_EEPT_(%"class.thrust::device_ptr.508"* %agg.tmp, %"struct.thrust::pair.487"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.505"* %m_begin, %"struct.thrust::pair.487"* %1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !392
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEED2Ev(%"class.thrust::device_malloc_allocator.503"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEED2Ev(%"class.thrust::device_malloc_allocator.503"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  store %"class.thrust::device_malloc_allocator.503"* %this, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_(%"class.thrust::detail::vector_base.501"* %this, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive9, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.501"* %this4, %"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.479", %"class.thrust::detail::vector_base.479"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.480"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive3, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.479"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.479"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.502"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.502"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEED2Ev(%"class.thrust::device_malloc_allocator.503"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEED2Ev(%"class.thrust::device_malloc_allocator.503"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEEC2ERKS3_(%"class.thrust::device_malloc_allocator.503"* %this, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  store %"class.thrust::device_malloc_allocator.503"* %this, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.503"* %0, %"class.thrust::device_malloc_allocator.503"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrINS_4pairIssEEEC2IS2_EEPT_(%"class.thrust::device_ptr.508"* %this, %"struct.thrust::pair.487"* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %ptr.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::device_ptr.508"* %this, %"class.thrust::device_ptr.508"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %ptr, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.508"* %this1 to %"class.thrust::pointer.509"*
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_(%"class.thrust::pointer.509"* %0, %"struct.thrust::pair.487"* %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.505"* %this, %"struct.thrust::pair.487"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.508", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"class.thrust::detail::normal_iterator.505"* %this, %"class.thrust::detail::normal_iterator.505"** %this.addr, align 8, !tbaa !1
  %this3 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.505"* %this3 to %"class.thrust::iterator_adaptor.506"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.506"* %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_(%"class.thrust::pointer.509"* %this, %"struct.thrust::pair.487"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.509"*, align 8
  %other.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::pointer.509"* %this, %"class.thrust::pointer.509"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %other, %"struct.thrust::pair.487"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.509"*, %"class.thrust::pointer.509"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.509"* %this1 to %"class.thrust::iterator_adaptor.510"*
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_(%"class.thrust::iterator_adaptor.510"* %0, %"struct.thrust::pair.487"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_(%"class.thrust::iterator_adaptor.510"* %this, %"struct.thrust::pair.487"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.510"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"class.thrust::iterator_adaptor.510"* %this, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"** %iter, %"struct.thrust::pair.487"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.510"*, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.510"* %this1 to %"class.thrust::iterator_facade.511"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !393
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.506"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.506"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  store %"class.thrust::iterator_adaptor.506"* %this, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %iter, %"class.thrust::device_ptr.508"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.506"*, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.506"* %this1 to %"class.thrust::iterator_facade.507"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.508"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.508"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.501"* %this, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive8, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair.487"* %6, %"struct.thrust::pair.487"* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive12, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive14, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE(%"class.thrust::detail::vector_base.501"* %this4, i64 %8, %"struct.thrust::pair.487"* %13, %"struct.thrust::pair.487"* %14, %"class.thrust::detail::contiguous_storage.502"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !387
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive5, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive7, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_(%"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE(%"class.thrust::detail::vector_base.501"* %this, i64 %requested_size, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"class.thrust::detail::contiguous_storage.502"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp54 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.502"* %new_storage, %"class.thrust::detail::contiguous_storage.502"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.502"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8capacityEv(%"class.thrust::detail::vector_base.501"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::vector_base.501"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup78

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8allocateEm(%"class.thrust::detail::contiguous_storage.502"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %new_storage.addr, align 8
  %call21 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.502"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call21, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive27, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive29, i32 0, i32 0
  %20 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp18, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive34, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive35, align 8
  %call37 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_(%"class.thrust::detail::contiguous_storage.502"* %m_storage, %"struct.thrust::pair.487"* %19, %"struct.thrust::pair.487"* %20, %"struct.thrust::pair.487"* %21)
          to label %invoke.cont36 unwind label %lpad19

invoke.cont36:                                    ; preds = %invoke.cont20
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %coerce, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive41, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call37, %"struct.thrust::pair.487"** %coerce.dive42, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.505"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %new_storage.addr, align 8
  %call45 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.502"* %27)
          to label %invoke.cont44 unwind label %lpad43

invoke.cont44:                                    ; preds = %catch
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %new_storage_end, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive49, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call45, %"struct.thrust::pair.487"** %coerce.dive50, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont52 unwind label %lpad51

invoke.cont52:                                    ; preds = %invoke.cont44
  %m_storage53 = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %new_storage.addr, align 8
  %call56 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.502"* %29)
          to label %invoke.cont55 unwind label %lpad51

invoke.cont55:                                    ; preds = %invoke.cont52
  %coerce.dive57 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp54, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive60, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call56, %"struct.thrust::pair.487"** %coerce.dive61, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp62 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.505"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive63 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp54, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive64, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive66, i32 0, i32 0
  %32 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive67, align 8
  %coerce.dive68 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp62, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive68, i32 0, i32 0
  %coerce.dive70 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive69, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive71, i32 0, i32 0
  %33 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive72, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.502"* %m_storage53, %"struct.thrust::pair.487"* %32, %"struct.thrust::pair.487"* %33)
          to label %invoke.cont73 unwind label %lpad51

invoke.cont73:                                    ; preds = %invoke.cont55
  %34 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.502"* %34)
          to label %invoke.cont74 unwind label %lpad51

invoke.cont74:                                    ; preds = %invoke.cont73
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad51

lpad43:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup76

lpad51:                                           ; preds = %invoke.cont74, %invoke.cont73, %invoke.cont55, %invoke.cont52, %invoke.cont44
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.505"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup76

ehcleanup76:                                      ; preds = %lpad51, %lpad43
  invoke void @__cxa_end_catch()
          to label %invoke.cont77 unwind label %terminate.lpad

invoke.cont77:                                    ; preds = %ehcleanup76
  br label %ehcleanup78

try.cont:                                         ; preds = %invoke.cont36
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup78:                                      ; preds = %invoke.cont77, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup78
  %exn79 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn79, 0
  %lpad.val80 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val80

terminate.lpad:                                   ; preds = %ehcleanup76
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont74, %invoke.cont14
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_(%"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive8, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE(%"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE(%"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to %"class.thrust::iterator_facade.557"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to %"class.thrust::iterator_facade.557"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.557"* dereferenceable(1) %1, %"class.thrust::iterator_facade.557"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.557"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.557"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  store %"class.thrust::iterator_facade.557"* %lhs, %"class.thrust::iterator_facade.557"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.557"* %rhs, %"class.thrust::iterator_facade.557"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.557"* %0 to %"class.thrust::detail::normal_iterator.555"*
  %2 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.557"* %2 to %"class.thrust::detail::normal_iterator.555"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.555"* %f1, %"class.thrust::detail::normal_iterator.555"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.555"* %f2, %"class.thrust::detail::normal_iterator.555"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  store %"class.thrust::detail::normal_iterator.555"* %f1, %"class.thrust::detail::normal_iterator.555"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.555"* %f2, %"class.thrust::detail::normal_iterator.555"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %1 to %"class.thrust::iterator_adaptor.556"*
  %3 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %3 to %"class.thrust::iterator_adaptor.556"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.556"* %2, %"class.thrust::iterator_adaptor.556"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  store %"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.556"* %y, %"class.thrust::iterator_adaptor.556"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.556"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.487"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.487"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.556"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  store %"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.487"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.502"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp7 = alloca %"class.thrust::device_ptr.508", align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.502"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.505"* %m_begin to %"class.thrust::iterator_adaptor.506"*
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.506"* %0)
  %1 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.502"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.487"* %3, i64 %call3)
  %m_begin6 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrINS_4pairIssEEEC2IS2_EEPT_(%"class.thrust::device_ptr.508"* %agg.tmp7, %"struct.thrust::pair.487"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive9, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.505"* %ref.tmp, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.505"* %m_begin6 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.505"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !392
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8capacityEv(%"class.thrust::detail::vector_base.501"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.502"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::vector_base.501"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.502"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8allocateEm(%"class.thrust::detail::contiguous_storage.502"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %ref.tmp8 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.508", align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8allocateERS5_m(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.505"* %ref.tmp, %"struct.thrust::pair.487"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.505"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.505"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !392
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin7 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrINS_4pairIssEEEC2IS2_EEPT_(%"class.thrust::device_ptr.508"* %agg.tmp9, %"struct.thrust::pair.487"* null)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive11, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.505"* %ref.tmp8, %"struct.thrust::pair.487"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.505"* %m_begin7 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.505"* %ref.tmp8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size13 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size13, align 8, !tbaa !392
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_(%"class.thrust::detail::contiguous_storage.502"* %this, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this9 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this9, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp11 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to %"class.thrust::iterator_adaptor.506"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.506"* %6)
  %7 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::device_ptr.508"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp10, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive13, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive15, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive18, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair.487"* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIssEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10, %"struct.thrust::pair.487"* %11)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call20, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive25, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.505"* %retval, %"struct.thrust::pair.487"* %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %13) #5
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive30, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive31, align 8
  ret %"struct.thrust::pair.487"* %14
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.502"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.505"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.505"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.505"* %i, %"class.thrust::detail::normal_iterator.505"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.502"* %this, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this10 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this10, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.505"* %first to %"class.thrust::iterator_adaptor.506"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.506"* %0)
  %1 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.505"* %last to %"class.thrust::iterator_facade.507"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.505"* %first to %"class.thrust::iterator_facade.507"*
  %call11 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.507"* dereferenceable(1) %3, %"class.thrust::iterator_facade.507"* dereferenceable(1) %4)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive13, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIssEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.487"* %5, i64 %call11)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.502"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !392
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.508", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.506"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.506"*, align 8
  store %"class.thrust::iterator_adaptor.506"* %this, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.506"*, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.508"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.508", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEE10deallocateENS_10device_ptrIS2_EEm(%"class.thrust::device_malloc_allocator.503"* %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEE10deallocateENS_10device_ptrIS2_EEm(%"class.thrust::device_malloc_allocator.503"* %this, %"struct.thrust::pair.487"* %p.coerce, i64 %cnt) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.508", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %cnt.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.503"* %this, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8
  call void @_ZN6thrust10device_ptrIvEC2INS_4pairIssEEEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %agg.tmp, %"class.thrust::device_ptr.508"* dereferenceable(8) %p)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive5, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust11device_freeENS_10device_ptrIvEE(i8* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIvEC2INS_4pairIssEEEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.115"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  store %"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.115"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %other, %"class.thrust::device_ptr.508"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.115"*, %"class.thrust::device_ptr.115"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.115"* %this1 to %"class.thrust::pointer.116"*
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %other.addr, align 8
  call void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIssEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE(%"class.thrust::pointer.116"* %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIssEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE(%"class.thrust::pointer.116"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.116"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  store %"class.thrust::pointer.116"* %this, %"class.thrust::pointer.116"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %other, %"class.thrust::device_ptr.508"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.116"*, %"class.thrust::pointer.116"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.116"* %this1 to %"class.thrust::iterator_adaptor.117"*
  %2 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.508"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIssEEEEE3getES5_(%"struct.thrust::pair.487"* %5)
  %6 = bitcast %"struct.thrust::pair.487"* %call to i8*
  store i8* %6, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_(%"class.thrust::iterator_adaptor.117"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIssEEEEE3getES5_(%"struct.thrust::pair.487"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.508"* %ptr to %"class.thrust::pointer.509"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv(%"class.thrust::pointer.509"* %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv(%"class.thrust::pointer.509"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.509"*, align 8
  store %"class.thrust::pointer.509"* %this, %"class.thrust::pointer.509"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.509"*, %"class.thrust::pointer.509"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.509"* %this1 to %"class.thrust::iterator_adaptor.510"*
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.510"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.510"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.510"*, align 8
  store %"class.thrust::iterator_adaptor.510"* %this, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.510"*, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.487"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.502"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8max_sizeERKS5_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8max_sizeERKS5_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIssEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIssEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8allocateERS5_m(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIssEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.558", align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust10device_ptrIKNS_4pairIssEEEC2IS2_EEPT_(%"class.thrust::device_ptr.558"* %agg.tmp, %"struct.thrust::pair.487"* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEE8allocateEmNS_10device_ptrIKS2_EE(%"class.thrust::device_malloc_allocator.503"* %0, i64 %1, %"struct.thrust::pair.487"* %2)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive7, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  ret %"struct.thrust::pair.487"* %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust23device_malloc_allocatorINS_4pairIssEEE8allocateEmNS_10device_ptrIKS2_EE(%"class.thrust::device_malloc_allocator.503"* %this, i64 %cnt, %"struct.thrust::pair.487"* %.coerce) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %0 = alloca %"class.thrust::device_ptr.558", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %cnt.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %0, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.503"* %this, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8
  %1 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK6thrust23device_malloc_allocatorINS_4pairIssEEE8max_sizeEv(%"class.thrust::device_malloc_allocator.503"* %this3)
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %2 = bitcast i8* %exception to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %2) #5
  call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt9bad_alloc to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD1Ev to i8*)) #15
  unreachable

if.end:                                           ; preds = %entry
  %3 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call4 = call %"struct.thrust::pair.487"* @_ZN6thrust13device_mallocINS_4pairIssEEEENS_10device_ptrIT_EEm(i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call4, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive9, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKNS_4pairIssEEEC2IS2_EEPT_(%"class.thrust::device_ptr.558"* %this, %"struct.thrust::pair.487"* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  %ptr.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::device_ptr.558"* %this, %"class.thrust::device_ptr.558"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %ptr, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.558"* %this1 to %"class.thrust::pointer.559"*
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_(%"class.thrust::pointer.559"* %0, %"struct.thrust::pair.487"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust23device_malloc_allocatorINS_4pairIssEEE8max_sizeEv(%"class.thrust::device_malloc_allocator.503"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  store %"class.thrust::device_malloc_allocator.503"* %this, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %this.addr, align 8
  %call = call i64 @_ZNSt14numeric_limitsImE3maxEv() #5
  %div = udiv i64 %call, 4
  ret i64 %div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust13device_mallocINS_4pairIssEEEENS_10device_ptrIT_EEm(i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %n.addr = alloca i64, align 8
  %s = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %coerce = alloca %"class.thrust::pointer.562", align 8
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6mallocINS_4pairIssEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.562"* %coerce)
  call void @_ZN6thrust10device_ptrINS_4pairIssEEEC2IS2_EEPT_(%"class.thrust::device_ptr.508"* %retval, %"struct.thrust::pair.487"* %call2)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.end(i64 1, i8* %3) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %4
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6mallocINS_4pairIssEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.562", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::pair.487"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIssEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.562"* dereferenceable(8) %ref.tmp)
  store %"struct.thrust::pair.487"* %call4, %"struct.thrust::pair.487"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.562"* %retval, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"struct.thrust::pair.487"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive5, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.487"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.562"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.562"*, align 8
  store %"class.thrust::pointer.562"* %this, %"class.thrust::pointer.562"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.562"* %this1 to %"class.thrust::iterator_adaptor.563"*
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.563"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.562"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.562"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  store %"class.thrust::pointer.562"* %ptr, %"class.thrust::pointer.562"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.487"* %3)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIssEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 4, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to %"struct.thrust::pair.487"*
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.562"* %retval, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.562"* %this, %"struct.thrust::pair.487"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.562"*, align 8
  %other.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::pointer.562"* %this, %"class.thrust::pointer.562"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %other, %"struct.thrust::pair.487"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.562"* %this1 to %"class.thrust::iterator_adaptor.563"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.563"* %0, %"struct.thrust::pair.487"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.487"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.562"* %ptr)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.563"* %this, %"struct.thrust::pair.487"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.563"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"class.thrust::iterator_adaptor.563"* %this, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"** %iter, %"struct.thrust::pair.487"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.563"*, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.563"* %this1 to %"class.thrust::iterator_facade.564"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !397
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.563"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.563"*, align 8
  store %"class.thrust::iterator_adaptor.563"* %this, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.563"*, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.487"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_(%"class.thrust::pointer.559"* %this, %"struct.thrust::pair.487"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.559"*, align 8
  %other.addr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::pointer.559"* %this, %"class.thrust::pointer.559"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %other, %"struct.thrust::pair.487"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.559"*, %"class.thrust::pointer.559"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.559"* %this1 to %"class.thrust::iterator_adaptor.560"*
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %other.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %1, %"struct.thrust::pair.487"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.560"* %0, %"struct.thrust::pair.487"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.560"* %this, %"struct.thrust::pair.487"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.560"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"class.thrust::iterator_adaptor.560"* %this, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"** %iter, %"struct.thrust::pair.487"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.560"*, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.560"* %this1 to %"class.thrust::iterator_facade.561"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !399
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIssEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp8 to i8*
  %7 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive9, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive11, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive14, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIssEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive20, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  ret %"struct.thrust::pair.487"* %11
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIssEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIssEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive9, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive11, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive14, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10, %"struct.thrust::pair.487"* %11)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive20, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  ret %"struct.thrust::pair.487"* %12
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  %call8 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call8)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call9 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call10 = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %2, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 0
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 1
  store %"struct.thrust::execution_policy.120"* %10, %"struct.thrust::execution_policy.120"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.132"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp12 to i8*
  %17 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive13, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive15, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive18, i32 0, i32 0
  %20 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair.487"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %11, %"struct.thrust::pair.487"* %18, %"struct.thrust::pair.487"* %19, %"struct.thrust::pair.487"* %20)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call20, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive25, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  ret %"struct.thrust::pair.487"* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIssEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIssEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call7 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp8 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp9 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp10 to i8*
  %8 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive11, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp9, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive13, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp10, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive16, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  %call18 = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.487"* %14, %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"* %16)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call18, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive23, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive24, align 8
  ret %"struct.thrust::pair.487"* %17
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.508", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive10, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp8, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive12, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive15, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive16, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %17, %"struct.thrust::pair.487"* %18)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive21, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp10 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.555"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.555"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp7, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive12, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive14, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive17, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %17, %"struct.thrust::pair.487"* %18)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive23, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive24, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp12 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp13 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.555"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp9 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.555"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive14, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive16, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive19, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive20, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %17, %"struct.thrust::pair.487"* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive25, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.508", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.555"* %end to %"class.thrust::iterator_facade.557"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.555"* %begin to %"class.thrust::iterator_facade.557"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.557"* dereferenceable(1) %7, %"class.thrust::iterator_facade.557"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.555"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp9 to i8*
  %13 = bitcast %"class.thrust::device_ptr.508"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive10, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive13, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %14, i64 %11, %"struct.thrust::pair.487"* %15)
  %16 = bitcast %"class.thrust::device_ptr.508"* %result to %"class.thrust::iterator_facade.511"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call15 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.511"* dereferenceable(1) %16, i64 %17)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call15, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive20, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIssEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %first.coerce, i64 %n, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %result = alloca %"class.thrust::device_ptr.508", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %coerce = alloca %"class.thrust::device_reference.565", align 8
  %src = alloca i8*, align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.487"*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %result, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::device_ptr.508"* %result to %"class.thrust::iterator_facade.511"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv(%"class.thrust::iterator_facade.511"* %1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.565", %"class.thrust::device_reference.565"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %2 = bitcast %"class.thrust::device_reference.565"* %coerce to %"class.thrust::reference.566"*
  %call10 = call %"struct.thrust::pair.487"* @_ZNK6thrust9referenceINS_4pairIssEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv(%"class.thrust::reference.566"* %2)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call10, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  %call14 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIssEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"class.thrust::device_ptr.508"* dereferenceable(8) %ref.tmp)
  %3 = bitcast %"struct.thrust::pair.487"* %call14 to i8*
  store i8* %3, i8** %dst, align 8, !tbaa !1
  %4 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to %"class.thrust::iterator_facade.557"*
  %call16 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.557"* %5)
  store %"struct.thrust::pair.487"* %call16, %"struct.thrust::pair.487"** %ref.tmp15, align 8, !tbaa !1
  %call17 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.487"** dereferenceable(8) %ref.tmp15)
  %6 = bitcast %"struct.thrust::pair.487"* %call17 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call18 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call18 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %11, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %10, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %13)
  store i32 %call21, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system122 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %15, i32 0, i32 0
  %ref23 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system122, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.88"* %ref23 to %"struct.thrust::detail::execution_policy_base.85"*
  %call24 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call24 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system225 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %18, i32 0, i32 1
  %ref26 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system225, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.120"* %ref26 to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call28 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %17, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call28, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 4
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrustplINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.511"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.511"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::device_ptr.508", align 8
  store %"class.thrust::iterator_facade.511"* %i, %"class.thrust::iterator_facade.511"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::device_ptr.508"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.511"*, %"class.thrust::iterator_facade.511"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.511"* %1 to %"class.thrust::device_ptr.508"*
  %3 = bitcast %"class.thrust::device_ptr.508"* %tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.508"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::device_ptr.508"* %tmp to %"class.thrust::iterator_facade.511"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.511"* %5, i64 %6)
  %7 = bitcast %"class.thrust::device_ptr.508"* %retval to i8*
  %8 = bitcast %"class.thrust::device_ptr.508"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.508"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.487"* %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIssEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"class.thrust::device_ptr.508"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  store %"class.thrust::device_ptr.508"* %ptr, %"class.thrust::device_ptr.508"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIssEEEEE3getES5_(%"struct.thrust::pair.487"* %3)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv(%"class.thrust::iterator_facade.511"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.565", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.511"*, align 8
  store %"class.thrust::iterator_facade.511"* %this, %"class.thrust::iterator_facade.511"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.511"*, %"class.thrust::iterator_facade.511"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.511"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIssEEEEEENT_9referenceERKS6_(%"class.thrust::device_ptr.508"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.565", %"class.thrust::device_reference.565"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.565", %"class.thrust::device_reference.565"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust9referenceINS_4pairIssEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv(%"class.thrust::reference.566"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %this.addr = alloca %"class.thrust::reference.566"*, align 8
  store %"class.thrust::reference.566"* %this, %"class.thrust::reference.566"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.566"*, %"class.thrust::reference.566"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.508"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.508"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.487"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"struct.thrust::pair.487"** %ptr, %"struct.thrust::pair.487"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %ptr.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %0, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsIPKNS_4pairIssEEE3getES5_(%"struct.thrust::pair.487"* %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.557"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  store %"class.thrust::iterator_facade.557"* %this, %"class.thrust::iterator_facade.557"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.557"* %this1)
  %call2 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENT_9referenceERKS9_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %call)
  ret %"struct.thrust::pair.487"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIssEEEEEENT_9referenceERKS6_(%"class.thrust::device_ptr.508"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.565", align 8
  %f.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  store %"class.thrust::device_ptr.508"* %f, %"class.thrust::device_ptr.508"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %0 to %"class.thrust::pointer.509"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv(%"class.thrust::pointer.509"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.565", %"class.thrust::device_reference.565"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.565", %"class.thrust::device_reference.565"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.511"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.511"*, align 8
  store %"class.thrust::iterator_facade.511"* %this, %"class.thrust::iterator_facade.511"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.511"*, %"class.thrust::iterator_facade.511"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.511"* %this1 to %"class.thrust::device_ptr.508"*
  ret %"class.thrust::device_ptr.508"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv(%"class.thrust::pointer.509"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.565", align 8
  %this.addr = alloca %"class.thrust::pointer.509"*, align 8
  store %"class.thrust::pointer.509"* %this, %"class.thrust::pointer.509"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.509"*, %"class.thrust::pointer.509"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.509"* %this1 to %"class.thrust::device_ptr.508"*
  call void @_ZN6thrust16device_referenceINS_4pairIssEEEC2ERKNS_10device_ptrIS2_EE(%"class.thrust::device_reference.565"* %retval, %"class.thrust::device_ptr.508"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.565", %"class.thrust::device_reference.565"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceINS_4pairIssEEEC2ERKNS_10device_ptrIS2_EE(%"class.thrust::device_reference.565"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.565"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  store %"class.thrust::device_reference.565"* %this, %"class.thrust::device_reference.565"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %ptr, %"class.thrust::device_ptr.508"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.565"*, %"class.thrust::device_reference.565"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.565"* %this1 to %"class.thrust::reference.566"*
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIssEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_(%"class.thrust::reference.566"* %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIssEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_(%"class.thrust::reference.566"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.566"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  store %"class.thrust::reference.566"* %this, %"class.thrust::reference.566"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %ptr, %"class.thrust::device_ptr.508"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.566"*, %"class.thrust::reference.566"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.566", %"class.thrust::reference.566"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsIPKNS_4pairIssEEE3getES5_(%"struct.thrust::pair.487"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::pair.487"* %ptr, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %ptr.addr, align 8, !tbaa !1
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENT_9referenceERKS9_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  store %"class.thrust::detail::normal_iterator.555"* %f, %"class.thrust::detail::normal_iterator.555"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %0 to %"class.thrust::iterator_adaptor.556"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.556"* %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.557"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  store %"class.thrust::iterator_facade.557"* %this, %"class.thrust::iterator_facade.557"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.557"* %this1 to %"class.thrust::detail::normal_iterator.555"*
  ret %"class.thrust::detail::normal_iterator.555"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.556"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  store %"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.511"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.511"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.511"* %this, %"class.thrust::iterator_facade.511"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.511"*, %"class.thrust::iterator_facade.511"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.511"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIssEEEEEEvRT_NS6_15difference_typeE(%"class.thrust::device_ptr.508"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.511"* %this1)
  ret %"class.thrust::device_ptr.508"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIssEEEEEEvRT_NS6_15difference_typeE(%"class.thrust::device_ptr.508"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.508"* %f, %"class.thrust::device_ptr.508"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %0 to %"class.thrust::iterator_adaptor.510"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl(%"class.thrust::iterator_adaptor.510"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.511"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.511"*, align 8
  store %"class.thrust::iterator_facade.511"* %this, %"class.thrust::iterator_facade.511"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.511"*, %"class.thrust::iterator_facade.511"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.511"* %this1 to %"class.thrust::device_ptr.508"*
  ret %"class.thrust::device_ptr.508"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl(%"class.thrust::iterator_adaptor.510"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.510"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.510"* %this, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.510"*, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !393
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %1, i64 %0
  store %"struct.thrust::pair.487"* %add.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !393
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIssEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.505"* %i, %"class.thrust::detail::normal_iterator.505"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.505"* %i, %"class.thrust::detail::normal_iterator.505"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.505"* %1 to %"class.thrust::iterator_facade.507"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.507"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.507"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.507"* %this, %"class.thrust::iterator_facade.507"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.507"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.507"* %this1)
  ret %"class.thrust::detail::normal_iterator.505"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.505"* %f, %"class.thrust::detail::normal_iterator.505"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.505"* %0 to %"class.thrust::iterator_adaptor.506"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.506"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.507"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  store %"class.thrust::iterator_facade.507"* %this, %"class.thrust::iterator_facade.507"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.507"* %this1 to %"class.thrust::detail::normal_iterator.505"*
  ret %"class.thrust::detail::normal_iterator.505"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.506"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.506"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.506"* %this, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.506"*, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.508"* %m_iterator to %"class.thrust::iterator_facade.511"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.511"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIssEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.508", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIssEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.507"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.507"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  store %"class.thrust::iterator_facade.507"* %lhs, %"class.thrust::iterator_facade.507"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.507"* %rhs, %"class.thrust::iterator_facade.507"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.507"* %0 to %"class.thrust::detail::normal_iterator.505"*
  %2 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.507"* %2 to %"class.thrust::detail::normal_iterator.505"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIssEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.508", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.503"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::device_ptr.508", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.503"* %a, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.503"*, %"class.thrust::device_malloc_allocator.503"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIssEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.503"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.508"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %first = alloca %"class.thrust::device_ptr.508", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp4 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call3 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call3 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.508"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive6, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %call8 = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %5, i64 %4)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call8, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive13, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  ret %"struct.thrust::pair.487"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %first = alloca %"class.thrust::device_ptr.508", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair.487"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive11, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.487"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIssEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.508", align 8
  %first = alloca %"class.thrust::device_ptr.508", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp6 = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp7 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce15 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp17 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp18 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp19 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp20 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp21 = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp28 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp31 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp34 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp35 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp36 = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp37 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp41 = alloca i32, align 4
  %agg.tmp.ensured44 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp45 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp50 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp51 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp52 = alloca %"class.thrust::device_ptr.508", align 8
  %agg.tmp53 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive3 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp5 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp6 to i8*
  %12 = bitcast %"class.thrust::device_ptr.508"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp7 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp6, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive9, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  %call11 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"struct.thrust::pair.487"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call11, i64* %17, align 4
  %call12 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call13 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call13, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call14 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce15, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive16 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call14, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call14, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp18, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp20 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp21 to i8*
  %30 = bitcast %"class.thrust::device_ptr.508"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp22 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp21, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive24, i32 0, i32 0
  %34 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  %call26 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp18, %"struct.thrust::pair.487"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp17 to i64*
  store i64 %call26, i64* %35, align 4
  %call27 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce15, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp17)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call29 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call29, i64* %ref.tmp28, align 8, !tbaa !13
  %call30 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp28)
  store i64 %call30, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call32 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call32 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call33 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp31, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call33)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp35 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp36 to i8*
  %45 = bitcast %"class.thrust::device_ptr.508"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp37 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive38 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp36, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive39, i32 0, i32 0
  %49 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive40, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp31, %"struct.thrust::pair.487"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call42 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call42, i32* %ref.tmp41, align 4, !tbaa !11
  %call43 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp41)
  store i32 %call43, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv46 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv47 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call48 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call48 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call49 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp45, i64 %conv46, i64 %conv47, i64 0, %struct.CUstream_st* %call49)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp51 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp52 to i8*
  %61 = bitcast %"class.thrust::device_ptr.508"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp53 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive54 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp52, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive55, i32 0, i32 0
  %65 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive56, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured44, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp45, %"struct.thrust::pair.487"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured44) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::device_ptr.508"* %first to %"class.thrust::iterator_facade.511"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call57 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.511"* dereferenceable(1) %66, i64 %67)
  %coerce.dive58 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive59, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call57, %"struct.thrust::pair.487"** %coerce.dive60, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive61 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %retval, i32 0, i32 0
  %coerce.dive62 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive61, i32 0, i32 0
  %coerce.dive63 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive62, i32 0, i32 0
  %72 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive63, align 8
  ret %"struct.thrust::pair.487"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.508", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.508"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp5)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.508", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.508"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp5)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.508", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.508"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.508", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.508"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::device_ptr.508"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.568", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %a2, %"class.thrust::device_ptr.508"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.568"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %agg.result, %"class.thrust::tuple.568"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.568"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.508"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %t1, %"class.thrust::device_ptr.508"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj(%"class.thrust::tuple.568"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %this, %"class.thrust::tuple.568"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"*, align 8
  %args.addr = alloca %"class.thrust::tuple.568"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.568"* %args, %"class.thrust::tuple.568"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.568"*, %"class.thrust::tuple.568"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.568"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.568"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj(%"class.thrust::tuple.568"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.508"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.568"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.568"* %this, %"class.thrust::tuple.568"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %t1, %"class.thrust::device_ptr.508"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.568"*, %"class.thrust::tuple.568"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.568"* %this1 to %"struct.thrust::detail::cons.569"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.569"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::device_ptr.508"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.569"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::device_ptr.508"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.569"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.569"* %this, %"struct.thrust::detail::cons.569"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %t2, %"class.thrust::device_ptr.508"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.569"*, %"struct.thrust::detail::cons.569"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.569", %"struct.thrust::detail::cons.569"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.569", %"struct.thrust::detail::cons.569"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.570"* %tail, %"class.thrust::device_ptr.508"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.570"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.570"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.570"* %this, %"struct.thrust::detail::cons.570"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %t1, %"class.thrust::device_ptr.508"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.570"*, %"struct.thrust::detail::cons.570"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.570", %"struct.thrust::detail::cons.570"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %head to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.570", %"struct.thrust::detail::cons.570"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::device_ptr.508"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.579", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %a2, %"class.thrust::device_ptr.508"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.579"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %agg.result, %"class.thrust::tuple.579"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.579"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.508"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %t1, %"class.thrust::device_ptr.508"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl(%"class.thrust::tuple.579"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %this, %"class.thrust::tuple.579"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"*, align 8
  %args.addr = alloca %"class.thrust::tuple.579"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.579"* %args, %"class.thrust::tuple.579"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.579"*, %"class.thrust::tuple.579"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.579"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.579"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl(%"class.thrust::tuple.579"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.508"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.579"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.579"* %this, %"class.thrust::tuple.579"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %t1, %"class.thrust::device_ptr.508"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.579"*, %"class.thrust::tuple.579"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.579"* %this1 to %"struct.thrust::detail::cons.580"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.580"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::device_ptr.508"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.580"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::device_ptr.508"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.580"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.580"* %this, %"struct.thrust::detail::cons.580"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %t2, %"class.thrust::device_ptr.508"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.580"*, %"struct.thrust::detail::cons.580"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.580", %"struct.thrust::detail::cons.580"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.580", %"struct.thrust::detail::cons.580"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.581"* %tail, %"class.thrust::device_ptr.508"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIssEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.581"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.581"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.581"* %this, %"struct.thrust::detail::cons.581"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %t1, %"class.thrust::device_ptr.508"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.581"*, %"struct.thrust::detail::cons.581"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.581", %"struct.thrust::detail::cons.581"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.508"* %head to i8*
  %2 = bitcast %"class.thrust::device_ptr.508"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.581", %"struct.thrust::detail::cons.581"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.582"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.578", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !401
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.583"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.578"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.587"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.584"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.586"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.571"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.567", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !403
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.572"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.567"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.576"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.573"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIssEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.575"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.505"* %f1, %"class.thrust::detail::normal_iterator.505"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.505"* %f2, %"class.thrust::detail::normal_iterator.505"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  store %"class.thrust::detail::normal_iterator.505"* %f1, %"class.thrust::detail::normal_iterator.505"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.505"* %f2, %"class.thrust::detail::normal_iterator.505"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.505"* %1 to %"class.thrust::iterator_adaptor.506"*
  %3 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.505"* %3 to %"class.thrust::iterator_adaptor.506"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.506"* %2, %"class.thrust::iterator_adaptor.506"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.506"* %this, %"class.thrust::iterator_adaptor.506"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.506"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.506"*, align 8
  store %"class.thrust::iterator_adaptor.506"* %this, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.506"* %y, %"class.thrust::iterator_adaptor.506"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.506"*, %"class.thrust::iterator_adaptor.506"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.506"*, %"class.thrust::iterator_adaptor.506"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.506"* %0)
  %1 = bitcast %"class.thrust::device_ptr.508"* %call to %"class.thrust::iterator_facade.511"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.508"* %m_iterator to %"class.thrust::iterator_facade.511"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.511"* dereferenceable(1) %1, %"class.thrust::iterator_facade.511"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrINS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.511"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.511"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.511"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.511"*, align 8
  store %"class.thrust::iterator_facade.511"* %lhs, %"class.thrust::iterator_facade.511"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.511"* %rhs, %"class.thrust::iterator_facade.511"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.511"*, %"class.thrust::iterator_facade.511"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.511"* %0 to %"class.thrust::device_ptr.508"*
  %2 = load %"class.thrust::iterator_facade.511"*, %"class.thrust::iterator_facade.511"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.511"* %2 to %"class.thrust::device_ptr.508"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIssEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::device_ptr.508"* dereferenceable(8) %1, %"class.thrust::device_ptr.508"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIssEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::device_ptr.508"* dereferenceable(8) %f1, %"class.thrust::device_ptr.508"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.508"* %f1, %"class.thrust::device_ptr.508"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %f2, %"class.thrust::device_ptr.508"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIssEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.508"* dereferenceable(8) %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIssEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.508"* dereferenceable(8) %f1, %"class.thrust::device_ptr.508"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  store %"class.thrust::device_ptr.508"* %f1, %"class.thrust::device_ptr.508"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.508"* %f2, %"class.thrust::device_ptr.508"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.508"* %1 to %"class.thrust::iterator_adaptor.510"*
  %3 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.508"* %3 to %"class.thrust::iterator_adaptor.510"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.510"* %2, %"class.thrust::iterator_adaptor.510"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.510"* %this, %"class.thrust::iterator_adaptor.510"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.510"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.510"*, align 8
  store %"class.thrust::iterator_adaptor.510"* %this, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.510"* %y, %"class.thrust::iterator_adaptor.510"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.510"*, %"class.thrust::iterator_adaptor.510"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.510"*, %"class.thrust::iterator_adaptor.510"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.510"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !393
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.487"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.487"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.480"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPKNS_4pairIssEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE(%"class.thrust::detail::normal_iterator.555"* %retval, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPKNS_4pairIssEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE(%"class.thrust::detail::normal_iterator.555"* %this, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::detail::normal_iterator.555"* %this, %"class.thrust::detail::normal_iterator.555"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.484"* %other, %"class.thrust::detail::normal_iterator.484"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %this1 to %"class.thrust::iterator_adaptor.556"*
  %2 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.484"* %2 to %"class.thrust::iterator_adaptor.485"*
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.485"* %3)
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.556"* %1, %"struct.thrust::pair.487"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.556"* %this, %"struct.thrust::pair.487"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"** %iter, %"struct.thrust::pair.487"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.556"* %this1 to %"class.thrust::iterator_facade.557"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.555"* %i, %"class.thrust::detail::normal_iterator.555"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.555"* %i, %"class.thrust::detail::normal_iterator.555"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.555"* %i, %"class.thrust::detail::normal_iterator.555"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %1 to %"class.thrust::iterator_facade.557"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl(%"class.thrust::iterator_facade.557"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl(%"class.thrust::iterator_facade.557"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.557"* %this, %"class.thrust::iterator_facade.557"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.557"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.557"* %this1)
  ret %"class.thrust::detail::normal_iterator.555"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.555"* %f, %"class.thrust::detail::normal_iterator.555"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %0 to %"class.thrust::iterator_adaptor.556"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.556"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.557"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  store %"class.thrust::iterator_facade.557"* %this, %"class.thrust::iterator_facade.557"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.557"* %this1 to %"class.thrust::detail::normal_iterator.555"*
  ret %"class.thrust::detail::normal_iterator.555"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.556"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %1, i64 %0
  store %"struct.thrust::pair.487"* %add.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsSaIsEEC2IbSaIbEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.74"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  %ref.tmp = alloca %"class.std::allocator.472", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.74"* %v, %"class.thrust::detail::vector_base.74"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  call void @_ZNSaIsEC2Ev(%"class.std::allocator.472"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageIsSaIsEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.471"* %m_storage, %"class.std::allocator.472"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.473"*)* @_ZN9__gnu_cxx13new_allocatorIsED2Ev to void (%"class.std::allocator.472"*)*)(%"class.std::allocator.472"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !351
  %0 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %v.addr, align 8
  %call = invoke i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %v.addr, align 8
  %call7 = invoke i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE3endEv(%"class.thrust::detail::vector_base.74"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  store i8* %call7, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive10, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive12, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseIsSaIsEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_(%"class.thrust::detail::vector_base.470"* %this1, i8* %2, i8* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.473"*)* @_ZN9__gnu_cxx13new_allocatorIsED2Ev to void (%"class.std::allocator.472"*)*)(%"class.std::allocator.472"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEED2Ev(%"class.thrust::detail::contiguous_storage.471"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsSaIsEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_(%"class.thrust::detail::vector_base.470"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive9, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseIsSaIsEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.470"* %this4, i8* %4, i8* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsSaIsEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.470"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i8* %6, i8* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive12, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive14, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseIsSaIsEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIsS2_EE(%"class.thrust::detail::vector_base.470"* %this4, i64 %8, i8* %13, i8* %14, %"class.thrust::detail::contiguous_storage.471"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !351
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIsSaIsEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIsS2_EE(%"class.thrust::detail::vector_base.470"* %this, i64 %requested_size, i8* %first.coerce, i8* %last.coerce, %"class.thrust::detail::contiguous_storage.471"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp42 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp47 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.471"* %new_storage, %"class.thrust::detail::contiguous_storage.471"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEE10deallocateEv(%"class.thrust::detail::contiguous_storage.471"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE8capacityEv(%"class.thrust::detail::vector_base.470"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE8max_sizeEv(%"class.thrust::detail::vector_base.470"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup57

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIsSaIsEE8allocateEm(%"class.thrust::detail::contiguous_storage.471"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %new_storage.addr, align 8
  %call21 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsSaIsEE5beginEv(%"class.thrust::detail::contiguous_storage.471"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive22, i32 0, i32 0
  store i16* %call21, i16** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive24, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive25, align 8
  %coerce.dive26 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp17, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive26, i32 0, i32 0
  %20 = load i8*, i8** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp18, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive28, i32 0, i32 0
  %21 = load i16*, i16** %coerce.dive29, align 8
  %call31 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsSaIsEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPsEET_SB_SA_(%"class.thrust::detail::contiguous_storage.471"* %m_storage, i8* %19, i8* %20, i16* %21)
          to label %invoke.cont30 unwind label %lpad19

invoke.cont30:                                    ; preds = %invoke.cont20
  %coerce.dive32 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %coerce, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive32, i32 0, i32 0
  store i16* %call31, i16** %coerce.dive33, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.475"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %new_storage.addr, align 8
  %call36 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsSaIsEE5beginEv(%"class.thrust::detail::contiguous_storage.471"* %27)
          to label %invoke.cont35 unwind label %lpad34

invoke.cont35:                                    ; preds = %catch
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %new_storage_end, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive37, i32 0, i32 0
  store i16* %call36, i16** %coerce.dive38, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPsEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont40 unwind label %lpad39

invoke.cont40:                                    ; preds = %invoke.cont35
  %m_storage41 = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %new_storage.addr, align 8
  %call44 = invoke i16* @_ZN6thrust6detail18contiguous_storageIsSaIsEE5beginEv(%"class.thrust::detail::contiguous_storage.471"* %29)
          to label %invoke.cont43 unwind label %lpad39

invoke.cont43:                                    ; preds = %invoke.cont40
  %coerce.dive45 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp42, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive45, i32 0, i32 0
  store i16* %call44, i16** %coerce.dive46, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp47 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.475"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp42, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive48, i32 0, i32 0
  %32 = load i16*, i16** %coerce.dive49, align 8
  %coerce.dive50 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp47, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive50, i32 0, i32 0
  %33 = load i16*, i16** %coerce.dive51, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsSaIsEE7destroyENS0_15normal_iteratorIPsEES6_(%"class.thrust::detail::contiguous_storage.471"* %m_storage41, i16* %32, i16* %33)
          to label %invoke.cont52 unwind label %lpad39

invoke.cont52:                                    ; preds = %invoke.cont43
  %34 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIsSaIsEE10deallocateEv(%"class.thrust::detail::contiguous_storage.471"* %34)
          to label %invoke.cont53 unwind label %lpad39

invoke.cont53:                                    ; preds = %invoke.cont52
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad39

lpad34:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup55

lpad39:                                           ; preds = %invoke.cont53, %invoke.cont52, %invoke.cont43, %invoke.cont40, %invoke.cont35
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.475"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup55

ehcleanup55:                                      ; preds = %lpad39, %lpad34
  invoke void @__cxa_end_catch()
          to label %invoke.cont56 unwind label %terminate.lpad

invoke.cont56:                                    ; preds = %ehcleanup55
  br label %ehcleanup57

try.cont:                                         ; preds = %invoke.cont30
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup57:                                      ; preds = %invoke.cont56, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup57
  %exn58 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn58, 0
  %lpad.val59 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val59

terminate.lpad:                                   ; preds = %ehcleanup55
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont53, %invoke.cont14
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE8capacityEv(%"class.thrust::detail::vector_base.470"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIsSaIsEE4sizeEv(%"class.thrust::detail::contiguous_storage.471"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIsSaIsEE8max_sizeEv(%"class.thrust::detail::vector_base.470"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.470"*, align 8
  store %"class.thrust::detail::vector_base.470"* %this, %"class.thrust::detail::vector_base.470"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.470"*, %"class.thrust::detail::vector_base.470"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.470", %"class.thrust::detail::vector_base.470"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIsSaIsEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.471"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail18contiguous_storageIsSaIsEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPsEET_SB_SA_(%"class.thrust::detail::contiguous_storage.471"* %this, i8* %first.coerce, i8* %last.coerce, i16* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive4, i32 0, i32 0
  store i16* %result.coerce, i16** %coerce.dive5, align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this6 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this6, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.475"* %result to %"class.thrust::iterator_adaptor.476"*
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %6)
  %7 = load i16*, i16** %call, align 8, !tbaa !1
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive10, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive11, align 8
  %call12 = call i16* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIsENS0_15normal_iteratorIPKbEEPsEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.std::allocator.472"* dereferenceable(1) %m_allocator, i8* %8, i8* %9, i16* %7)
  call void @_ZN6thrust6detail15normal_iteratorIPsEC2ES2_(%"class.thrust::detail::normal_iterator.475"* %retval, i16* %call12)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %retval, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive13, i32 0, i32 0
  %11 = load i16*, i16** %coerce.dive14, align 8
  ret i16* %11
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIsSaIsEE7destroyENS0_15normal_iteratorIPsEES6_(%"class.thrust::detail::contiguous_storage.471"* %this, i16* %first.coerce, i16* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive2, i32 0, i32 0
  store i16* %last.coerce, i16** %coerce.dive3, align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this4, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.475"* %first to %"class.thrust::iterator_adaptor.476"*
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %0)
  %1 = load i16*, i16** %call, align 8, !tbaa !1
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %last to %"class.thrust::iterator_facade.477"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %first to %"class.thrust::iterator_facade.477"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.477"* dereferenceable(1) %2, %"class.thrust::iterator_facade.477"* dereferenceable(1) %3)
  call void @_ZN6thrust6detail13destroy_rangeISaIsEPslEEvRT_T0_T1_(%"class.std::allocator.472"* dereferenceable(1) %m_allocator, i16* %1, i64 %call5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIsSaIsEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.471"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.471"*, align 8
  store %"class.thrust::detail::contiguous_storage.471"* %this, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.471"*, %"class.thrust::detail::contiguous_storage.471"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.471", %"class.thrust::detail::contiguous_storage.471"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsISaIsEE8max_sizeERKS2_(%"class.std::allocator.472"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsISaIsEE8max_sizeERKS2_(%"class.std::allocator.472"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIsEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_(%"class.std::allocator.472"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIsEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_(%"class.std::allocator.472"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIsENS0_15normal_iteratorIPKbEEPsEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.std::allocator.472"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i16* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %result.addr = alloca i16*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i16* %result, i16** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive8, align 8
  %call = call i16* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIsENS0_15normal_iteratorIPKbEEPsEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.std::allocator.472"* dereferenceable(1) %1, i8* %7, i8* %8, i16* %6)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIsENS0_15normal_iteratorIPKbEEPsEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.std::allocator.472"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i16* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %result.addr = alloca i16*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i16* %result, i16** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaIsEE3getERS2_(%"class.std::allocator.472"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive8, align 8
  %call = call i16* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPsEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, i8* %8, i8* %9, i16* %7)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPsEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2, i8* %first.coerce, i8* %last.coerce, i16* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %result.addr = alloca i16*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  store i16* %result, i16** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call4 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call4 to %"struct.thrust::execution_policy.88"*
  %3 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.88"* %3 to %"struct.thrust::detail::execution_policy_base.85"*
  %call5 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4)
  %call6 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call5)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call6 to %"struct.thrust::execution_policy.88"*
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::detail::execution_policy_base.85"*
  %7 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp8 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive9, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive11, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive12, align 8
  %call13 = call i16* @_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPsEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6, i8* %12, i8* %13, i16* %11)
  ret i16* %call13
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPsEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first.coerce, i8* %last.coerce, i16* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %result.addr = alloca i16*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i16* %result, i16** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call4 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call4 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive9, align 8
  %call10 = call i16* @_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPsEET1_RNS2_16execution_policyIT_EET0_SI_SD_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, i8* %7, i8* %8, i16* %6)
  ret i16* %call10
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPsEET1_RNS2_16execution_policyIT_EET0_SI_SD_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i8* %first.coerce, i8* %last.coerce, i16* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %result.addr = alloca i16*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i16* %result, i16** %result.addr, align 8, !tbaa !1
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  %call = call i16* @_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPsEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE(i8* %6, i8* %7, i16* %5)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPsEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE(i8* %first.coerce, i8* %last.coerce, i16* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %0 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %result.addr = alloca i16*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store i16* %result, i16** %result.addr, align 8, !tbaa !1
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive8, align 8
  %call = call i16* @_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPsEET0_T_SB_SA_(i8* %6, i8* %7, i16* %5)
  ret i16* %call
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPsEET0_T_SB_SA_(i8* %first.coerce, i8* %last.coerce, i16* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %result.addr = alloca i16*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store i16* %result, i16** %result.addr, align 8, !tbaa !1
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to %"class.thrust::iterator_facade.196"*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to %"class.thrust::iterator_facade.196"*
  %call = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSC_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.196"* dereferenceable(1) %0, %"class.thrust::iterator_facade.196"* dereferenceable(1) %1)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %2 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive4, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPsNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_(i16* %2, i8* %5)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %6 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to %"class.thrust::iterator_facade.196"*
  %call6 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEppEv(%"class.thrust::iterator_facade.196"* %6)
  %7 = load i16*, i16** %result.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds i16, i16* %7, i32 1
  store i16* %incdec.ptr, i16** %result.addr, align 8, !tbaa !1
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %8 = load i16*, i16** %result.addr, align 8, !tbaa !1
  ret i16* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPsNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_(i16* %dst, i8* %src.coerce) #8 comdat {
entry:
  %src = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %dst.addr = alloca i16*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %src, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %src.coerce, i8** %coerce.dive1, align 8
  store i16* %dst, i16** %dst.addr, align 8, !tbaa !1
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %src to %"class.thrust::iterator_facade.196"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.196"* %0)
  %1 = load i8, i8* %call, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %1 to i1
  %conv = zext i1 %tobool to i16
  %2 = load i16*, i16** %dst.addr, align 8, !tbaa !1
  store i16 %conv, i16* %2, align 2, !tbaa !346
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeISaIsEPslEEvRT_T0_T1_(%"class.std::allocator.472"* dereferenceable(1) %a, i16* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.472"*, align 8
  %p.addr = alloca i16*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.472"* %a, %"class.std::allocator.472"** %a.addr, align 8, !tbaa !7
  store i16* %p, i16** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.472"*, %"class.std::allocator.472"** %a.addr, align 8
  %1 = load i16*, i16** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIsEPslEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.472"* dereferenceable(1) %0, i16* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.477"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.477"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  store %"class.thrust::iterator_facade.477"* %lhs, %"class.thrust::iterator_facade.477"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.477"* %rhs, %"class.thrust::iterator_facade.477"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.477"* %0 to %"class.thrust::detail::normal_iterator.475"*
  %2 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.477"* %2 to %"class.thrust::detail::normal_iterator.475"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPsEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIsEPslEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.472"* dereferenceable(1), i16*, i64) #1 comdat {
entry:
  %.addr = alloca %"class.std::allocator.472"*, align 8
  %.addr1 = alloca i16*, align 8
  %.addr2 = alloca i64, align 8
  store %"class.std::allocator.472"* %0, %"class.std::allocator.472"** %.addr, align 8, !tbaa !7
  store i16* %1, i16** %.addr1, align 8, !tbaa !1
  store i64 %2, i64* %.addr2, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPsEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.475"* %f1, %"class.thrust::detail::normal_iterator.475"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %f2, %"class.thrust::detail::normal_iterator.475"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPsEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPsEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.475"*, align 8
  store %"class.thrust::detail::normal_iterator.475"* %f1, %"class.thrust::detail::normal_iterator.475"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.475"* %f2, %"class.thrust::detail::normal_iterator.475"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %1 to %"class.thrust::iterator_adaptor.476"*
  %3 = load %"class.thrust::detail::normal_iterator.475"*, %"class.thrust::detail::normal_iterator.475"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.475"* %3 to %"class.thrust::iterator_adaptor.476"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.476"* %2, %"class.thrust::iterator_adaptor.476"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.476"*, align 8
  store %"class.thrust::iterator_adaptor.476"* %this, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.476"* %y, %"class.thrust::iterator_adaptor.476"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.476"*, %"class.thrust::iterator_adaptor.476"** %y.addr, align 8
  %call = call dereferenceable(8) i16** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.476"* %0)
  %1 = load i16*, i16** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %this1, i32 0, i32 0
  %2 = load i16*, i16** %m_iterator, align 8, !tbaa !357
  %sub.ptr.lhs.cast = ptrtoint i16* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i16* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 2
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPsEENS6_IPNS_4pairIssEEEESC_SA_NS_8equal_toIsEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i16* %first1.coerce, i16* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i32 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %init = alloca %"struct.thrust::pair.487", align 2
  %binary_pred = alloca %"struct.thrust::equal_to.512", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %agg.tmp13 = alloca %"struct.thrust::pair.487", align 2
  %agg.tmp14 = alloca %"struct.thrust::equal_to.512", align 1
  %agg.tmp15 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive2, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::pair.487"* %init to i32*
  store i32 %init.coerce, i32* %0, align 2
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call9 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.475"* %agg.tmp10 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.475"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.484"* %agg.tmp11 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.484"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.484"* %agg.tmp12 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::pair.487"* %agg.tmp13 to i8*
  %12 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 4, i32 2, i1 false), !tbaa.struct !345
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive16, i32 0, i32 0
  %13 = load i16*, i16** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive18, i32 0, i32 0
  %14 = load i16*, i16** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp11, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive20, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %agg.tmp12, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive22, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %17 = bitcast %"struct.thrust::pair.487"* %agg.tmp13 to i32*
  %18 = load i32, i32* %17, align 2
  %call24 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPsEENS8_IPNS_4pairIssEEEESE_SC_NS_8equal_toIsEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %2, i16* %13, i16* %14, %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"* %16, i32 %18)
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call24, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive27, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive28, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPsEENS8_IPNS_4pairIssEEEESE_SC_NS_8equal_toIsEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i16* %first1.coerce, i16* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i32 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.475", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %init = alloca %"struct.thrust::pair.487", align 2
  %binary_pred = alloca %"struct.thrust::equal_to.512", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %temp_key = alloca i16, align 2
  %temp_value = alloca %"struct.thrust::pair.487", align 2
  %next = alloca %"struct.thrust::pair.487", align 2
  %ref.tmp = alloca %"struct.thrust::pair.487", align 2
  %key = alloca i16, align 2
  %ref.tmp22 = alloca %"struct.thrust::pair.487", align 2
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.475", %"class.thrust::detail::normal_iterator.475"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.476", %"class.thrust::iterator_adaptor.476"* %coerce.dive2, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %1 = bitcast %"struct.thrust::pair.487"* %init to i32*
  store i32 %init.coerce, i32* %1, align 2
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %2 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to %"class.thrust::iterator_facade.477"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.475"* %last1 to %"class.thrust::iterator_facade.477"*
  %call = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.477"* dereferenceable(1) %2, %"class.thrust::iterator_facade.477"* dereferenceable(1) %3)
  br i1 %call, label %if.then, label %if.end27

if.then:                                          ; preds = %entry
  %4 = bitcast i16* %temp_key to i8*
  call void @llvm.lifetime.start(i64 2, i8* %4) #5
  %5 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to %"class.thrust::iterator_facade.477"*
  %call9 = call dereferenceable(2) i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEdeEv(%"class.thrust::iterator_facade.477"* %5)
  %6 = load i16, i16* %call9, align 2, !tbaa !346
  store i16 %6, i16* %temp_key, align 2, !tbaa !346
  %7 = bitcast %"struct.thrust::pair.487"* %temp_value to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = bitcast %"class.thrust::detail::normal_iterator.484"* %first2 to %"class.thrust::iterator_facade.486"*
  %call10 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.486"* %8)
  %9 = bitcast %"struct.thrust::pair.487"* %temp_value to i8*
  %10 = bitcast %"struct.thrust::pair.487"* %call10 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 4, i32 2, i1 false), !tbaa.struct !345
  %11 = bitcast %"struct.thrust::pair.487"* %next to i8*
  call void @llvm.lifetime.start(i64 4, i8* %11) #5
  %12 = bitcast %"struct.thrust::pair.487"* %next to i8*
  %13 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 4, i32 2, i1 false), !tbaa.struct !345
  %14 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to %"class.thrust::iterator_facade.486"*
  %call11 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.486"* %14)
  %15 = bitcast %"struct.thrust::pair.487"* %call11 to i8*
  %16 = bitcast %"struct.thrust::pair.487"* %next to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %16, i64 4, i32 2, i1 false), !tbaa.struct !345
  %call12 = call i32 @_ZN9add_pairsclIN6thrust4pairIssEES3_EET_RKS4_RKT0_(%struct.add_pairs* %binary_op, %"struct.thrust::pair.487"* dereferenceable(4) %next, %"struct.thrust::pair.487"* dereferenceable(4) %temp_value)
  %17 = bitcast %"struct.thrust::pair.487"* %ref.tmp to i32*
  store i32 %call12, i32* %17, align 2
  %18 = bitcast %"struct.thrust::pair.487"* %next to i8*
  %19 = bitcast %"struct.thrust::pair.487"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %19, i64 4, i32 2, i1 false), !tbaa.struct !345
  %20 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to %"class.thrust::iterator_facade.477"*
  %call13 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEppEv(%"class.thrust::iterator_facade.477"* %20)
  %21 = bitcast %"class.thrust::detail::normal_iterator.484"* %first2 to %"class.thrust::iterator_facade.486"*
  %call14 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.486"* %21)
  %22 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to %"class.thrust::iterator_facade.486"*
  %call15 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.486"* %22)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then
  %23 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to %"class.thrust::iterator_facade.477"*
  %24 = bitcast %"class.thrust::detail::normal_iterator.475"* %last1 to %"class.thrust::iterator_facade.477"*
  %call16 = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.477"* dereferenceable(1) %23, %"class.thrust::iterator_facade.477"* dereferenceable(1) %24)
  br i1 %call16, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %25 = bitcast i16* %key to i8*
  call void @llvm.lifetime.start(i64 2, i8* %25) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to %"class.thrust::iterator_facade.477"*
  %call17 = call dereferenceable(2) i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEdeEv(%"class.thrust::iterator_facade.477"* %26)
  %27 = load i16, i16* %call17, align 2, !tbaa !346
  store i16 %27, i16* %key, align 2, !tbaa !346
  %28 = bitcast %"class.thrust::detail::normal_iterator.484"* %first2 to %"class.thrust::iterator_facade.486"*
  %call18 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.486"* %28)
  %29 = bitcast %"struct.thrust::pair.487"* %temp_value to i8*
  %30 = bitcast %"struct.thrust::pair.487"* %call18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 4, i32 2, i1 false), !tbaa.struct !345
  %call19 = call zeroext i1 @_ZNK6thrust8equal_toIsEclERKsS3_(%"struct.thrust::equal_to.512"* %binary_pred, i16* dereferenceable(2) %temp_key, i16* dereferenceable(2) %key)
  br i1 %call19, label %if.end, label %if.then20

if.then20:                                        ; preds = %for.body
  %31 = bitcast %"struct.thrust::pair.487"* %next to i8*
  %32 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 4, i32 2, i1 false), !tbaa.struct !345
  br label %if.end

if.end:                                           ; preds = %if.then20, %for.body
  %33 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to %"class.thrust::iterator_facade.486"*
  %call21 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.486"* %33)
  %34 = bitcast %"struct.thrust::pair.487"* %call21 to i8*
  %35 = bitcast %"struct.thrust::pair.487"* %next to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %34, i8* %35, i64 4, i32 2, i1 false), !tbaa.struct !345
  %call23 = call i32 @_ZN9add_pairsclIN6thrust4pairIssEES3_EET_RKS4_RKT0_(%struct.add_pairs* %binary_op, %"struct.thrust::pair.487"* dereferenceable(4) %next, %"struct.thrust::pair.487"* dereferenceable(4) %temp_value)
  %36 = bitcast %"struct.thrust::pair.487"* %ref.tmp22 to i32*
  store i32 %call23, i32* %36, align 2
  %37 = bitcast %"struct.thrust::pair.487"* %next to i8*
  %38 = bitcast %"struct.thrust::pair.487"* %ref.tmp22 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %37, i8* %38, i64 4, i32 2, i1 false), !tbaa.struct !345
  %39 = load i16, i16* %key, align 2, !tbaa !346
  store i16 %39, i16* %temp_key, align 2, !tbaa !346
  %40 = bitcast i16* %key to i8*
  call void @llvm.lifetime.end(i64 2, i8* %40) #5
  br label %for.inc

for.inc:                                          ; preds = %if.end
  %41 = bitcast %"class.thrust::detail::normal_iterator.475"* %first1 to %"class.thrust::iterator_facade.477"*
  %call24 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.475"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslEppEv(%"class.thrust::iterator_facade.477"* %41)
  %42 = bitcast %"class.thrust::detail::normal_iterator.484"* %first2 to %"class.thrust::iterator_facade.486"*
  %call25 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.486"* %42)
  %43 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to %"class.thrust::iterator_facade.486"*
  %call26 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.486"* %43)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %44 = bitcast %"struct.thrust::pair.487"* %next to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast %"struct.thrust::pair.487"* %temp_value to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast i16* %temp_key to i8*
  call void @llvm.lifetime.end(i64 2, i8* %46) #5
  br label %if.end27

if.end27:                                         ; preds = %for.end, %entry
  %47 = bitcast %"class.thrust::detail::normal_iterator.484"* %retval to i8*
  %48 = bitcast %"class.thrust::detail::normal_iterator.484"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %47, i8* %48, i64 8, i32 8, i1 false)
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive28, i32 0, i32 0
  %49 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive29, align 8
  ret %"struct.thrust::pair.487"* %49
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPsEEsNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERslS4_sS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.477"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.477"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.477"*, align 8
  store %"class.thrust::iterator_facade.477"* %lhs, %"class.thrust::iterator_facade.477"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.477"* %rhs, %"class.thrust::iterator_facade.477"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.477"* %0 to %"class.thrust::detail::normal_iterator.475"*
  %2 = load %"class.thrust::iterator_facade.477"*, %"class.thrust::iterator_facade.477"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.477"* %2 to %"class.thrust::detail::normal_iterator.475"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPsEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.475"* dereferenceable(8) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN9add_pairsclIN6thrust4pairIssEES3_EET_RKS4_RKT0_(%struct.add_pairs* %this, %"struct.thrust::pair.487"* dereferenceable(4) %x, %"struct.thrust::pair.487"* dereferenceable(4) %y) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.487", align 2
  %this.addr = alloca %struct.add_pairs*, align 8
  %x.addr = alloca %"struct.thrust::pair.487"*, align 8
  %y.addr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  store %struct.add_pairs* %this, %struct.add_pairs** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %x, %"struct.thrust::pair.487"** %x.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %y, %"struct.thrust::pair.487"** %y.addr, align 8, !tbaa !7
  %this1 = load %struct.add_pairs*, %struct.add_pairs** %this.addr, align 8
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %0, i32 0, i32 0
  %1 = load i16, i16* %first, align 2, !tbaa !348
  %conv = sext i16 %1 to i32
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %y.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %2, i32 0, i32 0
  %3 = load i16, i16* %first2, align 2, !tbaa !348
  %conv3 = sext i16 %3 to i32
  %add = add nsw i32 %conv, %conv3
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %4, i32 0, i32 1
  %5 = load i16, i16* %second, align 2, !tbaa !350
  %conv4 = sext i16 %5 to i32
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %y.addr, align 8
  %second5 = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %6, i32 0, i32 1
  %7 = load i16, i16* %second5, align 2, !tbaa !350
  %conv6 = sext i16 %7 to i32
  %add7 = add nsw i32 %conv4, %conv6
  %call = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %add, i32 %add7)
  %8 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call, i64* %8, align 4
  call void @_ZN6thrust4pairIssEC2IiiEERKNS0_IT_T0_EE(%"struct.thrust::pair.487"* %retval, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %9 = bitcast %"struct.thrust::pair.487"* %retval to i32*
  %10 = load i32, i32* %9, align 2
  ret i32 %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust8equal_toIsEclERKsS3_(%"struct.thrust::equal_to.512"* %this, i16* dereferenceable(2) %lhs, i16* dereferenceable(2) %rhs) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::equal_to.512"*, align 8
  %lhs.addr = alloca i16*, align 8
  %rhs.addr = alloca i16*, align 8
  store %"struct.thrust::equal_to.512"* %this, %"struct.thrust::equal_to.512"** %this.addr, align 8, !tbaa !1
  store i16* %lhs, i16** %lhs.addr, align 8, !tbaa !7
  store i16* %rhs, i16** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::equal_to.512"*, %"struct.thrust::equal_to.512"** %this.addr, align 8
  %0 = load i16*, i16** %lhs.addr, align 8
  %1 = load i16, i16* %0, align 2, !tbaa !346
  %conv = sext i16 %1 to i32
  %2 = load i16*, i16** %rhs.addr, align 8
  %3 = load i16, i16* %2, align 2, !tbaa !346
  %conv2 = sext i16 %3 to i32
  %cmp = icmp eq i32 %conv, %conv2
  ret i1 %cmp
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS6_INS7_INS_4pairIssEEEEEESD_SB_NS_8equal_toIsEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i16* %first1.coerce, i16* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i32 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %init = alloca %"struct.thrust::pair.487", align 2
  %binary_pred = alloca %"struct.thrust::equal_to.512", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp23 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp24 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp25 = alloca %"struct.thrust::pair.487", align 2
  %agg.tmp26 = alloca %"struct.thrust::equal_to.512", align 1
  %agg.tmp27 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair.487"* %init to i32*
  store i32 %init.coerce, i32* %0, align 2
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call21 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call21 to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.493"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp22 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.493"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp23 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.505"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp24 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::pair.487"* %agg.tmp25 to i8*
  %12 = bitcast %"struct.thrust::pair.487"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 4, i32 2, i1 false), !tbaa.struct !345
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive31, i32 0, i32 0
  %13 = load i16*, i16** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp22, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive36, i32 0, i32 0
  %14 = load i16*, i16** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp23, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive41, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive42, align 8
  %coerce.dive43 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp24, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive46, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive47, align 8
  %17 = bitcast %"struct.thrust::pair.487"* %agg.tmp25 to i32*
  %18 = load i32, i32* %17, align 2
  %call48 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS8_INS9_INS_4pairIssEEEEEESF_SD_NS_8equal_toIsEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i16* %13, i16* %14, %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"* %16, i32 %18)
  %coerce.dive49 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive50, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive51, i32 0, i32 0
  %coerce.dive53 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive52, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call48, %"struct.thrust::pair.487"** %coerce.dive53, align 8
  %coerce.dive54 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive56, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive57, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive58, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS8_INS9_INS_4pairIssEEEEEESF_SD_NS_8equal_toIsEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i16* %first1.coerce, i16* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i32 %init.coerce) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %init = alloca %"struct.thrust::pair.487", align 2
  %binary_pred = alloca %"struct.thrust::equal_to.512", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n = alloca i64, align 8
  %last2 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %flags = alloca %"class.thrust::detail::temporary_array", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce = alloca %"class.thrust::reference.205", align 8
  %ref.tmp = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp33 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp41 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp49 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %ref.tmp50 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp63 = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %coerce86 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %temp = alloca %"class.thrust::detail::temporary_array.590", align 8
  %agg.tmp92 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp93 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp102 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %ref.tmp103 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp116 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %ref.tmp117 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %agg.tmp130 = alloca %"struct.thrust::negate", align 1
  %coerce151 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %coerce158 = alloca %"class.thrust::reference.599", align 8
  %agg.tmp164 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp165 = alloca %"class.thrust::tuple.606", align 8
  %ref.tmp166 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %ref.tmp173 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp187 = alloca %"class.thrust::zip_iterator.604", align 8
  %ref.tmp188 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp189 = alloca %"class.thrust::tuple.606", align 8
  %ref.tmp190 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %ref.tmp197 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp215 = alloca %"class.thrust::zip_iterator.600", align 8
  %agg.tmp216 = alloca %"class.thrust::tuple.602", align 8
  %ref.tmp217 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp231 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %agg.tmp232 = alloca %struct.add_pairs, align 1
  %coerce236 = alloca %"class.thrust::zip_iterator.600", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair.487"* %init to i32*
  store i32 %init.coerce, i32* %0, align 2
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %1 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %last1 to %"class.thrust::iterator_facade.495"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.493"* %first1 to %"class.thrust::iterator_facade.495"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS5_sS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.495"* dereferenceable(1) %2, %"class.thrust::iterator_facade.495"* dereferenceable(1) %3)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %4 = load i64, i64* %n, align 8, !tbaa !13
  %cmp = icmp ne i64 %4, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %5 = bitcast %"class.thrust::detail::normal_iterator.505"* %last2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %5) #5
  %6 = bitcast %"class.thrust::detail::normal_iterator.505"* %first2 to %"class.thrust::iterator_facade.507"*
  %7 = load i64, i64* %n, align 8, !tbaa !13
  %call21 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.507"* dereferenceable(1) %6, i64 %7)
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %last2, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call21, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %8 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.start(i64 24, i8* %8) #5
  %9 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %10 = load i64, i64* %n, align 8, !tbaa !13
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EEm(%"class.thrust::detail::temporary_array"* %flags, %"struct.thrust::execution_policy.120"* dereferenceable(1) %9, i64 %10)
  %11 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call27 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.198"* %11, i64 0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %coerce.dive28 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %coerce, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive29, i32 0, i32 0
  store i32* %call27, i32** %coerce.dive30, align 8
  store i32 1, i32* %ref.tmp, align 4, !tbaa !11
  %call32 = invoke dereferenceable(8) %"class.thrust::reference.205"* @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EaSERKj(%"class.thrust::reference.205"* %coerce, i32* dereferenceable(4) %ref.tmp)
          to label %invoke.cont31 unwind label %lpad

invoke.cont31:                                    ; preds = %invoke.cont
  %12 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %13 = bitcast %"struct.thrust::execution_policy.120"* %12 to %"struct.thrust::detail::execution_policy_base.121"*
  %14 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.493"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.493"* %last1 to %"class.thrust::iterator_facade.495"*
  %call35 = invoke i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEmiEl(%"class.thrust::iterator_facade.495"* %16, i64 1)
          to label %invoke.cont34 unwind label %lpad

invoke.cont34:                                    ; preds = %invoke.cont31
  %coerce.dive36 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp33, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive39, i32 0, i32 0
  store i16* %call35, i16** %coerce.dive40, align 8
  %17 = bitcast %"class.thrust::detail::normal_iterator.493"* %first1 to %"class.thrust::iterator_facade.495"*
  %call43 = invoke i16* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.495"* dereferenceable(1) %17, i64 1)
          to label %invoke.cont42 unwind label %lpad

invoke.cont42:                                    ; preds = %invoke.cont34
  %coerce.dive44 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp41, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive47, i32 0, i32 0
  store i16* %call43, i16** %coerce.dive48, align 8
  %18 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call52 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %18)
          to label %invoke.cont51 unwind label %lpad

invoke.cont51:                                    ; preds = %invoke.cont42
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp50, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive55, i32 0, i32 0
  store i32* %call52, i32** %coerce.dive56, align 8
  %19 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp50 to %"class.thrust::iterator_facade.201"*
  %call58 = invoke i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %19, i64 1)
          to label %invoke.cont57 unwind label %lpad

invoke.cont57:                                    ; preds = %invoke.cont51
  %coerce.dive59 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp49, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive60, i32 0, i32 0
  %coerce.dive62 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive61, i32 0, i32 0
  store i32* %call58, i32** %coerce.dive62, align 8
  invoke void @_ZN6thrust6detail4not2INS_8equal_toIsEEEENS0_13binary_negateIT_EERKS5_(%"struct.thrust::equal_to.512"* dereferenceable(1) %binary_pred)
          to label %invoke.cont64 unwind label %lpad

invoke.cont64:                                    ; preds = %invoke.cont57
  %coerce.dive65 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive66, i32 0, i32 0
  %coerce.dive68 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive67, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive68, i32 0, i32 0
  %20 = load i16*, i16** %coerce.dive69, align 8
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp33, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive71, i32 0, i32 0
  %coerce.dive73 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive72, i32 0, i32 0
  %coerce.dive74 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive73, i32 0, i32 0
  %21 = load i16*, i16** %coerce.dive74, align 8
  %coerce.dive75 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp41, i32 0, i32 0
  %coerce.dive76 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive75, i32 0, i32 0
  %coerce.dive77 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive76, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive77, i32 0, i32 0
  %coerce.dive79 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive78, i32 0, i32 0
  %22 = load i16*, i16** %coerce.dive79, align 8
  %coerce.dive80 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp49, i32 0, i32 0
  %coerce.dive81 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive80, i32 0, i32 0
  %coerce.dive82 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive81, i32 0, i32 0
  %coerce.dive83 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive82, i32 0, i32 0
  %23 = load i32*, i32** %coerce.dive83, align 8
  %call85 = invoke i32* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIsEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %13, i16* %20, i16* %21, i16* %22, i32* %23)
          to label %invoke.cont84 unwind label %lpad

invoke.cont84:                                    ; preds = %invoke.cont64
  %coerce.dive87 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %coerce86, i32 0, i32 0
  %coerce.dive88 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive87, i32 0, i32 0
  %coerce.dive89 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive88, i32 0, i32 0
  %coerce.dive90 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive89, i32 0, i32 0
  store i32* %call85, i32** %coerce.dive90, align 8
  %24 = bitcast %"class.thrust::detail::temporary_array.590"* %temp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %24) #5
  %25 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %26 = load i64, i64* %n, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm(%"class.thrust::detail::temporary_array.590"* %temp, %"struct.thrust::execution_policy.120"* dereferenceable(1) %25, i64 %26)
          to label %invoke.cont91 unwind label %lpad

invoke.cont91:                                    ; preds = %invoke.cont84
  %27 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %28 = bitcast %"struct.thrust::execution_policy.120"* %27 to %"struct.thrust::detail::execution_policy_base.121"*
  %29 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp92 to i8*
  %30 = bitcast %"class.thrust::detail::normal_iterator.505"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"class.thrust::detail::normal_iterator.505"* %last2 to %"class.thrust::iterator_facade.507"*
  %call96 = invoke %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl(%"class.thrust::iterator_facade.507"* %31, i64 1)
          to label %invoke.cont95 unwind label %lpad94

invoke.cont95:                                    ; preds = %invoke.cont91
  %coerce.dive97 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp93, i32 0, i32 0
  %coerce.dive98 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive97, i32 0, i32 0
  %coerce.dive99 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive98, i32 0, i32 0
  %coerce.dive100 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive99, i32 0, i32 0
  %coerce.dive101 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive100, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call96, %"struct.thrust::pair.487"** %coerce.dive101, align 8
  %32 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call105 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %32)
          to label %invoke.cont104 unwind label %lpad94

invoke.cont104:                                   ; preds = %invoke.cont95
  %coerce.dive106 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp103, i32 0, i32 0
  %coerce.dive107 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive106, i32 0, i32 0
  %coerce.dive108 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive107, i32 0, i32 0
  %coerce.dive109 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive108, i32 0, i32 0
  store i32* %call105, i32** %coerce.dive109, align 8
  %33 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp103 to %"class.thrust::iterator_facade.201"*
  %call111 = invoke i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %33, i64 1)
          to label %invoke.cont110 unwind label %lpad94

invoke.cont110:                                   ; preds = %invoke.cont104
  %coerce.dive112 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp102, i32 0, i32 0
  %coerce.dive113 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive112, i32 0, i32 0
  %coerce.dive114 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive113, i32 0, i32 0
  %coerce.dive115 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive114, i32 0, i32 0
  store i32* %call111, i32** %coerce.dive115, align 8
  %34 = bitcast %"class.thrust::detail::temporary_array.590"* %temp to %"class.thrust::detail::contiguous_storage.591"*
  %call119 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.591"* %34)
          to label %invoke.cont118 unwind label %lpad94

invoke.cont118:                                   ; preds = %invoke.cont110
  %coerce.dive120 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %ref.tmp117, i32 0, i32 0
  %coerce.dive121 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive120, i32 0, i32 0
  %coerce.dive122 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive121, i32 0, i32 0
  %coerce.dive123 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive122, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call119, %"struct.thrust::pair.487"** %coerce.dive123, align 8
  %35 = bitcast %"class.thrust::detail::normal_iterator.596"* %ref.tmp117 to %"class.thrust::iterator_facade.598"*
  %call125 = invoke %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.598"* dereferenceable(1) %35, i64 1)
          to label %invoke.cont124 unwind label %lpad94

invoke.cont124:                                   ; preds = %invoke.cont118
  %coerce.dive126 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp116, i32 0, i32 0
  %coerce.dive127 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive126, i32 0, i32 0
  %coerce.dive128 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive127, i32 0, i32 0
  %coerce.dive129 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive128, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call125, %"struct.thrust::pair.487"** %coerce.dive129, align 8
  %coerce.dive131 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp92, i32 0, i32 0
  %coerce.dive132 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive131, i32 0, i32 0
  %coerce.dive133 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive132, i32 0, i32 0
  %coerce.dive134 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive133, i32 0, i32 0
  %coerce.dive135 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive134, i32 0, i32 0
  %36 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive135, align 8
  %coerce.dive136 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp93, i32 0, i32 0
  %coerce.dive137 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive136, i32 0, i32 0
  %coerce.dive138 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive137, i32 0, i32 0
  %coerce.dive139 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive138, i32 0, i32 0
  %coerce.dive140 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive139, i32 0, i32 0
  %37 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive140, align 8
  %coerce.dive141 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp102, i32 0, i32 0
  %coerce.dive142 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive141, i32 0, i32 0
  %coerce.dive143 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive142, i32 0, i32 0
  %coerce.dive144 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive143, i32 0, i32 0
  %38 = load i32*, i32** %coerce.dive144, align 8
  %coerce.dive145 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp116, i32 0, i32 0
  %coerce.dive146 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive145, i32 0, i32 0
  %coerce.dive147 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive146, i32 0, i32 0
  %coerce.dive148 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive147, i32 0, i32 0
  %39 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive148, align 8
  %call150 = invoke %"struct.thrust::pair.487"* @_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %28, %"struct.thrust::pair.487"* %36, %"struct.thrust::pair.487"* %37, i32* %38, %"struct.thrust::pair.487"* %39, %"struct.thrust::pair.487"* dereferenceable(4) %init)
          to label %invoke.cont149 unwind label %lpad94

invoke.cont149:                                   ; preds = %invoke.cont124
  %coerce.dive152 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %coerce151, i32 0, i32 0
  %coerce.dive153 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive152, i32 0, i32 0
  %coerce.dive154 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive153, i32 0, i32 0
  %coerce.dive155 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive154, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call150, %"struct.thrust::pair.487"** %coerce.dive155, align 8
  %40 = bitcast %"class.thrust::detail::temporary_array.590"* %temp to %"class.thrust::detail::contiguous_storage.591"*
  %call157 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.591"* %40, i64 0)
          to label %invoke.cont156 unwind label %lpad94

invoke.cont156:                                   ; preds = %invoke.cont149
  %coerce.dive159 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %coerce158, i32 0, i32 0
  %coerce.dive160 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive159, i32 0, i32 0
  %coerce.dive161 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive160, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call157, %"struct.thrust::pair.487"** %coerce.dive161, align 8
  %call163 = invoke dereferenceable(8) %"class.thrust::reference.599"* @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_(%"class.thrust::reference.599"* %coerce158, %"struct.thrust::pair.487"* dereferenceable(4) %init)
          to label %invoke.cont162 unwind label %lpad94

invoke.cont162:                                   ; preds = %invoke.cont156
  %41 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %42 = bitcast %"struct.thrust::execution_policy.120"* %41 to %"struct.thrust::detail::execution_policy_base.121"*
  %43 = bitcast %"class.thrust::detail::temporary_array.590"* %temp to %"class.thrust::detail::contiguous_storage.591"*
  %call168 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.591"* %43)
          to label %invoke.cont167 unwind label %lpad94

invoke.cont167:                                   ; preds = %invoke.cont162
  %coerce.dive169 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %ref.tmp166, i32 0, i32 0
  %coerce.dive170 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive169, i32 0, i32 0
  %coerce.dive171 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive170, i32 0, i32 0
  %coerce.dive172 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive171, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call168, %"struct.thrust::pair.487"** %coerce.dive172, align 8
  %44 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call175 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %44)
          to label %invoke.cont174 unwind label %lpad94

invoke.cont174:                                   ; preds = %invoke.cont167
  %coerce.dive176 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp173, i32 0, i32 0
  %coerce.dive177 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive176, i32 0, i32 0
  %coerce.dive178 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive177, i32 0, i32 0
  %coerce.dive179 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive178, i32 0, i32 0
  store i32* %call175, i32** %coerce.dive179, align 8
  %call181 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %ref.tmp166, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp173)
          to label %invoke.cont180 unwind label %lpad94

invoke.cont180:                                   ; preds = %invoke.cont174
  %coerce.dive182 = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %agg.tmp165, i32 0, i32 0
  %45 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive182 to { %"struct.thrust::pair.487"*, i32* }*
  %46 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %45, i32 0, i32 0
  %47 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call181, 0
  store %"struct.thrust::pair.487"* %47, %"struct.thrust::pair.487"** %46, align 8
  %48 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %45, i32 0, i32 1
  %49 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call181, 1
  store i32* %49, i32** %48, align 8
  %50 = bitcast %"class.thrust::tuple.606"* %agg.tmp165 to { %"struct.thrust::pair.487"*, i32* }*
  %51 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %50, i32 0, i32 0
  %52 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %51, align 8
  %53 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %50, i32 0, i32 1
  %54 = load i32*, i32** %53, align 8
  %call184 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair.487"* %52, i32* %54)
          to label %invoke.cont183 unwind label %lpad94

invoke.cont183:                                   ; preds = %invoke.cont180
  %coerce.dive185 = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %agg.tmp164, i32 0, i32 0
  %coerce.dive186 = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %coerce.dive185, i32 0, i32 0
  %55 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive186 to { %"struct.thrust::pair.487"*, i32* }*
  %56 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %55, i32 0, i32 0
  %57 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call184, 0
  store %"struct.thrust::pair.487"* %57, %"struct.thrust::pair.487"** %56, align 8
  %58 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %55, i32 0, i32 1
  %59 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call184, 1
  store i32* %59, i32** %58, align 8
  %60 = bitcast %"class.thrust::detail::temporary_array.590"* %temp to %"class.thrust::detail::contiguous_storage.591"*
  %call192 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.591"* %60)
          to label %invoke.cont191 unwind label %lpad94

invoke.cont191:                                   ; preds = %invoke.cont183
  %coerce.dive193 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %ref.tmp190, i32 0, i32 0
  %coerce.dive194 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive193, i32 0, i32 0
  %coerce.dive195 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive194, i32 0, i32 0
  %coerce.dive196 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive195, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call192, %"struct.thrust::pair.487"** %coerce.dive196, align 8
  %61 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call199 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %61)
          to label %invoke.cont198 unwind label %lpad94

invoke.cont198:                                   ; preds = %invoke.cont191
  %coerce.dive200 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp197, i32 0, i32 0
  %coerce.dive201 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive200, i32 0, i32 0
  %coerce.dive202 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive201, i32 0, i32 0
  %coerce.dive203 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive202, i32 0, i32 0
  store i32* %call199, i32** %coerce.dive203, align 8
  %call205 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %ref.tmp190, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp197)
          to label %invoke.cont204 unwind label %lpad94

invoke.cont204:                                   ; preds = %invoke.cont198
  %coerce.dive206 = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %agg.tmp189, i32 0, i32 0
  %62 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive206 to { %"struct.thrust::pair.487"*, i32* }*
  %63 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %62, i32 0, i32 0
  %64 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call205, 0
  store %"struct.thrust::pair.487"* %64, %"struct.thrust::pair.487"** %63, align 8
  %65 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %62, i32 0, i32 1
  %66 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call205, 1
  store i32* %66, i32** %65, align 8
  %67 = bitcast %"class.thrust::tuple.606"* %agg.tmp189 to { %"struct.thrust::pair.487"*, i32* }*
  %68 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %67, i32 0, i32 0
  %69 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %68, align 8
  %70 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %67, i32 0, i32 1
  %71 = load i32*, i32** %70, align 8
  %call208 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair.487"* %69, i32* %71)
          to label %invoke.cont207 unwind label %lpad94

invoke.cont207:                                   ; preds = %invoke.cont204
  %coerce.dive209 = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %ref.tmp188, i32 0, i32 0
  %coerce.dive210 = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %coerce.dive209, i32 0, i32 0
  %72 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive210 to { %"struct.thrust::pair.487"*, i32* }*
  %73 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %72, i32 0, i32 0
  %74 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call208, 0
  store %"struct.thrust::pair.487"* %74, %"struct.thrust::pair.487"** %73, align 8
  %75 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %72, i32 0, i32 1
  %76 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call208, 1
  store i32* %76, i32** %75, align 8
  %77 = bitcast %"class.thrust::zip_iterator.604"* %ref.tmp188 to %"class.thrust::iterator_facade.605"*
  %78 = load i64, i64* %n, align 8, !tbaa !13
  %call212 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::iterator_facade.605"* dereferenceable(1) %77, i64 %78)
          to label %invoke.cont211 unwind label %lpad94

invoke.cont211:                                   ; preds = %invoke.cont207
  %coerce.dive213 = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %agg.tmp187, i32 0, i32 0
  %coerce.dive214 = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %coerce.dive213, i32 0, i32 0
  %79 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive214 to { %"struct.thrust::pair.487"*, i32* }*
  %80 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %79, i32 0, i32 0
  %81 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call212, 0
  store %"struct.thrust::pair.487"* %81, %"struct.thrust::pair.487"** %80, align 8
  %82 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %79, i32 0, i32 1
  %83 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call212, 1
  store i32* %83, i32** %82, align 8
  %84 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call219 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %84)
          to label %invoke.cont218 unwind label %lpad94

invoke.cont218:                                   ; preds = %invoke.cont211
  %coerce.dive220 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp217, i32 0, i32 0
  %coerce.dive221 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive220, i32 0, i32 0
  %coerce.dive222 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive221, i32 0, i32 0
  %coerce.dive223 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive222, i32 0, i32 0
  store i32* %call219, i32** %coerce.dive223, align 8
  %call225 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %result, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp217)
          to label %invoke.cont224 unwind label %lpad94

invoke.cont224:                                   ; preds = %invoke.cont218
  %coerce.dive226 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %agg.tmp216, i32 0, i32 0
  %85 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive226 to { %"struct.thrust::pair.487"*, i32* }*
  %86 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %85, i32 0, i32 0
  %87 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call225, 0
  store %"struct.thrust::pair.487"* %87, %"struct.thrust::pair.487"** %86, align 8
  %88 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %85, i32 0, i32 1
  %89 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call225, 1
  store i32* %89, i32** %88, align 8
  %90 = bitcast %"class.thrust::tuple.602"* %agg.tmp216 to { %"struct.thrust::pair.487"*, i32* }*
  %91 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %90, i32 0, i32 0
  %92 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %91, align 8
  %93 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %90, i32 0, i32 1
  %94 = load i32*, i32** %93, align 8
  %call228 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_(%"struct.thrust::pair.487"* %92, i32* %94)
          to label %invoke.cont227 unwind label %lpad94

invoke.cont227:                                   ; preds = %invoke.cont224
  %coerce.dive229 = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %agg.tmp215, i32 0, i32 0
  %coerce.dive230 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive229, i32 0, i32 0
  %95 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive230 to { %"struct.thrust::pair.487"*, i32* }*
  %96 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %95, i32 0, i32 0
  %97 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call228, 0
  store %"struct.thrust::pair.487"* %97, %"struct.thrust::pair.487"** %96, align 8
  %98 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %95, i32 0, i32 1
  %99 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call228, 1
  store i32* %99, i32** %98, align 8
  invoke void @_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEC2ES7_(%"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp231)
          to label %invoke.cont233 unwind label %lpad94

invoke.cont233:                                   ; preds = %invoke.cont227
  %100 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp164 to { %"struct.thrust::pair.487"*, i32* }*
  %101 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %100, i32 0, i32 0
  %102 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %101, align 8
  %103 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %100, i32 0, i32 1
  %104 = load i32*, i32** %103, align 8
  %105 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp187 to { %"struct.thrust::pair.487"*, i32* }*
  %106 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %105, i32 0, i32 0
  %107 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %106, align 8
  %108 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %105, i32 0, i32 1
  %109 = load i32*, i32** %108, align 8
  %call235 = invoke { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %42, %"struct.thrust::pair.487"* %102, i32* %104, %"struct.thrust::pair.487"* %107, i32* %109, %"class.thrust::zip_iterator.600"* byval align 8 %agg.tmp215)
          to label %invoke.cont234 unwind label %lpad94

invoke.cont234:                                   ; preds = %invoke.cont233
  %coerce.dive237 = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %coerce236, i32 0, i32 0
  %coerce.dive238 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive237, i32 0, i32 0
  %110 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive238 to { %"struct.thrust::pair.487"*, i32* }*
  %111 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %110, i32 0, i32 0
  %112 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call235, 0
  store %"struct.thrust::pair.487"* %112, %"struct.thrust::pair.487"** %111, align 8
  %113 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %110, i32 0, i32 1
  %114 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call235, 1
  store i32* %114, i32** %113, align 8
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.590"* %temp) #5
  %115 = bitcast %"class.thrust::detail::temporary_array.590"* %temp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %115) #5
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array"* %flags) #5
  %116 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.end(i64 24, i8* %116) #5
  %117 = bitcast %"class.thrust::detail::normal_iterator.505"* %last2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %117) #5
  br label %if.end

lpad:                                             ; preds = %invoke.cont84, %invoke.cont64, %invoke.cont57, %invoke.cont51, %invoke.cont42, %invoke.cont34, %invoke.cont31, %invoke.cont, %if.then
  %118 = landingpad { i8*, i32 }
          cleanup
  %119 = extractvalue { i8*, i32 } %118, 0
  store i8* %119, i8** %exn.slot, align 8
  %120 = extractvalue { i8*, i32 } %118, 1
  store i32 %120, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad94:                                           ; preds = %invoke.cont233, %invoke.cont227, %invoke.cont224, %invoke.cont218, %invoke.cont211, %invoke.cont207, %invoke.cont204, %invoke.cont198, %invoke.cont191, %invoke.cont183, %invoke.cont180, %invoke.cont174, %invoke.cont167, %invoke.cont162, %invoke.cont156, %invoke.cont149, %invoke.cont124, %invoke.cont118, %invoke.cont110, %invoke.cont104, %invoke.cont95, %invoke.cont91
  %121 = landingpad { i8*, i32 }
          cleanup
  %122 = extractvalue { i8*, i32 } %121, 0
  store i8* %122, i8** %exn.slot, align 8
  %123 = extractvalue { i8*, i32 } %121, 1
  store i32 %123, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.590"* %temp) #5
  %124 = bitcast %"class.thrust::detail::temporary_array.590"* %temp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %124) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad94, %lpad
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array"* %flags) #5
  %125 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.end(i64 24, i8* %125) #5
  %126 = bitcast %"class.thrust::detail::normal_iterator.505"* %last2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %126) #5
  %127 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %127) #5
  br label %eh.resume

if.end:                                           ; preds = %invoke.cont234, %entry
  %128 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to %"class.thrust::iterator_facade.507"*
  %129 = load i64, i64* %n, align 8, !tbaa !13
  %call241 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.507"* dereferenceable(1) %128, i64 %129)
  %coerce.dive242 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive243 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive242, i32 0, i32 0
  %coerce.dive244 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive243, i32 0, i32 0
  %coerce.dive245 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive244, i32 0, i32 0
  %coerce.dive246 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive245, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call241, %"struct.thrust::pair.487"** %coerce.dive246, align 8
  %130 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %130) #5
  %coerce.dive248 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive249 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive248, i32 0, i32 0
  %coerce.dive250 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive249, i32 0, i32 0
  %coerce.dive251 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive250, i32 0, i32 0
  %coerce.dive252 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive251, i32 0, i32 0
  %131 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive252, align 8
  ret %"struct.thrust::pair.487"* %131

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val253 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val253
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.507"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.505", align 8
  store %"class.thrust::iterator_facade.507"* %i, %"class.thrust::iterator_facade.507"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.505"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.507"* %1 to %"class.thrust::detail::normal_iterator.505"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.505"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.505"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.505"* %tmp to %"class.thrust::iterator_facade.507"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.507"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.505"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.505"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.505"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %10
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIsEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i16* %first1.coerce, i16* %last1.coerce, i16* %first2.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %op = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp23 = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive13, i32 0, i32 0
  store i16* %first2.coerce, i16** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive17, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive18, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call19 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call19 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.493"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp20 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.493"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.493"* %agg.tmp21 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.493"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp22 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.199"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"struct.thrust::detail::binary_negate.589"* %agg.tmp23 to i8*
  %11 = bitcast %"struct.thrust::detail::binary_negate.589"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 1, i32 1, i1 false), !tbaa.struct !41
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive27, i32 0, i32 0
  %12 = load i16*, i16** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp20, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive32, i32 0, i32 0
  %13 = load i16*, i16** %coerce.dive33, align 8
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %agg.tmp21, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive37, i32 0, i32 0
  %14 = load i16*, i16** %coerce.dive38, align 8
  %coerce.dive39 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp22, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive41, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive42, align 8
  %call43 = call i32* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIsEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i16* %12, i16* %13, i16* %14, i32* %15)
  %coerce.dive44 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive46, i32 0, i32 0
  store i32* %call43, i32** %coerce.dive47, align 8
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive50, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive51, align 8
  ret i32* %16
}

; Function Attrs: uwtable
define linkonce_odr i16* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEmiEl(%"class.thrust::iterator_facade.495"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  %n.addr = alloca i64, align 8
  %result = alloca %"class.thrust::detail::normal_iterator.493", align 8
  store %"class.thrust::iterator_facade.495"* %this, %"class.thrust::iterator_facade.495"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.493"* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.495"* %this1)
  %1 = bitcast %"class.thrust::detail::normal_iterator.493"* %result to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.493"* %result to %"class.thrust::iterator_facade.495"*
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEmIEl(%"class.thrust::iterator_facade.495"* %3, i64 %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.493"* %retval to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.493"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.493"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive5, i32 0, i32 0
  %8 = load i16*, i16** %coerce.dive6, align 8
  ret i16* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i16* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.495"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.493", align 8
  store %"class.thrust::iterator_facade.495"* %i, %"class.thrust::iterator_facade.495"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.493"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.495"* %1 to %"class.thrust::detail::normal_iterator.493"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.493"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.493"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.493"* %tmp to %"class.thrust::iterator_facade.495"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl(%"class.thrust::iterator_facade.495"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.493"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.493"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.493"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  %10 = load i16*, i16** %coerce.dive4, align 8
  ret i16* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail4not2INS_8equal_toIsEEEENS0_13binary_negateIT_EERKS5_(%"struct.thrust::equal_to.512"* dereferenceable(1) %pred) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %pred.addr = alloca %"struct.thrust::equal_to.512"*, align 8
  store %"struct.thrust::equal_to.512"* %pred, %"struct.thrust::equal_to.512"** %pred.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::equal_to.512"*, %"struct.thrust::equal_to.512"** %pred.addr, align 8
  call void @_ZN6thrust6detail13binary_negateINS_8equal_toIsEEEC2ERKS3_(%"struct.thrust::detail::binary_negate.589"* %retval, %"struct.thrust::equal_to.512"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm(%"class.thrust::detail::temporary_array.590"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.590"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.592", align 8
  %ref.tmp2 = alloca %"class.thrust::detail::temporary_allocator.593", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_array.590"* %this, %"class.thrust::detail::temporary_array.590"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_array.590"*, %"class.thrust::detail::temporary_array.590"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.590"* %this1 to %"class.thrust::detail::contiguous_storage.591"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.593"* %ref.tmp2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.592"* %ref.tmp, %"class.thrust::detail::temporary_allocator.593"* dereferenceable(8) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_(%"class.thrust::detail::contiguous_storage.591"* %0, i64 %1, %"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.594"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.592"*)*)(%"struct.thrust::detail::no_throw_allocator.592"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.594"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.593"*)*)(%"class.thrust::detail::temporary_allocator.593"* %ref.tmp2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIssEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.590"* dereferenceable(24) %this1, i64 %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.594"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.592"*)*)(%"struct.thrust::detail::no_throw_allocator.592"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.594"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.593"*)*)(%"class.thrust::detail::temporary_allocator.593"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::detail::temporary_array.590"* %this1 to %"class.thrust::detail::contiguous_storage.591"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.591"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val8 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val8
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, i32* %stencil.coerce, %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"* dereferenceable(4) %new_value) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %stencil = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %pred = alloca %"struct.thrust::negate", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %new_value.addr = alloca %"struct.thrust::pair.487"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %agg.tmp22 = alloca %"struct.thrust::negate", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %stencil, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %stencil.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %new_value, %"struct.thrust::pair.487"** %new_value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call18 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call18 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.505"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp19 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.505"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp20 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %stencil to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.596"* %agg.tmp21 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.596"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %new_value.addr, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive26, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp19, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive31, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp20, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive35, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp21, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive39, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive40, align 8
  %call41 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %11, %"struct.thrust::pair.487"* %12, i32* %13, %"struct.thrust::pair.487"* %14, %"struct.thrust::pair.487"* dereferenceable(4) %10)
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive44, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call41, %"struct.thrust::pair.487"** %coerce.dive45, align 8
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive48, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive49, align 8
  ret %"struct.thrust::pair.487"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl(%"class.thrust::iterator_facade.507"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  %n.addr = alloca i64, align 8
  %result = alloca %"class.thrust::detail::normal_iterator.505", align 8
  store %"class.thrust::iterator_facade.507"* %this, %"class.thrust::iterator_facade.507"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.507"* %this1)
  %1 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.505"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to %"class.thrust::iterator_facade.507"*
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl(%"class.thrust::iterator_facade.507"* %3, i64 %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.505"* %retval to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.505"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.505"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive5, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.487"* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.598"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.596", align 8
  store %"class.thrust::iterator_facade.598"* %i, %"class.thrust::iterator_facade.598"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.598"* %1 to %"class.thrust::detail::normal_iterator.596"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.596"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.596"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.596"* %tmp to %"class.thrust::iterator_facade.598"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.598"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.596"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.596"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.596"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.591"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.596"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.591"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %m_begin to %"class.thrust::iterator_facade.598"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl(%"class.thrust::iterator_facade.598"* %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.599"* @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_(%"class.thrust::reference.599"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %v) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.599"*, align 8
  %v.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::reference.599"* %this, %"class.thrust::reference.599"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %v, %"struct.thrust::pair.487"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.599"*, %"class.thrust::reference.599"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %v.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_(%"class.thrust::reference.599"* %this1, %"struct.thrust::pair.487"* %0)
  ret %"class.thrust::reference.599"* %this1
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.600"* byval align 8 %result) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.600", align 8
  %first = alloca %"class.thrust::zip_iterator.604", align 8
  %last = alloca %"class.thrust::zip_iterator.604", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.600", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %0 = bitcast %"class.thrust::zip_iterator.604"* %first to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.604"* %last to { %"struct.thrust::pair.487"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %8 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.604"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.604"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"class.thrust::zip_iterator.600"* %agg.tmp3 to i8*
  %13 = bitcast %"class.thrust::zip_iterator.600"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 16, i32 8, i1 false)
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp4 to i8*
  %15 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 1, i32 1, i1 false), !tbaa.struct !41
  %16 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp to { %"struct.thrust::pair.487"*, i32* }*
  %17 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %16, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %17, align 8
  %19 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %16, i32 0, i32 1
  %20 = load i32*, i32** %19, align 8
  %21 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp2 to { %"struct.thrust::pair.487"*, i32* }*
  %22 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %21, i32 0, i32 0
  %23 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %22, align 8
  %24 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %21, i32 0, i32 1
  %25 = load i32*, i32** %24, align 8
  %call5 = call { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %7, %"struct.thrust::pair.487"* %18, i32* %20, %"struct.thrust::pair.487"* %23, i32* %25, %"class.thrust::zip_iterator.600"* byval align 8 %agg.tmp3)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive, i32 0, i32 0
  %26 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive6 to { %"struct.thrust::pair.487"*, i32* }*
  %27 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %26, i32 0, i32 0
  %28 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call5, 0
  store %"struct.thrust::pair.487"* %28, %"struct.thrust::pair.487"** %27, align 8
  %29 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %26, i32 0, i32 1
  %30 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call5, 1
  store i32* %30, i32** %29, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive7, i32 0, i32 0
  %31 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive8 to { %"struct.thrust::pair.487"*, i32* }*
  %32 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %31, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %32
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair.487"* %t.coerce0, i32* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.604", align 8
  %t = alloca %"class.thrust::tuple.606", align 8
  %agg.tmp = alloca %"class.thrust::tuple.606", align 8
  %0 = bitcast %"class.thrust::tuple.606"* %t to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %t.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %t.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::tuple.606"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.606"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.606"* %agg.tmp to { %"struct.thrust::pair.487"*, i32* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %5, i32 0, i32 1
  %9 = load i32*, i32** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_(%"class.thrust::zip_iterator.604"* %retval, %"struct.thrust::pair.487"* %7, i32* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive1 to { %"struct.thrust::pair.487"*, i32* }*
  %11 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.606", align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.596"* %t0, %"class.thrust::detail::normal_iterator.596"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_(%"class.thrust::tuple.606"* %retval, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive to { %"struct.thrust::pair.487"*, i32* }*
  %3 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %2, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::iterator_facade.605"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.604", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.605"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.604", align 8
  store %"class.thrust::iterator_facade.605"* %i, %"class.thrust::iterator_facade.605"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.604"* %tmp to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.605"*, %"class.thrust::iterator_facade.605"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.605"* %1 to %"class.thrust::zip_iterator.604"*
  %3 = bitcast %"class.thrust::zip_iterator.604"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.604"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.604"* %tmp to %"class.thrust::iterator_facade.605"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.604"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl(%"class.thrust::iterator_facade.605"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.604"* %retval to i8*
  %8 = bitcast %"class.thrust::zip_iterator.604"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.604"* %tmp to i8*
  call void @llvm.lifetime.end(i64 16, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.606", %"class.thrust::tuple.606"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.607"* %coerce.dive1 to { %"struct.thrust::pair.487"*, i32* }*
  %11 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %11
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_(%"struct.thrust::pair.487"* %t.coerce0, i32* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.600", align 8
  %t = alloca %"class.thrust::tuple.602", align 8
  %agg.tmp = alloca %"class.thrust::tuple.602", align 8
  %0 = bitcast %"class.thrust::tuple.602"* %t to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %t.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %t.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::tuple.602"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.602"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.602"* %agg.tmp to { %"struct.thrust::pair.487"*, i32* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %5, i32 0, i32 1
  %9 = load i32*, i32** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_(%"class.thrust::zip_iterator.600"* %retval, %"struct.thrust::pair.487"* %7, i32* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive1 to { %"struct.thrust::pair.487"*, i32* }*
  %11 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.602", align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.505"* %t0, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_(%"class.thrust::tuple.602"* %retval, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive to { %"struct.thrust::pair.487"*, i32* }*
  %3 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %2, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEC2ES7_(%"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %_binary_op = alloca %struct.add_pairs, align 1
  %this.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %this, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %this.addr, align 8
  %binary_op = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.590"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.590"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  store %"class.thrust::detail::temporary_array.590"* %this, %"class.thrust::detail::temporary_array.590"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.590"*, %"class.thrust::detail::temporary_array.590"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.590"* %this1 to %"class.thrust::detail::contiguous_storage.591"*
  %1 = bitcast %"class.thrust::detail::temporary_array.590"* %this1 to %"class.thrust::detail::contiguous_storage.591"*
  %call = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.591"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.590"* %this1 to %"class.thrust::detail::contiguous_storage.591"*
  %call7 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.591"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call7, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive14, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive18, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.591"* %0, %"struct.thrust::pair.487"* %3, %"struct.thrust::pair.487"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.590"* %this1 to %"class.thrust::detail::contiguous_storage.591"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.591"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.590"* %this1 to %"class.thrust::detail::contiguous_storage.591"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.591"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIsEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i16* %first1.coerce, i16* %last1.coerce, i16* %first2.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.493", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %op = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp19 = alloca %"class.thrust::tuple.611", align 8
  %agg.tmp20 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp21 = alloca %"class.thrust::tuple.611", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  %agg.tmp23 = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive3, i32 0, i32 0
  store i16* %first1.coerce, i16** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive8, i32 0, i32 0
  store i16* %last1.coerce, i16** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.493", %"class.thrust::detail::normal_iterator.493"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.494", %"class.thrust::iterator_adaptor.494"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.496", %"class.thrust::device_ptr.496"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.497", %"class.thrust::pointer.497"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.498", %"class.thrust::iterator_adaptor.498"* %coerce.dive13, i32 0, i32 0
  store i16* %first2.coerce, i16** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive17, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive18, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.609"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.611"* sret %agg.tmp19, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.609"* sret %agg.tmp, %"class.thrust::tuple.611"* byval align 8 %agg.tmp19)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.611"* sret %agg.tmp21, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.609"* sret %agg.tmp20, %"class.thrust::tuple.611"* byval align 8 %agg.tmp21)
  %3 = bitcast %"struct.thrust::detail::binary_negate.589"* %agg.tmp23 to i8*
  %4 = bitcast %"struct.thrust::detail::binary_negate.589"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEC2ES5_(%"struct.thrust::detail::binary_transform_functor.614"* %agg.tmp22)
  call void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_(%"class.thrust::zip_iterator.609"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp20)
  %call = call dereferenceable(24) %"class.thrust::tuple.611"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.609"* %zipped_result)
  %5 = bitcast %"class.thrust::tuple.611"* %call to %"struct.thrust::detail::cons.612"*
  %call24 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.612"* dereferenceable(24) %5)
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %retval to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %call24 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::zip_iterator.609"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %8) #5
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive27, i32 0, i32 0
  %9 = load i32*, i32** %coerce.dive28, align 8
  ret i32* %9
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_(%"class.thrust::zip_iterator.609"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.609"* byval align 8 %first, %"class.thrust::zip_iterator.609"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %4 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp2 to i8*
  %5 = bitcast %"class.thrust::zip_iterator.609"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %agg.tmp3 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_(%"class.thrust::zip_iterator.609"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.609"* noalias sret %agg.result, %"class.thrust::tuple.611"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.611", align 8
  %0 = bitcast %"class.thrust::tuple.611"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.611"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_(%"class.thrust::zip_iterator.609"* %agg.result, %"class.thrust::tuple.611"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.611"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.493"* %t0, %"class.thrust::detail::normal_iterator.493"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.493"* %t1, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_(%"class.thrust::tuple.611"* %agg.result, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEC2ES5_(%"struct.thrust::detail::binary_transform_functor.614"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_negate.589", align 1
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor.614"*, align 8
  store %"struct.thrust::detail::binary_transform_functor.614"* %this, %"struct.thrust::detail::binary_transform_functor.614"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor.614"*, %"struct.thrust::detail::binary_transform_functor.614"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.614", %"struct.thrust::detail::binary_transform_functor.614"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::binary_negate.589"* %f2 to i8*
  %1 = bitcast %"struct.thrust::detail::binary_negate.589"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.612"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.612"*, align 8
  store %"struct.thrust::detail::cons.612"* %c, %"struct.thrust::detail::cons.612"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.612"*, %"struct.thrust::detail::cons.612"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIsEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.612"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.611"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.609"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  store %"class.thrust::zip_iterator.609"* %this, %"class.thrust::zip_iterator.609"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.609", %"class.thrust::zip_iterator.609"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.611"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_(%"class.thrust::zip_iterator.609"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.609"* byval align 8 %first, %"class.thrust::zip_iterator.609"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %3 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp1 to i8*
  %4 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 8, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp2 to i8*
  %6 = bitcast %"class.thrust::zip_iterator.609"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_(%"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp1, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp2)
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %agg.tmp3 to i8*
  %8 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_(%"class.thrust::zip_iterator.609"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp, i64 %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_(%"class.thrust::zip_iterator.609"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.609"* byval align 8 %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp1 = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %agg.tmp1 to i8*
  %5 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_(%"class.thrust::zip_iterator.609"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_(%"class.thrust::zip_iterator.609"* byval align 8 %first, %"class.thrust::zip_iterator.609"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.609", align 8
  %0 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.609"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_(%"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIsEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_(%"class.thrust::zip_iterator.609"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.609"* byval align 8 %first, i64 %n) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.614", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp2 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp4 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce9 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp11 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp12 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp13 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp14 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp15 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp16 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %ref.tmp19 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp22 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp25 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp26 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp27 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp28 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %ref.tmp29 = alloca i32, align 4
  %agg.tmp.ensured32 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp33 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp38 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp39 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp40 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp41 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.615"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.615"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor.614"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp3 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 24, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.615"* %agg.tmp4 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.615"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %call5 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp3, i32 %15)
  %16 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call5, i64* %16, align 4
  %call6 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %17 = load i64, i64* %n.addr, align 8, !tbaa !13
  %18 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %19 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %18, %19
  %call7 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %17, i32 %mul)
  br i1 %call7, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %20 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %20) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %21 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call8 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce9, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive10 to { i64*, i64* }*
  %23 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %22, i32 0, i32 0
  %24 = extractvalue { i64*, i64* } %call8, 0
  store i64* %24, i64** %23, align 8
  %25 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %22, i32 0, i32 1
  %26 = extractvalue { i64*, i64* } %call8, 1
  store i64* %26, i64** %25, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp12, i64 2147483647, i64 2147483647, i64 2147483647)
  %27 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp14 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %27, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %28 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp15 to i8*
  %29 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* %29, i64 24, i32 8, i1 false)
  %30 = bitcast %"struct.thrust::detail::wrapped_function.615"* %agg.tmp16 to i8*
  %31 = bitcast %"struct.thrust::detail::wrapped_function.615"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 1, i32 1, i1 false), !tbaa.struct !41
  %32 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp12, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp15, i64 %32)
  %33 = bitcast %"struct.thrust::pair.82"* %ref.tmp11 to i64*
  store i64 %call17, i64* %33, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce9, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp11)
  %34 = load i64, i64* %n.addr, align 8, !tbaa !13
  %35 = load i64, i64* %group_size, align 8, !tbaa !13
  %call20 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %34, i64 %35)
  store i64 %call20, i64* %ref.tmp19, align 8, !tbaa !13
  %call21 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp19)
  store i64 %call21, i64* %num_groups, align 8, !tbaa !13
  %36 = load i64, i64* %num_groups, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %38 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %39 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %38 to %"struct.thrust::detail::execution_policy_base.121"*
  %call23 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %39)
  %40 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call23 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call24 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %40)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp22, i64 %36, i64 %37, i64 0, %struct.CUstream_st* %call24)
  %41 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp26 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %41, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %42 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp27 to i8*
  %43 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %42, i8* %43, i64 24, i32 8, i1 false)
  %44 = bitcast %"struct.thrust::detail::wrapped_function.615"* %agg.tmp28 to i8*
  %45 = bitcast %"struct.thrust::detail::wrapped_function.615"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 1, i32 1, i1 false), !tbaa.struct !41
  %46 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp22, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp27, i64 %46)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %47 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %47) #5
  %48 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %48) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %49 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %50 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call30 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %49, i32 %50)
  store i32 %call30, i32* %ref.tmp29, align 4, !tbaa !11
  %call31 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp29)
  store i32 %call31, i32* %narrow_num_groups, align 4, !tbaa !11
  %51 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv34 = zext i32 %51 to i64
  %52 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv35 = zext i32 %52 to i64
  %53 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %54 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %53 to %"struct.thrust::detail::execution_policy_base.121"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %54)
  %55 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call36 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %55)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp33, i64 %conv34, i64 %conv35, i64 0, %struct.CUstream_st* %call37)
  %56 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp39 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %56, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %57 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp40 to i8*
  %58 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %57, i8* %58, i64 24, i32 8, i1 false)
  %59 = bitcast %"struct.thrust::detail::wrapped_function.615"* %agg.tmp41 to i8*
  %60 = bitcast %"struct.thrust::detail::wrapped_function.615"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* %60, i64 1, i32 1, i1 false), !tbaa.struct !41
  %61 = load i32, i32* %narrow_n, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured32, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp33, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp40, i32 %61)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured32) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %62 = bitcast %"class.thrust::zip_iterator.609"* %first to %"class.thrust::iterator_facade.610"*
  %63 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::zip_iterator.609"* sret %agg.result, %"class.thrust::iterator_facade.610"* dereferenceable(1) %62, i64 %63)
  %64 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %64) #5
  %65 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %65) #5
  %66 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %66) #5
  %67 = bitcast %"struct.thrust::detail::wrapped_function.615"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %67) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.615"* %this, %"struct.thrust::detail::binary_transform_functor.614"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %f.addr = alloca %"struct.thrust::detail::binary_transform_functor.614"*, align 8
  store %"struct.thrust::detail::wrapped_function.615"* %this, %"struct.thrust::detail::wrapped_function.615"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::binary_transform_functor.614"* %f, %"struct.thrust::detail::binary_transform_functor.614"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.615", %"struct.thrust::detail::wrapped_function.615"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::binary_transform_functor.614"*, %"struct.thrust::detail::binary_transform_functor.614"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.614"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.609"* byval align 8 %arg2, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIsEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp3)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.609"* byval align 8 %arg2, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIsEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp3)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.609"* byval align 8 %arg2, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.609"* byval align 8 %arg2, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.615", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::zip_iterator.609"* noalias sret %agg.result, %"class.thrust::iterator_facade.610"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %i.addr = alloca %"class.thrust::iterator_facade.610"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.609", align 8
  store %"class.thrust::iterator_facade.610"* %i, %"class.thrust::iterator_facade.610"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.609"* %tmp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.610"*, %"class.thrust::iterator_facade.610"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.610"* %1 to %"class.thrust::zip_iterator.609"*
  %3 = bitcast %"class.thrust::zip_iterator.609"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.609"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.609"* %tmp to %"class.thrust::iterator_facade.610"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.609"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl(%"class.thrust::iterator_facade.610"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.609"* %agg.result to i8*
  %8 = bitcast %"class.thrust::zip_iterator.609"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.609"* %tmp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %9) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIsEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.617", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %a2, %"class.thrust::zip_iterator.609"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %a3, %"struct.thrust::detail::wrapped_function.615"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIsEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.617"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %agg.result, %"class.thrust::tuple.617"* dereferenceable(40) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIsEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.617"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %t1, %"class.thrust::zip_iterator.609"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t2, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIsEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj(%"class.thrust::tuple.617"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %this, %"class.thrust::tuple.617"* dereferenceable(40) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"*, align 8
  %args.addr = alloca %"class.thrust::tuple.617"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.617"* %args, %"class.thrust::tuple.617"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.617"*, %"class.thrust::tuple.617"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.617"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.617"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIsEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj(%"class.thrust::tuple.617"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.617"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.617"* %this, %"class.thrust::tuple.617"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %t1, %"class.thrust::zip_iterator.609"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t2, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.617"*, %"class.thrust::tuple.617"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.617"* %this1 to %"struct.thrust::detail::cons.618"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.618"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.618"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.618"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.618"* %this, %"struct.thrust::detail::cons.618"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %t2, %"class.thrust::zip_iterator.609"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t3, %"struct.thrust::detail::wrapped_function.615"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.618"*, %"struct.thrust::detail::cons.618"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.618", %"struct.thrust::detail::cons.618"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.618", %"struct.thrust::detail::cons.618"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.619"* %tail, %"class.thrust::zip_iterator.609"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.619"* %this, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.619"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.619"* %this, %"struct.thrust::detail::cons.619"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.609"* %t1, %"class.thrust::zip_iterator.609"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t2, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.619"*, %"struct.thrust::detail::cons.619"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.619", %"struct.thrust::detail::cons.619"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.609"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.609"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.619", %"struct.thrust::detail::cons.619"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.620"* %tail, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.620"* %this, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.620"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.620"* %this, %"struct.thrust::detail::cons.620"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.615"* %t1, %"struct.thrust::detail::wrapped_function.615"** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.620"*, %"struct.thrust::detail::cons.620"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.620", %"struct.thrust::detail::cons.620"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.615"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.615"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.620", %"struct.thrust::detail::cons.620"* %this1, i32 0, i32 1
  %3 = load i32*, i32** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %tail, i32* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIsEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.629", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %a2, %"class.thrust::zip_iterator.609"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %a3, %"struct.thrust::detail::wrapped_function.615"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIsEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.629"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %agg.result, %"class.thrust::tuple.629"* dereferenceable(48) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIsEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.629"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %t1, %"class.thrust::zip_iterator.609"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t2, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIsEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl(%"class.thrust::tuple.629"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIsEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %this, %"class.thrust::tuple.629"* dereferenceable(48) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"*, align 8
  %args.addr = alloca %"class.thrust::tuple.629"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.629"* %args, %"class.thrust::tuple.629"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.629"*, %"class.thrust::tuple.629"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.629"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.629"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 48, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIsEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl(%"class.thrust::tuple.629"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.629"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.629"* %this, %"class.thrust::tuple.629"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %t1, %"class.thrust::zip_iterator.609"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t2, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.629"*, %"class.thrust::tuple.629"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.629"* %this1 to %"struct.thrust::detail::cons.630"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.630"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.630"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.630"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.630"* %this, %"struct.thrust::detail::cons.630"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %t2, %"class.thrust::zip_iterator.609"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t3, %"struct.thrust::detail::wrapped_function.615"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.630"*, %"struct.thrust::detail::cons.630"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.630", %"struct.thrust::detail::cons.630"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.630", %"struct.thrust::detail::cons.630"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.631"* %tail, %"class.thrust::zip_iterator.609"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.631"* %this, %"class.thrust::zip_iterator.609"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.631"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.631"* %this, %"struct.thrust::detail::cons.631"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.609"* %t1, %"class.thrust::zip_iterator.609"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.615"* %t2, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.631"*, %"struct.thrust::detail::cons.631"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.631", %"struct.thrust::detail::cons.631"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.609"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.609"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.631", %"struct.thrust::detail::cons.631"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.632"* %tail, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIsEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.632"* %this, %"struct.thrust::detail::wrapped_function.615"* dereferenceable(1) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.632"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.615"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.632"* %this, %"struct.thrust::detail::cons.632"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.615"* %t1, %"struct.thrust::detail::wrapped_function.615"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.632"*, %"struct.thrust::detail::cons.632"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.632", %"struct.thrust::detail::cons.632"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.615"*, %"struct.thrust::detail::wrapped_function.615"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.615"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.615"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.632", %"struct.thrust::detail::cons.632"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %tail, i64* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 56, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 56, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 56, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.633"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.628", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 56, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !405
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.634"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.628"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.638"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.635"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.637"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 48, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 48, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %task to i8*
  call void @llvm.lifetime.start(i64 80, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 48, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %task to i8*
  call void @llvm.lifetime.end(i64 80, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.621"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.616", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !407
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.622"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.616"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.626"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.623"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 80, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 80, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 80, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIsEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIsEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.625"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.609"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl(%"class.thrust::iterator_facade.610"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.610"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.610"* %this, %"class.thrust::iterator_facade.610"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.610"*, %"class.thrust::iterator_facade.610"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.609"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.610"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE(%"class.thrust::zip_iterator.609"* dereferenceable(24) %call, i64 %0)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.609"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.610"* %this1)
  ret %"class.thrust::zip_iterator.609"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE(%"class.thrust::zip_iterator.609"* dereferenceable(24) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.609"* %f, %"class.thrust::zip_iterator.609"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl(%"class.thrust::zip_iterator.609"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.609"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.610"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.610"*, align 8
  store %"class.thrust::iterator_facade.610"* %this, %"class.thrust::iterator_facade.610"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.610"*, %"class.thrust::iterator_facade.610"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.610"* %this1 to %"class.thrust::zip_iterator.609"*
  ret %"class.thrust::zip_iterator.609"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl(%"class.thrust::zip_iterator.609"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.609"* %this, %"class.thrust::zip_iterator.609"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.609", %"class.thrust::zip_iterator.609"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_(%"class.thrust::tuple.611"* dereferenceable(24) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_(%"class.thrust::tuple.611"* dereferenceable(24) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.611"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.611"* %t, %"class.thrust::tuple.611"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.611"*, %"class.thrust::tuple.611"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.611"* %0 to %"struct.thrust::detail::cons.612"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.612"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIsEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.611"*, %"class.thrust::tuple.611"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.611"* %2 to %"struct.thrust::detail::cons.612"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.613"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.612"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_(%"struct.thrust::detail::cons.613"* dereferenceable(16) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIsEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.493"* %it, %"class.thrust::detail::normal_iterator.493"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.493"* %0 to %"class.thrust::iterator_facade.495"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEpLEl(%"class.thrust::iterator_facade.495"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.612"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.612"*, align 8
  store %"struct.thrust::detail::cons.612"* %this, %"struct.thrust::detail::cons.612"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.612"*, %"struct.thrust::detail::cons.612"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.612", %"struct.thrust::detail::cons.612"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.493"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_(%"struct.thrust::detail::cons.613"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.613"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.613"* %t, %"struct.thrust::detail::cons.613"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.613"*, %"struct.thrust::detail::cons.613"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.613"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIsEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.613"*, %"struct.thrust::detail::cons.613"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.613"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.613"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.612"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.612"*, align 8
  store %"struct.thrust::detail::cons.612"* %this, %"struct.thrust::detail::cons.612"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.612"*, %"struct.thrust::detail::cons.612"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.612", %"struct.thrust::detail::cons.612"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.613"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.613"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.613"*, align 8
  store %"struct.thrust::detail::cons.613"* %this, %"struct.thrust::detail::cons.613"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.613"*, %"struct.thrust::detail::cons.613"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.613", %"struct.thrust::detail::cons.613"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.493"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.613"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.613"*, align 8
  store %"struct.thrust::detail::cons.613"* %this, %"struct.thrust::detail::cons.613"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.613"*, %"struct.thrust::detail::cons.613"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.613", %"struct.thrust::detail::cons.613"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_(%"class.thrust::zip_iterator.609"* byval align 8 %first, %"class.thrust::zip_iterator.609"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.609", align 8
  %agg.tmp2 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.609"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.609"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.609"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.609"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.609"* byval align 8 %first, %"class.thrust::zip_iterator.609"* byval align 8 %last) #8 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = bitcast %"class.thrust::zip_iterator.609"* %last to %"class.thrust::iterator_facade.610"*
  %2 = bitcast %"class.thrust::zip_iterator.609"* %first to %"class.thrust::iterator_facade.610"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.610"* dereferenceable(1) %1, %"class.thrust::iterator_facade.610"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IssjSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIsEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.610"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.610"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.610"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.610"*, align 8
  store %"class.thrust::iterator_facade.610"* %lhs, %"class.thrust::iterator_facade.610"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.610"* %rhs, %"class.thrust::iterator_facade.610"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.610"*, %"class.thrust::iterator_facade.610"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.610"* %0 to %"class.thrust::zip_iterator.609"*
  %2 = load %"class.thrust::iterator_facade.610"*, %"class.thrust::iterator_facade.610"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.610"* %2 to %"class.thrust::zip_iterator.609"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_(%"class.thrust::zip_iterator.609"* dereferenceable(24) %1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_(%"class.thrust::zip_iterator.609"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.609"* %f1, %"class.thrust::zip_iterator.609"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %f2, %"class.thrust::zip_iterator.609"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.609"* dereferenceable(24) %0, %"class.thrust::zip_iterator.609"* dereferenceable(24) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.609"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  store %"class.thrust::zip_iterator.609"* %f1, %"class.thrust::zip_iterator.609"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.609"* %f2, %"class.thrust::zip_iterator.609"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.609"* %1, %"class.thrust::zip_iterator.609"* dereferenceable(24) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.609"* %this, %"class.thrust::zip_iterator.609"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  store %"class.thrust::zip_iterator.609"* %this, %"class.thrust::zip_iterator.609"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.609"* %other, %"class.thrust::zip_iterator.609"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %other.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.611"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.609"* %0)
  %1 = bitcast %"class.thrust::tuple.611"* %call to %"struct.thrust::detail::cons.612"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.612"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %call2 to %"class.thrust::iterator_facade.495"*
  %call3 = call dereferenceable(24) %"class.thrust::tuple.611"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.609"* %this1)
  %3 = bitcast %"class.thrust::tuple.611"* %call3 to %"struct.thrust::detail::cons.612"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.612"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.493"* %call4 to %"class.thrust::iterator_facade.495"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElS5_sS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.495"* dereferenceable(1) %2, %"class.thrust::iterator_facade.495"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIsEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.612"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.612"*, align 8
  store %"struct.thrust::detail::cons.612"* %c, %"struct.thrust::detail::cons.612"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.612"*, %"struct.thrust::detail::cons.612"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE(%"struct.thrust::detail::cons.612"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.493"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIsEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE(%"struct.thrust::detail::cons.612"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.612"*, align 8
  store %"struct.thrust::detail::cons.612"* %t, %"struct.thrust::detail::cons.612"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.612"*, %"struct.thrust::detail::cons.612"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.612", %"struct.thrust::detail::cons.612"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.493"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_(%"class.thrust::zip_iterator.609"* %this, %"class.thrust::tuple.611"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.609"*, align 8
  store %"class.thrust::zip_iterator.609"* %this, %"class.thrust::zip_iterator.609"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.609"*, %"class.thrust::zip_iterator.609"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.609"* %this1 to %"class.thrust::iterator_facade.610"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.609", %"class.thrust::zip_iterator.609"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.611"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.611"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIsEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_(%"class.thrust::tuple.611"* %this, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.611"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.611"* %this, %"class.thrust::tuple.611"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.493"* %t0, %"class.thrust::detail::normal_iterator.493"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.493"* %t1, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.611"*, %"class.thrust::tuple.611"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.611"* %this1 to %"struct.thrust::detail::cons.612"*
  %1 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.612"* %0, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.612"* %this, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.612"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.612"* %this, %"struct.thrust::detail::cons.612"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.493"* %t1, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.493"* %t2, %"class.thrust::detail::normal_iterator.493"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t3, %"class.thrust::detail::normal_iterator.199"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.612"*, %"struct.thrust::detail::cons.612"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.612", %"struct.thrust::detail::cons.612"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.493"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.612", %"struct.thrust::detail::cons.612"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.613"* %tail, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIsEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.613"* %this, %"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.613"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.493"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.613"* %this, %"struct.thrust::detail::cons.613"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.493"* %t1, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.613"*, %"struct.thrust::detail::cons.613"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.613", %"struct.thrust::detail::cons.613"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.493"*, %"class.thrust::detail::normal_iterator.493"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.493"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.493"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.613", %"struct.thrust::detail::cons.613"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIsEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.612"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.612"*, align 8
  store %"struct.thrust::detail::cons.612"* %t, %"struct.thrust::detail::cons.612"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.612"*, %"struct.thrust::detail::cons.612"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.612", %"struct.thrust::detail::cons.612"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIsEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.613"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIsEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.613"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.613"*, align 8
  store %"struct.thrust::detail::cons.613"* %t, %"struct.thrust::detail::cons.613"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.613"*, %"struct.thrust::detail::cons.613"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.613", %"struct.thrust::detail::cons.613"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESC_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.220"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.495"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  store %"class.thrust::iterator_facade.495"* %this, %"class.thrust::iterator_facade.495"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.495"* %this1 to %"class.thrust::detail::normal_iterator.493"*
  ret %"class.thrust::detail::normal_iterator.493"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEmIEl(%"class.thrust::iterator_facade.495"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.495"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.495"* %this, %"class.thrust::iterator_facade.495"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.495"*, %"class.thrust::iterator_facade.495"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.495"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %sub = sub nsw i64 0, %0
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIsEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.493"* dereferenceable(8) %call, i64 %sub)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.493"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIsEEEEsNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElE7derivedEv(%"class.thrust::iterator_facade.495"* %this1)
  ret %"class.thrust::detail::normal_iterator.493"* %call2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail13binary_negateINS_8equal_toIsEEEC2ERKS3_(%"struct.thrust::detail::binary_negate.589"* %this, %"struct.thrust::equal_to.512"* dereferenceable(1) %pred) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::binary_negate.589"*, align 8
  %pred.addr = alloca %"struct.thrust::equal_to.512"*, align 8
  store %"struct.thrust::detail::binary_negate.589"* %this, %"struct.thrust::detail::binary_negate.589"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::equal_to.512"* %pred, %"struct.thrust::equal_to.512"** %pred.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::binary_negate.589"*, %"struct.thrust::detail::binary_negate.589"** %this.addr, align 8
  %pred2 = getelementptr inbounds %"struct.thrust::detail::binary_negate.589", %"struct.thrust::detail::binary_negate.589"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::equal_to.512"*, %"struct.thrust::equal_to.512"** %pred.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.593"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.593"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.593"* %this, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.593"*, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.593"* %this1 to %"class.thrust::detail::tagged_allocator.594"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.594"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.593", %"class.thrust::detail::temporary_allocator.593"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cuda::detail::tag"* %call, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.593"* %this1 to %"class.thrust::detail::tagged_allocator.594"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.594"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.592"* %this, %"class.thrust::detail::temporary_allocator.593"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.593"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %this, %"struct.thrust::detail::no_throw_allocator.592"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.593"* %other, %"class.thrust::detail::temporary_allocator.593"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.592"* %this1 to %"class.thrust::detail::temporary_allocator.593"*
  %1 = load %"class.thrust::detail::temporary_allocator.593"*, %"class.thrust::detail::temporary_allocator.593"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.593"* %0, %"class.thrust::detail::temporary_allocator.593"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_(%"class.thrust::detail::contiguous_storage.591"* %this, i64 %n, %"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  %n.addr = alloca i64, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store %"struct.thrust::detail::no_throw_allocator.592"* %alloc, %"struct.thrust::detail::no_throw_allocator.592"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.592"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.562"* %agg.tmp, %"struct.thrust::pair.487"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.596"* %m_begin, %"struct.thrust::pair.487"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !409
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.591"* %this1, i64 %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont3
  ret void

lpad:                                             ; preds = %invoke.cont3, %invoke.cont, %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.594"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.592"*)*)(%"struct.thrust::detail::no_throw_allocator.592"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.594"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.594"*, align 8
  store %"class.thrust::detail::tagged_allocator.594"* %this, %"class.thrust::detail::tagged_allocator.594"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.594"*, %"class.thrust::detail::tagged_allocator.594"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIssEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.590"* dereferenceable(24), i64) #1 comdat {
entry:
  %.addr = alloca %"class.thrust::detail::temporary_array.590"*, align 8
  %.addr1 = alloca i64, align 8
  store %"class.thrust::detail::temporary_array.590"* %0, %"class.thrust::detail::temporary_array.590"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr1, align 8, !tbaa !13
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.591"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.591"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.594"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.592"*)*)(%"struct.thrust::detail::no_throw_allocator.592"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.594"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.592"*)*)(%"struct.thrust::detail::no_throw_allocator.592"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.594"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.594"*, align 8
  store %"class.thrust::detail::tagged_allocator.594"* %this, %"class.thrust::detail::tagged_allocator.594"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.594"*, %"class.thrust::detail::tagged_allocator.594"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.593"* %this, %"class.thrust::detail::temporary_allocator.593"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.593"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.593"*, align 8
  store %"class.thrust::detail::temporary_allocator.593"* %this, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.593"* %other, %"class.thrust::detail::temporary_allocator.593"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.593"*, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.593"* %this1 to %"class.thrust::detail::tagged_allocator.594"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.594"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.593", %"class.thrust::detail::temporary_allocator.593"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.593"*, %"class.thrust::detail::temporary_allocator.593"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.593", %"class.thrust::detail::temporary_allocator.593"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::tag"* %ref, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.592"* %this, %"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %this, %"struct.thrust::detail::no_throw_allocator.592"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.592"* %0, %"struct.thrust::detail::no_throw_allocator.592"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.592"* %this1 to %"class.thrust::detail::temporary_allocator.593"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.592"* %2 to %"class.thrust::detail::temporary_allocator.593"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.593"* %1, %"class.thrust::detail::temporary_allocator.593"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.596"* %this, %"struct.thrust::pair.487"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.596"* %this, %"class.thrust::detail::normal_iterator.596"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %this2 to %"class.thrust::iterator_adaptor.597"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.597"* %0, %"class.thrust::pointer.562"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.591"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.562", align 8
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.596"* %ref.tmp, %"struct.thrust::pair.487"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.596"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.596"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !409
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.562"* %agg.tmp7, %"struct.thrust::pair.487"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive8, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.596"* %ref.tmp6, %"struct.thrust::pair.487"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.596"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.596"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !409
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.597"* %this, %"class.thrust::pointer.562"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.597"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.562"*, align 8
  store %"class.thrust::iterator_adaptor.597"* %this, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.562"* %iter, %"class.thrust::pointer.562"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.597"*, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.597"* %this1 to %"class.thrust::iterator_facade.598"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.562"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.562"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.592"* %0 to %"class.thrust::detail::temporary_allocator.593"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.593"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.593"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.593"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.640", align 8
  %ref.tmp = alloca %"struct.thrust::pair.641", align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.593"* %this, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.593"*, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.640"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.593"* %this1)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIssEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.641"* %ref.tmp to { %"struct.thrust::pair.487"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 0
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.640"* %result, %"struct.thrust::pair.641"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.640", %"struct.thrust::pair.640"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !413
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.640", %"struct.thrust::pair.640"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.562"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.593"* %this1, %"struct.thrust::pair.487"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.640"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.640", %"struct.thrust::pair.640"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.562"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.562"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.640"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive11, i32 0, i32 0
  %25 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.487"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIssEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.641", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.641", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIssEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.641"* %agg.tmp to { %"struct.thrust::pair.487"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 0
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.641"* %agg.tmp to { %"struct.thrust::pair.487"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIssEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.487"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.641"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %14 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call3, 0
  store %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"** %14, align 8
  %16 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.641"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %19 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %18, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.593"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.593"*, align 8
  store %"class.thrust::detail::temporary_allocator.593"* %this, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.593"*, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.593", %"class.thrust::detail::temporary_allocator.593"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cuda::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.640"* %this, %"struct.thrust::pair.641"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.640"*, align 8
  %p.addr = alloca %"struct.thrust::pair.641"*, align 8
  store %"struct.thrust::pair.640"* %this, %"struct.thrust::pair.640"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.641"* %p, %"struct.thrust::pair.641"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.640"*, %"struct.thrust::pair.640"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.640", %"struct.thrust::pair.640"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.641"*, %"struct.thrust::pair.641"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.641", %"struct.thrust::pair.641"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.562"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.640", %"struct.thrust::pair.640"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.641"*, %"struct.thrust::pair.641"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.641", %"struct.thrust::pair.641"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !416
  store i64 %4, i64* %second, align 8, !tbaa !413
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.593"* %this, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.593"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.593"* %this, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.593"*, %"class.thrust::detail::temporary_allocator.593"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.593"* %this2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIssEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.487"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.641", align 8
  %p = alloca %"struct.thrust::pair.641", align 8
  %ptr = alloca %"class.thrust::pointer.562", align 8
  %0 = bitcast %"struct.thrust::pair.641"* %p to { %"struct.thrust::pair.487"*, i64 }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.562"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.641", %"struct.thrust::pair.641"* %p, i32 0, i32 0
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.562"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.562"* %ptr, %"struct.thrust::pair.487"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.641", %"struct.thrust::pair.641"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.641"* %retval, %"class.thrust::pointer.562"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.562"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.641"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %6 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %5, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIssEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.641", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.562"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6mallocINS_4pairIssEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.562"* %ptr)
  %tobool = icmp ne %"struct.thrust::pair.487"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.562"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %call5 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.487"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.641"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call5, 0
  store %"struct.thrust::pair.487"* %10, %"struct.thrust::pair.487"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.562"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.641"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %15 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %14, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.641"* %this, %"class.thrust::pointer.562"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.641"*, align 8
  %x.addr = alloca %"class.thrust::pointer.562"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.641"* %this, %"struct.thrust::pair.641"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.562"* %x, %"class.thrust::pointer.562"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.641"*, %"struct.thrust::pair.641"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.641", %"struct.thrust::pair.641"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.641", %"struct.thrust::pair.641"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !416
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.487"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.641", align 8
  %x = alloca %"class.thrust::pointer.562", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %x.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.641"* %retval, %"class.thrust::pointer.562"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.641"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %1 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %0, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.562", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.562"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), %"struct.thrust::pair.487"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.562", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.562"* dereferenceable(8) %ptr)
  %1 = bitcast %"struct.thrust::pair.487"* %call to i8*
  %call2 = call i32 @cudaFree(i8* %1)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.591"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.562", align 8
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.591"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %m_begin to %"class.thrust::iterator_adaptor.597"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.597"* %0)
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.591"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.487"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.562"* %agg.tmp6, %"struct.thrust::pair.487"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.596"* %ref.tmp, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.596"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.596"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !409
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.591"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !409
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.562"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.597"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.597"*, align 8
  store %"class.thrust::iterator_adaptor.597"* %this, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.597"*, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.562"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.592"* %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.592"* %this, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %this, %"struct.thrust::detail::no_throw_allocator.592"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.592"* %this2 to %"class.thrust::detail::temporary_allocator.593"*
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.593"* %0, %"struct.thrust::pair.487"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, i32* %stencil.coerce, %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"* dereferenceable(4) %new_value) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %stencil = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %pred = alloca %"struct.thrust::negate", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %new_value.addr = alloca %"struct.thrust::pair.487"*, align 8
  %op = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642", align 2
  %agg.tmp = alloca %"struct.thrust::negate", align 1
  %agg.tmp18 = alloca %"struct.thrust::pair.487", align 2
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %agg.tmp23 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642", align 2
  %tmp = alloca i48, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %stencil, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %stencil.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %new_value, %"struct.thrust::pair.487"** %new_value.addr, align 8, !tbaa !7
  %0 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op to i8*
  call void @llvm.lifetime.start(i64 6, i8* %0) #5
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %new_value.addr, align 8
  %2 = bitcast %"struct.thrust::pair.487"* %agg.tmp18 to i8*
  %3 = bitcast %"struct.thrust::pair.487"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 2, i1 false), !tbaa.struct !345
  %4 = bitcast %"struct.thrust::pair.487"* %agg.tmp18 to i32*
  %5 = load i32, i32* %4, align 2
  call void @_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEES8_EC2ES6_S8_(%"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op, i32 %5)
  %6 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %7 = bitcast %"struct.thrust::execution_policy.120"* %6 to %"struct.thrust::detail::execution_policy_base.121"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp19 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.505"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp20 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.505"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp21 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.199"* %stencil to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.596"* %agg.tmp22 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.596"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %agg.tmp23 to i8*
  %17 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 6, i32 2, i1 false), !tbaa.struct !418
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp19, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive27, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp20, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive32, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive33, align 8
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp21, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive36, i32 0, i32 0
  %20 = load i32*, i32** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp22, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive40, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive41, align 8
  %22 = bitcast i48* %tmp to i8*
  %23 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %agg.tmp23 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 6, i32 2, i1 false)
  %24 = load i48, i48* %tmp, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %7, %"struct.thrust::pair.487"* %18, %"struct.thrust::pair.487"* %19, i32* %20, %"struct.thrust::pair.487"* %21, i48 %24)
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive44, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive45, align 8
  %25 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op to i8*
  call void @llvm.lifetime.end(i64 6, i8* %25) #5
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive48, i32 0, i32 0
  %26 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive49, align 8
  ret %"struct.thrust::pair.487"* %26
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEES8_EC2ES6_S8_(%"struct.thrust::system::detail::generic::detail::new_value_if.642"* %this, i32 %nv.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %p = alloca %"struct.thrust::negate", align 1
  %nv = alloca %"struct.thrust::pair.487", align 2
  %this.addr = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642"*, align 8
  %0 = bitcast %"struct.thrust::pair.487"* %nv to i32*
  store i32 %nv.coerce, i32* %0, align 2
  store %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %this, %"struct.thrust::system::detail::generic::detail::new_value_if.642"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::detail::generic::detail::new_value_if.642"*, %"struct.thrust::system::detail::generic::detail::new_value_if.642"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::new_value_if.642", %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %this1, i32 0, i32 0
  %new_value = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::new_value_if.642", %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %this1, i32 0, i32 1
  %1 = bitcast %"struct.thrust::pair.487"* %new_value to i8*
  %2 = bitcast %"struct.thrust::pair.487"* %nv to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 2, i1 false), !tbaa.struct !345
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i48 %op.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %op = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642", align 2
  %tmp = alloca i48, align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %agg.tmp22 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642", align 2
  %tmp41 = alloca i48, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  store i48 %op.coerce, i48* %tmp, align 8
  %0 = bitcast i48* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %2 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
  %call18 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call18 to %"struct.thrust::execution_policy.120"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.505"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.505"* %agg.tmp19 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.505"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp20 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.199"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.596"* %agg.tmp21 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.596"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %agg.tmp22 to i8*
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 6, i32 2, i1 false), !tbaa.struct !418
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive26, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %agg.tmp19, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive31, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp20, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive35, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %agg.tmp21, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive39, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive40, align 8
  %18 = bitcast i48* %tmp41 to i8*
  %19 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %agg.tmp22 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %19, i64 6, i32 2, i1 false)
  %20 = load i48, i48* %tmp41, align 8
  %call42 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %3, %"struct.thrust::pair.487"* %14, %"struct.thrust::pair.487"* %15, i32* %16, %"struct.thrust::pair.487"* %17, i48 %20)
  %coerce.dive43 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive45, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call42, %"struct.thrust::pair.487"** %coerce.dive46, align 8
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive49, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive50, align 8
  ret %"struct.thrust::pair.487"* %21
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair.487"* %result.coerce, i48 %op.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %op = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642", align 2
  %tmp = alloca i48, align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp19 = alloca %"class.thrust::tuple.645", align 8
  %agg.tmp20 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp21 = alloca %"class.thrust::tuple.645", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %agg.tmp23 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642", align 2
  %tmp24 = alloca i48, align 8
  %tmp26 = alloca i48, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  store i48 %op.coerce, i48* %tmp, align 8
  %0 = bitcast i48* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %2 = bitcast %"class.thrust::zip_iterator.643"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %2) #5
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.645"* sret %agg.tmp19, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.643"* sret %agg.tmp, %"class.thrust::tuple.645"* byval align 8 %agg.tmp19)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.645"* sret %agg.tmp21, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.643"* sret %agg.tmp20, %"class.thrust::tuple.645"* byval align 8 %agg.tmp21)
  %5 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %agg.tmp23 to i8*
  %6 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 6, i32 2, i1 false), !tbaa.struct !418
  %7 = bitcast i48* %tmp24 to i8*
  %8 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %agg.tmp23 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 6, i32 2, i1 false)
  %9 = load i48, i48* %tmp24, align 8
  call void @_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESA_EEEC2ESB_(%"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp22, i48 %9)
  %coerce.dive25 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp22, i32 0, i32 0
  %10 = bitcast i48* %tmp26 to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive25 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 6, i32 2, i1 false)
  %12 = load i48, i48* %tmp26, align 8
  call void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_(%"class.thrust::zip_iterator.643"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp20, i48 %12)
  %call = call dereferenceable(24) %"class.thrust::tuple.645"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.643"* %zipped_result)
  %13 = bitcast %"class.thrust::tuple.645"* %call to %"struct.thrust::detail::cons.646"*
  %call27 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.646"* dereferenceable(24) %13)
  %14 = bitcast %"class.thrust::detail::normal_iterator.596"* %retval to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.596"* %call27 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::zip_iterator.643"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %16) #5
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive30, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive31, align 8
  ret %"struct.thrust::pair.487"* %17
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_(%"class.thrust::zip_iterator.643"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.643"* byval align 8 %first, %"class.thrust::zip_iterator.643"* byval align 8 %last, i48 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %tmp = alloca i48, align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %tmp5 = alloca i48, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %f, i32 0, i32 0
  store i48 %f.coerce, i48* %tmp, align 8
  %0 = bitcast i48* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %2 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %4 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp2 to i8*
  %7 = bitcast %"class.thrust::zip_iterator.643"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 24, i32 8, i1 false)
  %8 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp3 to i8*
  %9 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 6, i32 2, i1 false), !tbaa.struct !418
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp3, i32 0, i32 0
  %10 = bitcast i48* %tmp5 to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 6, i32 2, i1 false)
  %12 = load i48, i48* %tmp5, align 8
  call void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_(%"class.thrust::zip_iterator.643"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %3, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp2, i48 %12)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.643"* noalias sret %agg.result, %"class.thrust::tuple.645"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.645", align 8
  %0 = bitcast %"class.thrust::tuple.645"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.645"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.643"* %agg.result, %"class.thrust::tuple.645"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.645"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  store %"class.thrust::detail::normal_iterator.505"* %t0, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.596"* %t2, %"class.thrust::detail::normal_iterator.596"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_(%"class.thrust::tuple.645"* %agg.result, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESA_EEEC2ESB_(%"struct.thrust::detail::binary_transform_functor.649"* %this, i48 %f.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.642", align 2
  %tmp = alloca i48, align 8
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor.649"*, align 8
  store i48 %f.coerce, i48* %tmp, align 8
  %0 = bitcast i48* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store %"struct.thrust::detail::binary_transform_functor.649"* %this, %"struct.thrust::detail::binary_transform_functor.649"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor.649"*, %"struct.thrust::detail::binary_transform_functor.649"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %this1, i32 0, i32 0
  %2 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %f2 to i8*
  %3 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 6, i32 2, i1 false), !tbaa.struct !418
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.646"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.646"*, align 8
  store %"struct.thrust::detail::cons.646"* %c, %"struct.thrust::detail::cons.646"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.646"*, %"struct.thrust::detail::cons.646"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE(%"struct.thrust::detail::cons.646"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.596"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.645"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.643"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  store %"class.thrust::zip_iterator.643"* %this, %"class.thrust::zip_iterator.643"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.643", %"class.thrust::zip_iterator.643"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.645"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_(%"class.thrust::zip_iterator.643"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.643"* byval align 8 %first, %"class.thrust::zip_iterator.643"* byval align 8 %last, i48 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %tmp = alloca i48, align 8
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %tmp5 = alloca i48, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %f, i32 0, i32 0
  store i48 %f.coerce, i48* %tmp, align 8
  %0 = bitcast i48* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %2 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 8, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp1 to i8*
  %6 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 8, i1 false)
  %7 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::zip_iterator.643"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_(%"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp1, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp2)
  %9 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp3 to i8*
  %10 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 6, i32 2, i1 false), !tbaa.struct !418
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp3, i32 0, i32 0
  %11 = bitcast i48* %tmp5 to i8*
  %12 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 6, i32 2, i1 false)
  %13 = load i48, i48* %tmp5, align 8
  call void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_(%"class.thrust::zip_iterator.643"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp, i64 %call, i48 %13)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_(%"class.thrust::zip_iterator.643"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.643"* byval align 8 %first, i64 %n, i48 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %tmp = alloca i48, align 8
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp1 = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %tmp3 = alloca i48, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %f, i32 0, i32 0
  store i48 %f.coerce, i48* %tmp, align 8
  %0 = bitcast i48* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp1 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 6, i32 2, i1 false), !tbaa.struct !418
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %agg.tmp1, i32 0, i32 0
  %8 = bitcast i48* %tmp3 to i8*
  %9 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 6, i32 2, i1 false)
  %10 = load i48, i48* %tmp3, align 8
  call void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_(%"class.thrust::zip_iterator.643"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp, i64 %5, i48 %10)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_(%"class.thrust::zip_iterator.643"* byval align 8 %first, %"class.thrust::zip_iterator.643"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.643", align 8
  %0 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.643"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_(%"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_(%"class.thrust::zip_iterator.643"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.643"* byval align 8 %first, i64 %n, i48 %f.coerce) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.649", align 2
  %tmp = alloca i48, align 8
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp8 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp9 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp12 = alloca i48, align 8
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce19 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp21 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp22 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp23 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp24 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp25 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp26 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp29 = alloca i48, align 8
  %ref.tmp32 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp35 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp38 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp39 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp40 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp41 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp44 = alloca i48, align 8
  %ref.tmp45 = alloca i32, align 4
  %agg.tmp.ensured48 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp49 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp54 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp55 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp56 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp57 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp60 = alloca i48, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %f, i32 0, i32 0
  store i48 %f.coerce, i48* %tmp, align 8
  %0 = bitcast i48* %tmp to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %2 = bitcast %"struct.thrust::detail::wrapped_function.650"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 6, i8* %2) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESB_EEEEvEC2ERKSD_(%"struct.thrust::detail::wrapped_function.650"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor.649"* dereferenceable(6) %f)
  %3 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %5 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %6 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %6) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %7 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive5 to { i32*, i32* }*
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %7, i32 0, i32 0
  %9 = extractvalue { i32*, i32* } %call, 0
  store i32* %9, i32** %8, align 8
  %10 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %7, i32 0, i32 1
  %11 = extractvalue { i32*, i32* } %call, 1
  store i32* %11, i32** %10, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %12 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %13 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp8 to i8*
  %14 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 24, i32 8, i1 false)
  %15 = bitcast %"struct.thrust::detail::wrapped_function.650"* %agg.tmp9 to i8*
  %16 = bitcast %"struct.thrust::detail::wrapped_function.650"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %16, i64 6, i32 2, i1 false), !tbaa.struct !418
  %17 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive10 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive10, i32 0, i32 0
  %18 = bitcast i48* %tmp12 to i8*
  %19 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive11 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %19, i64 6, i32 2, i1 false)
  %20 = load i48, i48* %tmp12, align 8
  %call13 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp8, i48 %20, i32 %17)
  %21 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call13, i64* %21, align 4
  %call14 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %22 = load i64, i64* %n.addr, align 8, !tbaa !13
  %23 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %24 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %23, %24
  %call15 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %22, i32 %mul)
  br i1 %call15, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %25 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %25) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %26 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call18 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive20 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce19, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive20 to { i64*, i64* }*
  %28 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %27, i32 0, i32 0
  %29 = extractvalue { i64*, i64* } %call18, 0
  store i64* %29, i64** %28, align 8
  %30 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %27, i32 0, i32 1
  %31 = extractvalue { i64*, i64* } %call18, 1
  store i64* %31, i64** %30, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp22, i64 2147483647, i64 2147483647, i64 2147483647)
  %32 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp24 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %32, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp25 to i8*
  %34 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 24, i32 8, i1 false)
  %35 = bitcast %"struct.thrust::detail::wrapped_function.650"* %agg.tmp26 to i8*
  %36 = bitcast %"struct.thrust::detail::wrapped_function.650"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %35, i8* %36, i64 6, i32 2, i1 false), !tbaa.struct !418
  %37 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive27 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %agg.tmp26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive27, i32 0, i32 0
  %38 = bitcast i48* %tmp29 to i8*
  %39 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive28 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %38, i8* %39, i64 6, i32 2, i1 false)
  %40 = load i48, i48* %tmp29, align 8
  %call30 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp22, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp25, i48 %40, i64 %37)
  %41 = bitcast %"struct.thrust::pair.82"* %ref.tmp21 to i64*
  store i64 %call30, i64* %41, align 4
  %call31 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce19, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp21)
  %42 = load i64, i64* %n.addr, align 8, !tbaa !13
  %43 = load i64, i64* %group_size, align 8, !tbaa !13
  %call33 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %42, i64 %43)
  store i64 %call33, i64* %ref.tmp32, align 8, !tbaa !13
  %call34 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp32)
  store i64 %call34, i64* %num_groups, align 8, !tbaa !13
  %44 = load i64, i64* %num_groups, align 8, !tbaa !13
  %45 = load i64, i64* %group_size, align 8, !tbaa !13
  %46 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %47 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %46 to %"struct.thrust::detail::execution_policy_base.121"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %47)
  %48 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call36 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp35, i64 %44, i64 %45, i64 0, %struct.CUstream_st* %call37)
  %49 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp39 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %49, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %50 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp40 to i8*
  %51 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %50, i8* %51, i64 24, i32 8, i1 false)
  %52 = bitcast %"struct.thrust::detail::wrapped_function.650"* %agg.tmp41 to i8*
  %53 = bitcast %"struct.thrust::detail::wrapped_function.650"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %52, i8* %53, i64 6, i32 2, i1 false), !tbaa.struct !418
  %54 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive42 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %agg.tmp41, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive42, i32 0, i32 0
  %55 = bitcast i48* %tmp44 to i8*
  %56 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive43 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %55, i8* %56, i64 6, i32 2, i1 false)
  %57 = load i48, i48* %tmp44, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp35, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp40, i48 %57, i64 %54)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %58 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %58) #5
  %59 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %59) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %60 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %61 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call46 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %60, i32 %61)
  store i32 %call46, i32* %ref.tmp45, align 4, !tbaa !11
  %call47 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp45)
  store i32 %call47, i32* %narrow_num_groups, align 4, !tbaa !11
  %62 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv50 = zext i32 %62 to i64
  %63 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv51 = zext i32 %63 to i64
  %64 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %65 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %64 to %"struct.thrust::detail::execution_policy_base.121"*
  %call52 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %65)
  %66 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call52 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call53 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %66)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp49, i64 %conv50, i64 %conv51, i64 0, %struct.CUstream_st* %call53)
  %67 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp55 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %67, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %68 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp56 to i8*
  %69 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %68, i8* %69, i64 24, i32 8, i1 false)
  %70 = bitcast %"struct.thrust::detail::wrapped_function.650"* %agg.tmp57 to i8*
  %71 = bitcast %"struct.thrust::detail::wrapped_function.650"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %70, i8* %71, i64 6, i32 2, i1 false), !tbaa.struct !418
  %72 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive58 = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %agg.tmp57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive58, i32 0, i32 0
  %73 = bitcast i48* %tmp60 to i8*
  %74 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive59 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %73, i8* %74, i64 6, i32 2, i1 false)
  %75 = load i48, i48* %tmp60, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured48, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp49, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp56, i48 %75, i32 %72)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured48) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %76 = bitcast %"class.thrust::zip_iterator.643"* %first to %"class.thrust::iterator_facade.644"*
  %77 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE(%"class.thrust::zip_iterator.643"* sret %agg.result, %"class.thrust::iterator_facade.644"* dereferenceable(1) %76, i64 %77)
  %78 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %78) #5
  %79 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %79) #5
  %80 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %80) #5
  %81 = bitcast %"struct.thrust::detail::wrapped_function.650"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 6, i8* %81) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESB_EEEEvEC2ERKSD_(%"struct.thrust::detail::wrapped_function.650"* %this, %"struct.thrust::detail::binary_transform_functor.649"* dereferenceable(6) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %f.addr = alloca %"struct.thrust::detail::binary_transform_functor.649"*, align 8
  store %"struct.thrust::detail::wrapped_function.650"* %this, %"struct.thrust::detail::wrapped_function.650"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::binary_transform_functor.649"* %f, %"struct.thrust::detail::binary_transform_functor.649"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::binary_transform_functor.649"*, %"struct.thrust::detail::binary_transform_functor.649"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.649"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 6, i32 2, i1 false), !tbaa.struct !418
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.643"* byval align 8 %arg2, i48 %arg3.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp3 = alloca i48, align 8
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive, i32 0, i32 0
  store i48 %arg3.coerce, i48* %tmp3, align 8
  %0 = bitcast i48* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp4)
  %4 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %4, align 4
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %6 = load i64, i64* %5, align 4
  ret i64 %6
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENSF_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.643"* byval align 8 %arg2, i48 %arg3.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp3 = alloca i48, align 8
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive, i32 0, i32 0
  store i48 %arg3.coerce, i48* %tmp3, align 8
  %0 = bitcast i48* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp4)
  %4 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %4, align 4
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %6 = load i64, i64* %5, align 4
  ret i64 %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.643"* byval align 8 %arg2, i48 %arg3.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp3 = alloca i48, align 8
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive, i32 0, i32 0
  store i48 %arg3.coerce, i48* %tmp3, align 8
  %0 = bitcast i48* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.643"* byval align 8 %arg2, i48 %arg3.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.650", align 2
  %tmp3 = alloca i48, align 8
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::wrapped_function.650", %"struct.thrust::detail::wrapped_function.650"* %arg3, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.649", %"struct.thrust::detail::binary_transform_functor.649"* %coerce.dive, i32 0, i32 0
  store i48 %arg3.coerce, i48* %tmp3, align 8
  %0 = bitcast i48* %tmp3 to i8*
  %1 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.642"* %coerce.dive2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %0, i64 6, i32 2, i1 false)
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE(%"class.thrust::zip_iterator.643"* noalias sret %agg.result, %"class.thrust::iterator_facade.644"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %i.addr = alloca %"class.thrust::iterator_facade.644"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.643", align 8
  store %"class.thrust::iterator_facade.644"* %i, %"class.thrust::iterator_facade.644"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.643"* %tmp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.644"*, %"class.thrust::iterator_facade.644"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.644"* %1 to %"class.thrust::zip_iterator.643"*
  %3 = bitcast %"class.thrust::zip_iterator.643"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.643"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.643"* %tmp to %"class.thrust::iterator_facade.644"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.643"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl(%"class.thrust::iterator_facade.644"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.643"* %agg.result to i8*
  %8 = bitcast %"class.thrust::zip_iterator.643"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.643"* %tmp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %9) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.652", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %a2, %"class.thrust::zip_iterator.643"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %a3, %"struct.thrust::detail::wrapped_function.650"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.652"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %agg.result, %"class.thrust::tuple.652"* dereferenceable(48) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.652"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %t1, %"class.thrust::zip_iterator.643"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t2, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj(%"class.thrust::tuple.652"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %this, %"class.thrust::tuple.652"* dereferenceable(48) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"*, align 8
  %args.addr = alloca %"class.thrust::tuple.652"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.652"* %args, %"class.thrust::tuple.652"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %this1, i32 0, i32 2
  %0 = load %"class.thrust::tuple.652"*, %"class.thrust::tuple.652"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.652"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.652"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 48, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj(%"class.thrust::tuple.652"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.652"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.652"* %this, %"class.thrust::tuple.652"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %t1, %"class.thrust::zip_iterator.643"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t2, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.652"*, %"class.thrust::tuple.652"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.652"* %this1 to %"struct.thrust::detail::cons.653"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.653"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.653"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.653"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.653"* %this, %"struct.thrust::detail::cons.653"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %t2, %"class.thrust::zip_iterator.643"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t3, %"struct.thrust::detail::wrapped_function.650"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.653"*, %"struct.thrust::detail::cons.653"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.653", %"struct.thrust::detail::cons.653"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.653", %"struct.thrust::detail::cons.653"* %this1, i32 0, i32 2
  %3 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.654"* %tail, %"class.thrust::zip_iterator.643"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.654"* %this, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.654"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.654"* %this, %"struct.thrust::detail::cons.654"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.643"* %t1, %"class.thrust::zip_iterator.643"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t2, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.654"*, %"struct.thrust::detail::cons.654"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.654", %"struct.thrust::detail::cons.654"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.643"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.643"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.654", %"struct.thrust::detail::cons.654"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.655"* %tail, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.655"* %this, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.655"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.655"* %this, %"struct.thrust::detail::cons.655"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.650"* %t1, %"struct.thrust::detail::wrapped_function.650"** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.655"*, %"struct.thrust::detail::cons.655"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.655", %"struct.thrust::detail::cons.655"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.650"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.650"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 6, i32 2, i1 false), !tbaa.struct !418
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.655", %"struct.thrust::detail::cons.655"* %this1, i32 0, i32 1
  %3 = load i32*, i32** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %tail, i32* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEENSG_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.665", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %a2, %"class.thrust::zip_iterator.643"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %a3, %"struct.thrust::detail::wrapped_function.650"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.665"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %agg.result, %"class.thrust::tuple.665"* dereferenceable(48) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.665"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %t1, %"class.thrust::zip_iterator.643"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t2, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl(%"class.thrust::tuple.665"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %this, %"class.thrust::tuple.665"* dereferenceable(48) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"*, align 8
  %args.addr = alloca %"class.thrust::tuple.665"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.665"* %args, %"class.thrust::tuple.665"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.665"*, %"class.thrust::tuple.665"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.665"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.665"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 48, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl(%"class.thrust::tuple.665"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.665"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.665"* %this, %"class.thrust::tuple.665"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %t1, %"class.thrust::zip_iterator.643"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t2, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.665"*, %"class.thrust::tuple.665"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.665"* %this1 to %"struct.thrust::detail::cons.666"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.666"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.666"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.666"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.666"* %this, %"struct.thrust::detail::cons.666"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %t2, %"class.thrust::zip_iterator.643"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t3, %"struct.thrust::detail::wrapped_function.650"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.666"*, %"struct.thrust::detail::cons.666"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.666", %"struct.thrust::detail::cons.666"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.666", %"struct.thrust::detail::cons.666"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.667"* %tail, %"class.thrust::zip_iterator.643"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.667"* %this, %"class.thrust::zip_iterator.643"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.667"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.667"* %this, %"struct.thrust::detail::cons.667"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.643"* %t1, %"class.thrust::zip_iterator.643"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.650"* %t2, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.667"*, %"struct.thrust::detail::cons.667"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.667", %"struct.thrust::detail::cons.667"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.643"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.643"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.667", %"struct.thrust::detail::cons.667"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.668"* %tail, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIssEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.668"* %this, %"struct.thrust::detail::wrapped_function.650"* dereferenceable(6) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.668"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.650"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.668"* %this, %"struct.thrust::detail::cons.668"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.650"* %t1, %"struct.thrust::detail::wrapped_function.650"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.668"*, %"struct.thrust::detail::cons.668"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.668", %"struct.thrust::detail::cons.668"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.650"*, %"struct.thrust::detail::wrapped_function.650"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.650"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.650"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 6, i32 2, i1 false), !tbaa.struct !418
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.668", %"struct.thrust::detail::cons.668"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %tail, i64* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 56, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 56, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 56, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.669"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.664", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 56, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !419
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.670"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.664"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.674"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.671"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.673"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 56, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 56, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 56, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.657"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.651", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 56, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !421
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.658"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.651"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.662"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.659"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIssEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.661"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.643"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl(%"class.thrust::iterator_facade.644"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.644"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.644"* %this, %"class.thrust::iterator_facade.644"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.644"*, %"class.thrust::iterator_facade.644"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.643"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.644"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE(%"class.thrust::zip_iterator.643"* dereferenceable(24) %call, i64 %0)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.643"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.644"* %this1)
  ret %"class.thrust::zip_iterator.643"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE(%"class.thrust::zip_iterator.643"* dereferenceable(24) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.643"* %f, %"class.thrust::zip_iterator.643"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl(%"class.thrust::zip_iterator.643"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.643"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.644"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.644"*, align 8
  store %"class.thrust::iterator_facade.644"* %this, %"class.thrust::iterator_facade.644"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.644"*, %"class.thrust::iterator_facade.644"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.644"* %this1 to %"class.thrust::zip_iterator.643"*
  ret %"class.thrust::zip_iterator.643"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl(%"class.thrust::zip_iterator.643"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.643"* %this, %"class.thrust::zip_iterator.643"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.643", %"class.thrust::zip_iterator.643"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_(%"class.thrust::tuple.645"* dereferenceable(24) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_(%"class.thrust::tuple.645"* dereferenceable(24) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.645"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.645"* %t, %"class.thrust::tuple.645"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.645"*, %"class.thrust::tuple.645"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.645"* %0 to %"struct.thrust::detail::cons.646"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.646"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.645"*, %"class.thrust::tuple.645"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.645"* %2 to %"struct.thrust::detail::cons.646"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.647"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.646"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIssEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_(%"struct.thrust::detail::cons.647"* dereferenceable(16) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.505"* %it, %"class.thrust::detail::normal_iterator.505"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.505"* %0 to %"class.thrust::iterator_facade.507"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.507"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.646"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.646"*, align 8
  store %"struct.thrust::detail::cons.646"* %this, %"struct.thrust::detail::cons.646"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.646"*, %"struct.thrust::detail::cons.646"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.646", %"struct.thrust::detail::cons.646"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.505"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIssEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_(%"struct.thrust::detail::cons.647"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.647"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.647"* %t, %"struct.thrust::detail::cons.647"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.647"*, %"struct.thrust::detail::cons.647"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.647"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.647"*, %"struct.thrust::detail::cons.647"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.648"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.647"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_(%"struct.thrust::detail::cons.648"* dereferenceable(8) %call1, i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.647"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.646"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.646"*, align 8
  store %"struct.thrust::detail::cons.646"* %this, %"struct.thrust::detail::cons.646"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.646"*, %"struct.thrust::detail::cons.646"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.646", %"struct.thrust::detail::cons.646"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.647"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.647"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.647"*, align 8
  store %"struct.thrust::detail::cons.647"* %this, %"struct.thrust::detail::cons.647"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.647"*, %"struct.thrust::detail::cons.647"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.647", %"struct.thrust::detail::cons.647"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.199"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_(%"struct.thrust::detail::cons.648"* dereferenceable(8) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.648"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.648"* %t, %"struct.thrust::detail::cons.648"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.648"*, %"struct.thrust::detail::cons.648"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.648"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.648"*, %"struct.thrust::detail::cons.648"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.648"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp1, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_16advance_iteratorIlEEEET_NS_9null_typeES5_(i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.648"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.647"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.647"*, align 8
  store %"struct.thrust::detail::cons.647"* %this, %"struct.thrust::detail::cons.647"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.647"*, %"struct.thrust::detail::cons.647"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.647", %"struct.thrust::detail::cons.647"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.648"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.596"* %it, %"class.thrust::detail::normal_iterator.596"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.596"* %0 to %"class.thrust::iterator_facade.598"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.598"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.648"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.648"*, align 8
  store %"struct.thrust::detail::cons.648"* %this, %"struct.thrust::detail::cons.648"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.648"*, %"struct.thrust::detail::cons.648"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.648", %"struct.thrust::detail::cons.648"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.596"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.648"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.648"*, align 8
  store %"struct.thrust::detail::cons.648"* %this, %"struct.thrust::detail::cons.648"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.648"*, %"struct.thrust::detail::cons.648"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.598"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.598"* %this, %"class.thrust::iterator_facade.598"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.598"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.598"* %this1)
  ret %"class.thrust::detail::normal_iterator.596"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.596"* %f, %"class.thrust::detail::normal_iterator.596"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.596"* %0 to %"class.thrust::iterator_adaptor.597"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.597"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.598"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  store %"class.thrust::iterator_facade.598"* %this, %"class.thrust::iterator_facade.598"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.598"* %this1 to %"class.thrust::detail::normal_iterator.596"*
  ret %"class.thrust::detail::normal_iterator.596"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.597"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.597"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.597"* %this, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.597"*, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.562"* %m_iterator to %"class.thrust::iterator_facade.564"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.564"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.562"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.564"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.564"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.564"* %this, %"class.thrust::iterator_facade.564"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.564"*, %"class.thrust::iterator_facade.564"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.564"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.562"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.564"* %this1)
  ret %"class.thrust::pointer.562"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.562"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.562"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.562"* %f, %"class.thrust::pointer.562"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %0 to %"class.thrust::iterator_adaptor.563"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.563"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.562"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.564"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.564"*, align 8
  store %"class.thrust::iterator_facade.564"* %this, %"class.thrust::iterator_facade.564"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.564"*, %"class.thrust::iterator_facade.564"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.564"* %this1 to %"class.thrust::pointer.562"*
  ret %"class.thrust::pointer.562"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.563"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.563"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.563"* %this, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.563"*, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !397
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %1, i64 %0
  store %"struct.thrust::pair.487"* %add.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !397
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_(%"class.thrust::zip_iterator.643"* byval align 8 %first, %"class.thrust::zip_iterator.643"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.643", align 8
  %agg.tmp2 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.643"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.643"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.643"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.643"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.643"* byval align 8 %first, %"class.thrust::zip_iterator.643"* byval align 8 %last) #8 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = bitcast %"class.thrust::zip_iterator.643"* %last to %"class.thrust::iterator_facade.644"*
  %2 = bitcast %"class.thrust::zip_iterator.643"* %first to %"class.thrust::iterator_facade.644"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_(%"class.thrust::iterator_facade.644"* dereferenceable(1) %1, %"class.thrust::iterator_facade.644"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_(%"class.thrust::iterator_facade.644"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.644"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.644"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.644"*, align 8
  store %"class.thrust::iterator_facade.644"* %lhs, %"class.thrust::iterator_facade.644"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.644"* %rhs, %"class.thrust::iterator_facade.644"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.644"*, %"class.thrust::iterator_facade.644"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.644"* %0 to %"class.thrust::zip_iterator.643"*
  %2 = load %"class.thrust::iterator_facade.644"*, %"class.thrust::iterator_facade.644"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.644"* %2 to %"class.thrust::zip_iterator.643"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_(%"class.thrust::zip_iterator.643"* dereferenceable(24) %1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_(%"class.thrust::zip_iterator.643"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.643"* %f1, %"class.thrust::zip_iterator.643"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %f2, %"class.thrust::zip_iterator.643"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.643"* dereferenceable(24) %0, %"class.thrust::zip_iterator.643"* dereferenceable(24) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.643"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  store %"class.thrust::zip_iterator.643"* %f1, %"class.thrust::zip_iterator.643"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.643"* %f2, %"class.thrust::zip_iterator.643"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.643"* %1, %"class.thrust::zip_iterator.643"* dereferenceable(24) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.643"* %this, %"class.thrust::zip_iterator.643"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  store %"class.thrust::zip_iterator.643"* %this, %"class.thrust::zip_iterator.643"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.643"* %other, %"class.thrust::zip_iterator.643"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %other.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.645"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.643"* %0)
  %1 = bitcast %"class.thrust::tuple.645"* %call to %"struct.thrust::detail::cons.646"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.646"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.505"* %call2 to %"class.thrust::iterator_facade.507"*
  %call3 = call dereferenceable(24) %"class.thrust::tuple.645"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.643"* %this1)
  %3 = bitcast %"class.thrust::tuple.645"* %call3 to %"struct.thrust::detail::cons.646"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.646"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.505"* %call4 to %"class.thrust::iterator_facade.507"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.507"* dereferenceable(1) %2, %"class.thrust::iterator_facade.507"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.646"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.646"*, align 8
  store %"struct.thrust::detail::cons.646"* %c, %"struct.thrust::detail::cons.646"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.646"*, %"struct.thrust::detail::cons.646"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.646"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.505"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.646"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.646"*, align 8
  store %"struct.thrust::detail::cons.646"* %t, %"struct.thrust::detail::cons.646"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.646"*, %"struct.thrust::detail::cons.646"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.646", %"struct.thrust::detail::cons.646"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.505"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.643"* %this, %"class.thrust::tuple.645"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.643"*, align 8
  store %"class.thrust::zip_iterator.643"* %this, %"class.thrust::zip_iterator.643"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.643"*, %"class.thrust::zip_iterator.643"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.643"* %this1 to %"class.thrust::iterator_facade.644"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.643", %"class.thrust::zip_iterator.643"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.645"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.645"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_(%"class.thrust::tuple.645"* %this, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.645"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.645"* %this, %"class.thrust::tuple.645"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.505"* %t0, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.596"* %t2, %"class.thrust::detail::normal_iterator.596"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.645"*, %"class.thrust::tuple.645"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.645"* %this1 to %"struct.thrust::detail::cons.646"*
  %1 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.646"* %0, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.646"* %this, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.646"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.646"* %this, %"struct.thrust::detail::cons.646"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.505"* %t1, %"class.thrust::detail::normal_iterator.505"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.596"* %t3, %"class.thrust::detail::normal_iterator.596"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.646"*, %"struct.thrust::detail::cons.646"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.646", %"struct.thrust::detail::cons.646"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.505"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.505"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.646", %"struct.thrust::detail::cons.646"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.647"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIssEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.647"* %this, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.647"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.647"* %this, %"struct.thrust::detail::cons.647"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.596"* %t2, %"class.thrust::detail::normal_iterator.596"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.647"*, %"struct.thrust::detail::cons.647"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.647", %"struct.thrust::detail::cons.647"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.199"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.199"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.647", %"struct.thrust::detail::cons.647"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.648"* %tail, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.648"* %this, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.648"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.648"* %this, %"struct.thrust::detail::cons.648"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.596"* %t1, %"class.thrust::detail::normal_iterator.596"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.648"*, %"struct.thrust::detail::cons.648"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.648", %"struct.thrust::detail::cons.648"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.596"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.596"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE(%"struct.thrust::detail::cons.646"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.646"*, align 8
  store %"struct.thrust::detail::cons.646"* %t, %"struct.thrust::detail::cons.646"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.646"*, %"struct.thrust::detail::cons.646"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.646", %"struct.thrust::detail::cons.646"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.647"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.596"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.647"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.647"*, align 8
  store %"struct.thrust::detail::cons.647"* %t, %"struct.thrust::detail::cons.647"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.647"*, %"struct.thrust::detail::cons.647"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.647", %"struct.thrust::detail::cons.647"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.648"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.596"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.648"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.648"*, align 8
  store %"struct.thrust::detail::cons.648"* %t, %"struct.thrust::detail::cons.648"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.648"*, %"struct.thrust::detail::cons.648"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.648", %"struct.thrust::detail::cons.648"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.596"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.507"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  store %"class.thrust::iterator_facade.507"* %this, %"class.thrust::iterator_facade.507"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.507"* %this1 to %"class.thrust::detail::normal_iterator.505"*
  ret %"class.thrust::detail::normal_iterator.505"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl(%"class.thrust::iterator_facade.507"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.507"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.507"* %this, %"class.thrust::iterator_facade.507"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.507"*, %"class.thrust::iterator_facade.507"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.507"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %sub = sub nsw i64 0, %0
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %call, i64 %sub)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.507"* %this1)
  ret %"class.thrust::detail::normal_iterator.505"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl(%"class.thrust::iterator_facade.598"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  %n.addr = alloca i64, align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.596", align 8
  store %"class.thrust::iterator_facade.598"* %this, %"class.thrust::iterator_facade.598"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.598"* %this1)
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %call to %"class.thrust::iterator_facade.598"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.598"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.596"* %coerce to %"class.thrust::iterator_facade.598"*
  %call6 = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.598"* %2)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call6, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive11, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.487"* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.598"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  store %"class.thrust::iterator_facade.598"* %this, %"class.thrust::iterator_facade.598"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.598"* %this1 to %"class.thrust::detail::normal_iterator.596"*
  ret %"class.thrust::detail::normal_iterator.596"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.598"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  store %"class.thrust::iterator_facade.598"* %this, %"class.thrust::iterator_facade.598"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.598"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  store %"class.thrust::detail::normal_iterator.596"* %f, %"class.thrust::detail::normal_iterator.596"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.596"* %0 to %"class.thrust::iterator_adaptor.597"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.597"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.597"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.597"*, align 8
  store %"class.thrust::iterator_adaptor.597"* %this, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.597"*, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.562"* %m_iterator to %"class.thrust::iterator_facade.564"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.564"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive5, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.564"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.564"*, align 8
  store %"class.thrust::iterator_facade.564"* %this, %"class.thrust::iterator_facade.564"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.564"*, %"class.thrust::iterator_facade.564"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.564"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.562"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.562"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %f.addr = alloca %"class.thrust::pointer.562"*, align 8
  store %"class.thrust::pointer.562"* %f, %"class.thrust::pointer.562"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %f.addr, align 8
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.562"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.562"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.564"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.564"*, align 8
  store %"class.thrust::iterator_facade.564"* %this, %"class.thrust::iterator_facade.564"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.564"*, %"class.thrust::iterator_facade.564"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.564"* %this1 to %"class.thrust::pointer.562"*
  ret %"class.thrust::pointer.562"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.562"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.599", align 8
  %this.addr = alloca %"class.thrust::pointer.562"*, align 8
  store %"class.thrust::pointer.562"* %this, %"class.thrust::pointer.562"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %this.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.599"* %retval, %"class.thrust::pointer.562"* dereferenceable(8) %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.599"* %this, %"class.thrust::pointer.562"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.599"*, align 8
  %ptr.addr = alloca %"class.thrust::pointer.562"*, align 8
  store %"class.thrust::reference.599"* %this, %"class.thrust::reference.599"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.562"* %ptr, %"class.thrust::pointer.562"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.599"*, %"class.thrust::reference.599"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_(%"class.thrust::reference.599"* %this, %"struct.thrust::pair.487"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.599"*, align 8
  %src.addr = alloca %"struct.thrust::pair.487"*, align 8
  %system1 = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  store %"class.thrust::reference.599"* %this, %"class.thrust::reference.599"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %src, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.599"*, %"class.thrust::reference.599"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  store %"struct.thrust::system::cuda::detail::tag"* null, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  store %"struct.thrust::system::cpp::detail::tag"* null, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %2 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %3 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_(%"class.thrust::reference.599"* %this1, %"struct.thrust::system::cuda::detail::tag"* %2, %"struct.thrust::system::cpp::detail::tag"* %3, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %6 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %6) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_(%"class.thrust::reference.599"* %this, %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cpp::detail::tag"* %system2, %"struct.thrust::pair.487"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.599"*, align 8
  %system1.addr = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2.addr = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  %src.addr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  store %"class.thrust::reference.599"* %this, %"class.thrust::reference.599"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cpp::detail::tag"* %system2, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %src, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.599"*, %"class.thrust::reference.599"** %this.addr, align 8
  %0 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %0 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %2 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call = call { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 0
  %6 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 0
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 1
  %8 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 1
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_(%"class.thrust::reference.599"* %this1, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %ref.tmp, %"struct.thrust::pair.487"* %9)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_(%"class.thrust::reference.599"* %this, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %system, %"struct.thrust::pair.487"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.599"*, align 8
  %system.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair.487"*, align 8
  %non_const_system = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  store %"class.thrust::reference.599"* %this, %"class.thrust::reference.599"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %system, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %src, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.599"*, %"class.thrust::reference.599"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %1, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8, !tbaa !7
  %2 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %2 to %"struct.thrust::detail::execution_policy_base.229"*
  %call = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %3)
  %m_ptr = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.562"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  call void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %call, %"struct.thrust::pair.487"* %7, %"struct.thrust::pair.487"* %6)
  %8 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.end(i64 8, i8* %8) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %dst.coerce, %"struct.thrust::pair.487"* %src) #8 comdat {
entry:
  %dst = alloca %"class.thrust::pointer.562", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair.487"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %dst.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %src, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %0, %"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"* %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %dst.coerce, %"struct.thrust::pair.487"* %src) #8 comdat align 2 {
entry:
  %dst = alloca %"class.thrust::pointer.562", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair.487"*, align 8
  %rotated_systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %dst.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %src, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %call = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZNK6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEE6rotateEv(%"struct.thrust::system::cuda::detail::cross_system.227"* %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %3 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 0
  %4 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 0
  store %"struct.thrust::execution_policy.88"* %4, %"struct.thrust::execution_policy.88"** %3, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 1
  %6 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 1
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to %"struct.thrust::detail::execution_policy_base.132"*
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %src.addr, align 8, !tbaa !1
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %9, i64 1
  %10 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.562"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair.487"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIssEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %7, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %add.ptr, %"struct.thrust::pair.487"* %12)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call4, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %13 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.end(i64 16, i8* %13) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIssEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"* %last, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %result = alloca %"class.thrust::pointer.562", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %first.addr = alloca %"struct.thrust::pair.487"*, align 8
  %last.addr = alloca %"struct.thrust::pair.487"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %last, %"struct.thrust::pair.487"** %last.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call2 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %last.addr, align 8, !tbaa !1
  %5 = bitcast %"class.thrust::pointer.562"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::pointer.562"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %8 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 0
  %9 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %8, align 8
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 1
  %11 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %10, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive4, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %9, %"struct.thrust::execution_policy.120"* %11, %"struct.thrust::pair.487"* %3, %"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"* %12)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call6, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive9, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %13
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"* %last, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.562", align 8
  %first.addr = alloca %"struct.thrust::pair.487"*, align 8
  %last.addr = alloca %"struct.thrust::pair.487"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.562", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %last, %"struct.thrust::pair.487"** %last.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %last.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.562"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.562"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"* %6, %"struct.thrust::pair.487"* %14)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  ret %"struct.thrust::pair.487"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %begin, %"struct.thrust::pair.487"* %end, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.562", align 8
  %begin.addr = alloca %"struct.thrust::pair.487"*, align 8
  %end.addr = alloca %"struct.thrust::pair.487"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp3 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::pair.487"* %begin, %"struct.thrust::pair.487"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %end, %"struct.thrust::pair.487"** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %begin.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.562"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.562"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp2, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive5, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"* %6, %"struct.thrust::pair.487"* %14)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive9, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %begin, %"struct.thrust::pair.487"* %end, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.562", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %begin.addr = alloca %"struct.thrust::pair.487"*, align 8
  %end.addr = alloca %"struct.thrust::pair.487"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp6 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::pair.487"* %begin, %"struct.thrust::pair.487"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %end, %"struct.thrust::pair.487"** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %begin.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.562"* %agg.tmp3 to i8*
  %8 = bitcast %"class.thrust::pointer.562"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"* %6, %"struct.thrust::pair.487"* %14)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive9, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive11, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.487"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.487"* %begin, %"struct.thrust::pair.487"* %end, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.562", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %begin.addr = alloca %"struct.thrust::pair.487"*, align 8
  %end.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::pair.487"* %begin, %"struct.thrust::pair.487"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %end, %"struct.thrust::pair.487"** %end.addr, align 8, !tbaa !1
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %end.addr, align 8, !tbaa !1
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %begin.addr, align 8, !tbaa !1
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.487"* %7 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.487"* %8 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  store i64 %sub.ptr.div, i64* %n, align 8, !tbaa !13
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %begin.addr, align 8, !tbaa !1
  %10 = load i64, i64* %n, align 8, !tbaa !13
  %11 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %12 = bitcast %"class.thrust::pointer.562"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive4, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %9, i64 %10, %"struct.thrust::pair.487"* %13)
  %14 = bitcast %"class.thrust::pointer.562"* %result to %"class.thrust::iterator_facade.564"*
  %15 = load i64, i64* %n, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.564"* dereferenceable(1) %14, i64 %15)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %16 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive8, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.487"* %17
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIssEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %first, i64 %n, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %result = alloca %"class.thrust::pointer.562", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %first.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce = alloca %"class.thrust::reference.599", align 8
  %src = alloca i8*, align 8
  %ref.tmp9 = alloca %"struct.thrust::pair.487"*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::pointer.562"* %result to %"class.thrust::iterator_facade.564"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.564"* %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair.487"* @_ZNK6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.599"* %coerce)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %ref.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call5, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %call8 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.562"* dereferenceable(8) %ref.tmp)
  %2 = bitcast %"struct.thrust::pair.487"* %call8 to i8*
  store i8* %2, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"** %ref.tmp9, align 8, !tbaa !1
  %call10 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.487"** dereferenceable(8) %ref.tmp9)
  %5 = bitcast %"struct.thrust::pair.487"* %call10 to i8*
  store i8* %5, i8** %src, align 8, !tbaa !1
  %6 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %6) #5
  %7 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %7, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %8 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call11 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %8)
  %9 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call11 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %10 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %10, i32 0, i32 1
  %ref12 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %11 = bitcast %"struct.thrust::execution_policy.120"* %ref12 to %"struct.thrust::detail::execution_policy_base.121"*
  %call13 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %11)
  %12 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call13 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call14 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %9, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %12)
  store i32 %call14, i32* %kind, align 4, !tbaa !97
  %13 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  %14 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system115 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %14, i32 0, i32 0
  %ref16 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system115, align 8, !tbaa !7
  %15 = bitcast %"struct.thrust::execution_policy.88"* %ref16 to %"struct.thrust::detail::execution_policy_base.85"*
  %call17 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %15)
  %16 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call17 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %17 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system218 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %17, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system218, align 8, !tbaa !7
  %18 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %18)
  %19 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %16, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %19)
  store %struct.CUstream_st* %call21, %struct.CUstream_st** %s, align 8, !tbaa !1
  %20 = load i8*, i8** %dst, align 8, !tbaa !1
  %21 = load i8*, i8** %src, align 8, !tbaa !1
  %22 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %22, 4
  %23 = load i32, i32* %kind, align 4, !tbaa !97
  %24 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %20, i8* %21, i64 %mul, i32 %23, %struct.CUstream_st* %24)
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %25, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %26 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %26) #5
  %27 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %27) #5
  %28 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %28) #5
  %29 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrustplINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.564"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.564"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.562", align 8
  store %"class.thrust::iterator_facade.564"* %i, %"class.thrust::iterator_facade.564"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.562"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.564"*, %"class.thrust::iterator_facade.564"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.564"* %1 to %"class.thrust::pointer.562"*
  %3 = bitcast %"class.thrust::pointer.562"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.562"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.562"* %tmp to %"class.thrust::iterator_facade.564"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.564"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.562"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.562"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.562"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  ret %"struct.thrust::pair.487"* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.599"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %this.addr = alloca %"class.thrust::reference.599"*, align 8
  store %"class.thrust::reference.599"* %this, %"class.thrust::reference.599"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.599"*, %"class.thrust::reference.599"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.599", %"class.thrust::reference.599"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.562"* %retval to i8*
  %1 = bitcast %"class.thrust::pointer.562"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.600"* byval align 8 %result) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.600", align 8
  %first = alloca %"class.thrust::zip_iterator.604", align 8
  %last = alloca %"class.thrust::zip_iterator.604", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.600", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %0 = bitcast %"class.thrust::zip_iterator.604"* %first to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.604"* %last to { %"struct.thrust::pair.487"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %7 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::zip_iterator.604"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp1 to i8*
  %10 = bitcast %"class.thrust::zip_iterator.604"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 16, i32 8, i1 false)
  %11 = bitcast %"class.thrust::zip_iterator.600"* %agg.tmp2 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.600"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 16, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp3 to i8*
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp to { %"struct.thrust::pair.487"*, i32* }*
  %16 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %15, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %16, align 8
  %18 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %15, i32 0, i32 1
  %19 = load i32*, i32** %18, align 8
  %20 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp1 to { %"struct.thrust::pair.487"*, i32* }*
  %21 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %20, i32 0, i32 0
  %22 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %21, align 8
  %23 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %20, i32 0, i32 1
  %24 = load i32*, i32** %23, align 8
  %call = call { %"struct.thrust::pair.487"*, i32* } @_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %6, %"struct.thrust::pair.487"* %17, i32* %19, %"struct.thrust::pair.487"* %22, i32* %24, %"class.thrust::zip_iterator.600"* byval align 8 %agg.tmp2)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive, i32 0, i32 0
  %25 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive4 to { %"struct.thrust::pair.487"*, i32* }*
  %26 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %25, i32 0, i32 0
  %27 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call, 0
  store %"struct.thrust::pair.487"* %27, %"struct.thrust::pair.487"** %26, align 8
  %28 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %25, i32 0, i32 1
  %29 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call, 1
  store i32* %29, i32** %28, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive5, i32 0, i32 0
  %30 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive6 to { %"struct.thrust::pair.487"*, i32* }*
  %31 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %30, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %31
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.600"* byval align 8 %result) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::zip_iterator.600", align 8
  %first = alloca %"class.thrust::zip_iterator.604", align 8
  %last = alloca %"class.thrust::zip_iterator.604", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.600", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %0 = bitcast %"class.thrust::zip_iterator.604"* %first to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.604"* %last to { %"struct.thrust::pair.487"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %7 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::zip_iterator.604"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp1 to i8*
  %10 = bitcast %"class.thrust::zip_iterator.604"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 16, i32 8, i1 false)
  %11 = bitcast %"class.thrust::zip_iterator.600"* %agg.tmp2 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.600"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 16, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp3 to i8*
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp to { %"struct.thrust::pair.487"*, i32* }*
  %16 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %15, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %16, align 8
  %18 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %15, i32 0, i32 1
  %19 = load i32*, i32** %18, align 8
  %20 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp1 to { %"struct.thrust::pair.487"*, i32* }*
  %21 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %20, i32 0, i32 0
  %22 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %21, align 8
  %23 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %20, i32 0, i32 1
  %24 = load i32*, i32** %23, align 8
  %call = call { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %6, %"struct.thrust::pair.487"* %17, i32* %19, %"struct.thrust::pair.487"* %22, i32* %24, %"class.thrust::zip_iterator.600"* byval align 8 %agg.tmp2)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive, i32 0, i32 0
  %25 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive4 to { %"struct.thrust::pair.487"*, i32* }*
  %26 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %25, i32 0, i32 0
  %27 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call, 0
  store %"struct.thrust::pair.487"* %27, %"struct.thrust::pair.487"** %26, align 8
  %28 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %25, i32 0, i32 1
  %29 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call, 1
  store i32* %29, i32** %28, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive5, i32 0, i32 0
  %30 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive6 to { %"struct.thrust::pair.487"*, i32* }*
  %31 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %30, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %31
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.600"* byval align 8 %result) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::zip_iterator.600", align 8
  %first = alloca %"class.thrust::zip_iterator.604", align 8
  %last = alloca %"class.thrust::zip_iterator.604", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n = alloca i64, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %threshold_of_parallelism = alloca i64, align 8
  %groupsize = alloca i64, align 8
  %heap_size = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp5 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp6 = alloca %"class.thrust::zip_iterator.600", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %groupsize8 = alloca i64, align 8
  %grainsize = alloca i64, align 8
  %tile_size = alloca i64, align 8
  %num_tiles = alloca i64, align 8
  %subscription = alloca i64, align 8
  %num_groups = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %decomp = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %carries = alloca %"class.thrust::detail::temporary_array.676", align 8
  %heap_size11 = alloca i64, align 8
  %agg.tmp.ensured12 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp14 = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %agg.tmp15 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp16 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp17 = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %agg.tmp24 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %groupsize2 = alloca i64, align 8
  %grainsize2 = alloca i64, align 8
  %agg.tmp.ensured30 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp31 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323", align 8
  %agg.tmp34 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %agg.tmp35 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp36 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %agg.tmp43 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %agg.tmp50 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %agg.tmp.ensured60 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp61 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp63 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %agg.tmp64 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp65 = alloca %"class.thrust::zip_iterator.604", align 8
  %agg.tmp66 = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %agg.tmp67 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %agg.tmp74 = alloca %"class.thrust::zip_iterator.600", align 8
  %agg.tmp75 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %0 = bitcast %"class.thrust::zip_iterator.604"* %first to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.604"* %last to { %"struct.thrust::pair.487"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::zip_iterator.604"* %last to %"class.thrust::iterator_facade.605"*
  %8 = bitcast %"class.thrust::zip_iterator.604"* %first to %"class.thrust::iterator_facade.605"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.605"* dereferenceable(1) %7, %"class.thrust::iterator_facade.605"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %9) #5
  %10 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %10 to %"struct.thrust::detail::execution_policy_base.121"*
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %11)
  %12 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call2 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %12)
  store %struct.CUstream_st* %call2, %struct.CUstream_st** %s, align 8, !tbaa !1
  %13 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  store i64 20000, i64* %threshold_of_parallelism, align 8, !tbaa !13
  %14 = load i64, i64* %n, align 8, !tbaa !13
  %cmp = icmp slt i64 %14, 20000
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %15 = bitcast i64* %groupsize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %15) #5
  store i64 512, i64* %groupsize, align 8, !tbaa !13
  %16 = bitcast i64* %heap_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %16) #5
  store i64 12288, i64* %heap_size, align 8, !tbaa !13
  %17 = load i64, i64* %heap_size, align 8, !tbaa !13
  %18 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridILm512ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* sret %agg.tmp, i64 1, i64 %17, %struct.CUstream_st* %18)
  %19 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %19, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %20 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp5 to i8*
  %21 = bitcast %"class.thrust::zip_iterator.604"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %20, i8* %21, i64 16, i32 8, i1 false)
  %22 = load i64, i64* %n, align 8, !tbaa !13
  %23 = bitcast %"class.thrust::zip_iterator.600"* %agg.tmp6 to i8*
  %24 = bitcast %"class.thrust::zip_iterator.600"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %23, i8* %24, i64 16, i32 8, i1 false)
  %25 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp7 to i8*
  %26 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %25, i8* %26, i64 1, i32 1, i1 false), !tbaa.struct !41
  %27 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp5 to { %"struct.thrust::pair.487"*, i32* }*
  %28 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %27, i32 0, i32 0
  %29 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %28, align 8
  %30 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %27, i32 0, i32 1
  %31 = load i32*, i32** %30, align 8
  %32 = bitcast %"class.thrust::zip_iterator.600"* %agg.tmp6 to { %"struct.thrust::pair.487"*, i32* }*
  %33 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %32, i32 0, i32 0
  %34 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %33, align 8
  %35 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %32, i32 0, i32 1
  %36 = load i32*, i32** %35, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %agg.tmp, %"struct.thrust::pair.487"* %29, i32* %31, i64 %22, %"struct.thrust::pair.487"* %34, i32* %36)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %37 = bitcast i64* %heap_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %37) #5
  %38 = bitcast i64* %groupsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %38) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %39 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %39) #5
  store i64 128, i64* %groupsize8, align 8, !tbaa !13
  %40 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %40) #5
  store i64 5, i64* %grainsize, align 8, !tbaa !13
  %41 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %41) #5
  store i64 640, i64* %tile_size, align 8, !tbaa !13
  %42 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.start(i64 8, i8* %42) #5
  %43 = load i64, i64* %n, align 8, !tbaa !13
  %add = add nsw i64 %43, 640
  %sub = sub nsw i64 %add, 1
  %div = sdiv i64 %sub, 640
  store i64 %div, i64* %num_tiles, align 8, !tbaa !13
  %44 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.start(i64 8, i8* %44) #5
  store i64 20, i64* %subscription, align 8, !tbaa !13
  %45 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %45) #5
  %46 = load i64, i64* %subscription, align 8, !tbaa !13
  %call9 = call i32 @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE20hardware_concurrencyEv()
  %conv = sext i32 %call9 to i64
  %mul = mul nsw i64 %46, %conv
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call10 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %ref.tmp, i64* dereferenceable(8) %num_tiles)
  store i64 %call10, i64* %num_groups, align 8, !tbaa !13
  %47 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.start(i64 40, i8* %47) #5
  %48 = load i64, i64* %n, align 8, !tbaa !13
  %49 = load i64, i64* %num_groups, align 8, !tbaa !13
  call void @_ZN6thrust6system4cuda6detail21aligned_decompositionIlEC2Elll(%"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp, i64 %48, i64 %49, i64 640)
  %50 = bitcast %"class.thrust::detail::temporary_array.676"* %carries to i8*
  call void @llvm.lifetime.start(i64 24, i8* %50) #5
  %51 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %52 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %51 to %"struct.thrust::execution_policy.120"*
  %53 = load i64, i64* %num_groups, align 8, !tbaa !13
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm(%"class.thrust::detail::temporary_array.676"* %carries, %"struct.thrust::execution_policy.120"* dereferenceable(1) %52, i64 %53)
  %54 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %54) #5
  store i64 1024, i64* %heap_size11, align 8, !tbaa !13
  %55 = load i64, i64* %num_groups, align 8, !tbaa !13
  %56 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %57 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* sret %agg.tmp13, i64 %55, i64 %56, %struct.CUstream_st* %57)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.else
  %58 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp15 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %58, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %59 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp16 to i8*
  %60 = bitcast %"class.thrust::zip_iterator.604"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* %60, i64 16, i32 8, i1 false)
  %61 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %agg.tmp17 to i8*
  %62 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %61, i8* %62, i64 40, i32 8, i1 false), !tbaa.struct !220
  %63 = bitcast %"class.thrust::detail::temporary_array.676"* %carries to %"class.thrust::detail::contiguous_storage.677"*
  %call20 = invoke %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.677"* %63)
          to label %invoke.cont19 unwind label %lpad

invoke.cont19:                                    ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp18, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive22, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call20, %"class.thrust::tuple.688"** %coerce.dive23, align 8
  %64 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp24 to i8*
  %65 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %64, i8* %65, i64 1, i32 1, i1 false), !tbaa.struct !41
  %66 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp16 to { %"struct.thrust::pair.487"*, i32* }*
  %67 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %66, i32 0, i32 0
  %68 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %67, align 8
  %69 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %66, i32 0, i32 1
  %70 = load i32*, i32** %69, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp18, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive27, i32 0, i32 0
  %71 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive28, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured12, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp13, %"struct.thrust::pair.487"* %68, i32* %70, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %agg.tmp17, %"class.thrust::tuple.688"* %71)
          to label %invoke.cont29 unwind label %lpad

invoke.cont29:                                    ; preds = %invoke.cont19
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured12) #5
  %72 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %72) #5
  store i64 256, i64* %groupsize2, align 8, !tbaa !13
  %73 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %73) #5
  store i64 3, i64* %grainsize2, align 8, !tbaa !13
  store i64 6144, i64* %heap_size11, align 8, !tbaa !13
  %74 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %75 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm256ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* sret %agg.tmp31, i64 1, i64 %74, %struct.CUstream_st* %75)
          to label %invoke.cont33 unwind label %lpad32

invoke.cont33:                                    ; preds = %invoke.cont29
  %76 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp35 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %76, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %77 = bitcast %"class.thrust::detail::temporary_array.676"* %carries to %"class.thrust::detail::contiguous_storage.677"*
  %call38 = invoke %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.677"* %77)
          to label %invoke.cont37 unwind label %lpad32

invoke.cont37:                                    ; preds = %invoke.cont33
  %coerce.dive39 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp36, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive41, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call38, %"class.thrust::tuple.688"** %coerce.dive42, align 8
  %78 = load i64, i64* %num_groups, align 8, !tbaa !13
  %79 = bitcast %"class.thrust::detail::temporary_array.676"* %carries to %"class.thrust::detail::contiguous_storage.677"*
  %call45 = invoke %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.677"* %79)
          to label %invoke.cont44 unwind label %lpad32

invoke.cont44:                                    ; preds = %invoke.cont37
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp43, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive48, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call45, %"class.thrust::tuple.688"** %coerce.dive49, align 8
  %80 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp50 to i8*
  %81 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %80, i8* %81, i64 1, i32 1, i1 false), !tbaa.struct !41
  %coerce.dive51 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp36, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive51, i32 0, i32 0
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive52, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive53, i32 0, i32 0
  %82 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive54, align 8
  %coerce.dive55 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp43, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive56, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive57, i32 0, i32 0
  %83 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive58, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured30, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %agg.tmp31, %"class.thrust::tuple.688"* %82, i64 %78, %"class.thrust::tuple.688"* %83)
          to label %invoke.cont59 unwind label %lpad32

invoke.cont59:                                    ; preds = %invoke.cont44
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured30) #5
  store i64 5120, i64* %heap_size11, align 8, !tbaa !13
  %84 = load i64, i64* %num_groups, align 8, !tbaa !13
  %85 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %86 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* sret %agg.tmp61, i64 %84, i64 %85, %struct.CUstream_st* %86)
          to label %invoke.cont62 unwind label %lpad32

invoke.cont62:                                    ; preds = %invoke.cont59
  %87 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp64 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %87, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %88 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp65 to i8*
  %89 = bitcast %"class.thrust::zip_iterator.604"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %88, i8* %89, i64 16, i32 8, i1 false)
  %90 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %agg.tmp66 to i8*
  %91 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %90, i8* %91, i64 40, i32 8, i1 false), !tbaa.struct !220
  %92 = bitcast %"class.thrust::detail::temporary_array.676"* %carries to %"class.thrust::detail::contiguous_storage.677"*
  %call69 = invoke %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.677"* %92)
          to label %invoke.cont68 unwind label %lpad32

invoke.cont68:                                    ; preds = %invoke.cont62
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp67, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive71, i32 0, i32 0
  %coerce.dive73 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive72, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call69, %"class.thrust::tuple.688"** %coerce.dive73, align 8
  %93 = bitcast %"class.thrust::zip_iterator.600"* %agg.tmp74 to i8*
  %94 = bitcast %"class.thrust::zip_iterator.600"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %93, i8* %94, i64 16, i32 8, i1 false)
  %95 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %agg.tmp75 to i8*
  %96 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %95, i8* %96, i64 1, i32 1, i1 false), !tbaa.struct !41
  %97 = bitcast %"class.thrust::zip_iterator.604"* %agg.tmp65 to { %"struct.thrust::pair.487"*, i32* }*
  %98 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %97, i32 0, i32 0
  %99 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %98, align 8
  %100 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %97, i32 0, i32 1
  %101 = load i32*, i32** %100, align 8
  %coerce.dive76 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp67, i32 0, i32 0
  %coerce.dive77 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive76, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive77, i32 0, i32 0
  %coerce.dive79 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive78, i32 0, i32 0
  %102 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive79, align 8
  %103 = bitcast %"class.thrust::zip_iterator.600"* %agg.tmp74 to { %"struct.thrust::pair.487"*, i32* }*
  %104 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %103, i32 0, i32 0
  %105 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %104, align 8
  %106 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %103, i32 0, i32 1
  %107 = load i32*, i32** %106, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured60, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp61, %"struct.thrust::pair.487"* %99, i32* %101, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %agg.tmp66, %"class.thrust::tuple.688"* %102, %"struct.thrust::pair.487"* %105, i32* %107)
          to label %invoke.cont80 unwind label %lpad32

invoke.cont80:                                    ; preds = %invoke.cont68
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured60) #5
  %108 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %108) #5
  %109 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %109) #5
  %110 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %110) #5
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.676"* %carries) #5
  %111 = bitcast %"class.thrust::detail::temporary_array.676"* %carries to i8*
  call void @llvm.lifetime.end(i64 24, i8* %111) #5
  %112 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.end(i64 40, i8* %112) #5
  %113 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %113) #5
  %114 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.end(i64 8, i8* %114) #5
  %115 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.end(i64 8, i8* %115) #5
  %116 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %116) #5
  %117 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %117) #5
  %118 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %118) #5
  br label %if.end

lpad:                                             ; preds = %invoke.cont19, %invoke.cont, %if.else
  %119 = landingpad { i8*, i32 }
          cleanup
  %120 = extractvalue { i8*, i32 } %119, 0
  store i8* %120, i8** %exn.slot, align 8
  %121 = extractvalue { i8*, i32 } %119, 1
  store i32 %121, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad32:                                           ; preds = %invoke.cont68, %invoke.cont62, %invoke.cont59, %invoke.cont44, %invoke.cont37, %invoke.cont33, %invoke.cont29
  %122 = landingpad { i8*, i32 }
          cleanup
  %123 = extractvalue { i8*, i32 } %122, 0
  store i8* %123, i8** %exn.slot, align 8
  %124 = extractvalue { i8*, i32 } %122, 1
  store i32 %124, i32* %ehselector.slot, align 4
  %125 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %125) #5
  %126 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %126) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad32, %lpad
  %127 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %127) #5
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.676"* %carries) #5
  %128 = bitcast %"class.thrust::detail::temporary_array.676"* %carries to i8*
  call void @llvm.lifetime.end(i64 24, i8* %128) #5
  %129 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.end(i64 40, i8* %129) #5
  %130 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %130) #5
  %131 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.end(i64 8, i8* %131) #5
  %132 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.end(i64 8, i8* %132) #5
  %133 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %133) #5
  %134 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %134) #5
  %135 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %135) #5
  %136 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.end(i64 8, i8* %136) #5
  %137 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %137) #5
  %138 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %138) #5
  br label %eh.resume

if.end:                                           ; preds = %invoke.cont80, %if.then
  %139 = bitcast %"class.thrust::zip_iterator.600"* %result to %"class.thrust::iterator_facade.601"*
  %140 = load i64, i64* %n, align 8, !tbaa !13
  %call90 = call { %"struct.thrust::pair.487"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE(%"class.thrust::iterator_facade.601"* dereferenceable(1) %139, i64 %140)
  %coerce.dive91 = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive92 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive91, i32 0, i32 0
  %141 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive92 to { %"struct.thrust::pair.487"*, i32* }*
  %142 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %141, i32 0, i32 0
  %143 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call90, 0
  store %"struct.thrust::pair.487"* %143, %"struct.thrust::pair.487"** %142, align 8
  %144 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %141, i32 0, i32 1
  %145 = extractvalue { %"struct.thrust::pair.487"*, i32* } %call90, 1
  store i32* %145, i32** %144, align 8
  %146 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.end(i64 8, i8* %146) #5
  %147 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %147) #5
  %148 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %148) #5
  %coerce.dive96 = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive97 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive96, i32 0, i32 0
  %149 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive97 to { %"struct.thrust::pair.487"*, i32* }*
  %150 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %149, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %150

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val98 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val98
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.605"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.605"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.605"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.605"*, align 8
  store %"class.thrust::iterator_facade.605"* %lhs, %"class.thrust::iterator_facade.605"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.605"* %rhs, %"class.thrust::iterator_facade.605"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.605"*, %"class.thrust::iterator_facade.605"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.605"* %0 to %"class.thrust::zip_iterator.604"*
  %2 = load %"class.thrust::iterator_facade.605"*, %"class.thrust::iterator_facade.605"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.605"* %2 to %"class.thrust::zip_iterator.604"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_(%"class.thrust::zip_iterator.604"* dereferenceable(16) %1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce0, i32* %arg2.coerce1, i64 %arg3, %"struct.thrust::pair.487"* %arg4.coerce0, i32* %arg4.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.604", align 8
  %arg4 = alloca %"class.thrust::zip_iterator.600", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %arg3.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.295", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %0 = bitcast %"class.thrust::zip_iterator.604"* %arg2 to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.600"* %arg4 to { %"struct.thrust::pair.487"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg4.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 1
  store i32* %arg4.coerce1, i32** %5, align 8
  store i64 %arg3, i64* %arg3.addr, align 8, !tbaa !13
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %arg2, i64* dereferenceable(8) %arg3.addr, %"class.thrust::zip_iterator.600"* dereferenceable(16) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm(%"class.thrust::detail::temporary_array.676"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.676"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.678", align 8
  %ref.tmp2 = alloca %"class.thrust::detail::temporary_allocator.679", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_array.676"* %this, %"class.thrust::detail::temporary_array.676"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_array.676"*, %"class.thrust::detail::temporary_array.676"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.676"* %this1 to %"class.thrust::detail::contiguous_storage.677"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE(%"class.thrust::detail::temporary_allocator.679"* %ref.tmp2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_(%"struct.thrust::detail::no_throw_allocator.678"* %ref.tmp, %"class.thrust::detail::temporary_allocator.679"* dereferenceable(8) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_(%"class.thrust::detail::contiguous_storage.677"* %0, i64 %1, %"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.680"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.678"*)*)(%"struct.thrust::detail::no_throw_allocator.678"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.680"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.679"*)*)(%"class.thrust::detail::temporary_allocator.679"* %ref.tmp2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.676"* dereferenceable(24) %this1, i64 %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.680"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.678"*)*)(%"struct.thrust::detail::no_throw_allocator.678"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.680"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.679"*)*)(%"class.thrust::detail::temporary_allocator.679"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::detail::temporary_array.676"* %this1 to %"class.thrust::detail::contiguous_storage.677"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.677"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val8 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce0, i32* %arg2.coerce1, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %arg3, %"class.thrust::tuple.688"* %arg4.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.604", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp6 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %0 = bitcast %"class.thrust::zip_iterator.604"* %arg2 to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %arg4, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg4.coerce, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* sret %agg.tmp6, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %arg2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %arg3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %agg.tmp6)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.677"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.682"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.682"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %2 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  ret %"class.thrust::tuple.688"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %g, %"class.thrust::tuple.688"* %arg2.coerce, i64 %arg3, %"class.thrust::tuple.688"* %arg4.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %arg3.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", align 8
  %agg.tmp11 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg2.coerce, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %arg4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive7, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg4.coerce, %"class.thrust::tuple.688"** %coerce.dive8, align 8
  store i64 %arg3, i64* %arg3.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* sret %agg.tmp10, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %arg2, i64* dereferenceable(8) %arg3.addr, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %agg.tmp10)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce0, i32* %arg2.coerce1, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %arg3, %"class.thrust::tuple.688"* %arg4.coerce, %"struct.thrust::pair.487"* %arg5.coerce0, i32* %arg5.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.604", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %arg5 = alloca %"class.thrust::zip_iterator.600", align 8
  %arg6 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608", align 1
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp6 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %0 = bitcast %"class.thrust::zip_iterator.604"* %arg2 to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %arg4, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg4.coerce, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  %3 = bitcast %"class.thrust::zip_iterator.600"* %arg5 to { %"struct.thrust::pair.487"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg5.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %3, i32 0, i32 1
  store i32* %arg5.coerce1, i32** %5, align 8
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* sret %agg.tmp6, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %arg2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %arg3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %arg4, %"class.thrust::zip_iterator.600"* dereferenceable(16) %arg5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %arg6)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %agg.tmp6)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.676"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.676"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  store %"class.thrust::detail::temporary_array.676"* %this, %"class.thrust::detail::temporary_array.676"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.676"*, %"class.thrust::detail::temporary_array.676"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.676"* %this1 to %"class.thrust::detail::contiguous_storage.677"*
  %1 = bitcast %"class.thrust::detail::temporary_array.676"* %this1 to %"class.thrust::detail::contiguous_storage.677"*
  %call = invoke %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.677"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.676"* %this1 to %"class.thrust::detail::contiguous_storage.677"*
  %call7 = invoke %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.677"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive10, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call7, %"class.thrust::tuple.688"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive14, i32 0, i32 0
  %3 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive18, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_(%"class.thrust::detail::contiguous_storage.677"* %0, %"class.thrust::tuple.688"* %3, %"class.thrust::tuple.688"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.676"* %this1 to %"class.thrust::detail::contiguous_storage.677"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.677"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.676"* %this1 to %"class.thrust::detail::contiguous_storage.677"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.677"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE(%"class.thrust::iterator_facade.601"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.600", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.601"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.600", align 8
  store %"class.thrust::iterator_facade.601"* %i, %"class.thrust::iterator_facade.601"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.600"* %tmp to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.601"*, %"class.thrust::iterator_facade.601"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.601"* %1 to %"class.thrust::zip_iterator.600"*
  %3 = bitcast %"class.thrust::zip_iterator.600"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.600"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.600"* %tmp to %"class.thrust::iterator_facade.601"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.600"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl(%"class.thrust::iterator_facade.601"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.600"* %retval to i8*
  %8 = bitcast %"class.thrust::zip_iterator.600"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.600"* %tmp to i8*
  call void @llvm.lifetime.end(i64 16, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.602", %"class.thrust::tuple.602"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.603"* %coerce.dive1 to { %"struct.thrust::pair.487"*, i32* }*
  %11 = load { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.487"*, i32* } %11
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_(%"class.thrust::zip_iterator.604"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.604"* %f1, %"class.thrust::zip_iterator.604"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %f2, %"class.thrust::zip_iterator.604"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.604"* dereferenceable(16) %0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.604"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  store %"class.thrust::zip_iterator.604"* %f1, %"class.thrust::zip_iterator.604"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %f2, %"class.thrust::zip_iterator.604"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.604"* %1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.604"* %this, %"class.thrust::zip_iterator.604"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  store %"class.thrust::zip_iterator.604"* %this, %"class.thrust::zip_iterator.604"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.604"* %other, %"class.thrust::zip_iterator.604"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %other.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.606"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.604"* %0)
  %1 = bitcast %"class.thrust::tuple.606"* %call to %"struct.thrust::detail::cons.607"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.607"* dereferenceable(16) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.596"* %call2 to %"class.thrust::iterator_facade.598"*
  %call3 = call dereferenceable(16) %"class.thrust::tuple.606"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.604"* %this1)
  %3 = bitcast %"class.thrust::tuple.606"* %call3 to %"struct.thrust::detail::cons.607"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.607"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.596"* %call4 to %"class.thrust::iterator_facade.598"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.598"* dereferenceable(1) %2, %"class.thrust::iterator_facade.598"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.598"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.598"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.598"*, align 8
  store %"class.thrust::iterator_facade.598"* %lhs, %"class.thrust::iterator_facade.598"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.598"* %rhs, %"class.thrust::iterator_facade.598"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.598"* %0 to %"class.thrust::detail::normal_iterator.596"*
  %2 = load %"class.thrust::iterator_facade.598"*, %"class.thrust::iterator_facade.598"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.598"* %2 to %"class.thrust::detail::normal_iterator.596"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.607"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.607"*, align 8
  store %"struct.thrust::detail::cons.607"* %c, %"struct.thrust::detail::cons.607"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.607"*, %"struct.thrust::detail::cons.607"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE(%"struct.thrust::detail::cons.607"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.596"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.606"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.604"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  store %"class.thrust::zip_iterator.604"* %this, %"class.thrust::zip_iterator.604"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.606"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.596"* %f1, %"class.thrust::detail::normal_iterator.596"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.596"* %f2, %"class.thrust::detail::normal_iterator.596"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  store %"class.thrust::detail::normal_iterator.596"* %f1, %"class.thrust::detail::normal_iterator.596"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.596"* %f2, %"class.thrust::detail::normal_iterator.596"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.596"* %1 to %"class.thrust::iterator_adaptor.597"*
  %3 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.596"* %3 to %"class.thrust::iterator_adaptor.597"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.597"* %2, %"class.thrust::iterator_adaptor.597"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.597"* %this, %"class.thrust::iterator_adaptor.597"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.597"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.597"*, align 8
  store %"class.thrust::iterator_adaptor.597"* %this, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.597"* %y, %"class.thrust::iterator_adaptor.597"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.597"*, %"class.thrust::iterator_adaptor.597"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.597"*, %"class.thrust::iterator_adaptor.597"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.597"* %0)
  %1 = bitcast %"class.thrust::pointer.562"* %call to %"class.thrust::iterator_facade.564"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.562"* %m_iterator to %"class.thrust::iterator_facade.564"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.564"* dereferenceable(1) %1, %"class.thrust::iterator_facade.564"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.564"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.564"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.564"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.564"*, align 8
  store %"class.thrust::iterator_facade.564"* %lhs, %"class.thrust::iterator_facade.564"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.564"* %rhs, %"class.thrust::iterator_facade.564"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.564"*, %"class.thrust::iterator_facade.564"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.564"* %0 to %"class.thrust::pointer.562"*
  %2 = load %"class.thrust::iterator_facade.564"*, %"class.thrust::iterator_facade.564"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.564"* %2 to %"class.thrust::pointer.562"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.562"* dereferenceable(8) %1, %"class.thrust::pointer.562"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.562"* dereferenceable(8) %f1, %"class.thrust::pointer.562"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.562"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.562"* %f1, %"class.thrust::pointer.562"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %f2, %"class.thrust::pointer.562"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.562"* dereferenceable(8) %0, %"class.thrust::pointer.562"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.562"* dereferenceable(8) %f1, %"class.thrust::pointer.562"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.562"*, align 8
  store %"class.thrust::pointer.562"* %f1, %"class.thrust::pointer.562"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %f2, %"class.thrust::pointer.562"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.562"* %1 to %"class.thrust::iterator_adaptor.563"*
  %3 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.562"* %3 to %"class.thrust::iterator_adaptor.563"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.563"* %2, %"class.thrust::iterator_adaptor.563"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.563"* %this, %"class.thrust::iterator_adaptor.563"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.563"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.563"*, align 8
  store %"class.thrust::iterator_adaptor.563"* %this, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.563"* %y, %"class.thrust::iterator_adaptor.563"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.563"*, %"class.thrust::iterator_adaptor.563"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.563"*, %"class.thrust::iterator_adaptor.563"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.563"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !397
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.487"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.487"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE(%"struct.thrust::detail::cons.607"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.607"*, align 8
  store %"struct.thrust::detail::cons.607"* %t, %"struct.thrust::detail::cons.607"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.607"*, %"struct.thrust::detail::cons.607"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.607", %"struct.thrust::detail::cons.607"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.596"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 64, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.295"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %a2, i64* dereferenceable(8) %a3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %a3.addr = alloca i64*, align 8
  %a4.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %ref.tmp = alloca %"class.thrust::tuple.691", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %a2, %"class.thrust::zip_iterator.604"** %a2.addr, align 8, !tbaa !7
  store i64* %a3, i64** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %a4, %"class.thrust::zip_iterator.600"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %a2.addr, align 8
  %2 = load i64*, i64** %a3.addr, align 8
  %3 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.691"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %1, i64* dereferenceable(8) %2, %"class.thrust::zip_iterator.600"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %agg.result, %"class.thrust::tuple.691"* dereferenceable(56) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 64, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 64, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.300"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.698"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.297"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm512EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.298"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.296", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !423
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.699"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj512ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.703"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.296"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.700"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj512ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm512EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.702"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.691"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t3, %"class.thrust::zip_iterator.600"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %2 = load i64*, i64** %t2.addr, align 8
  %3 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_(%"class.thrust::tuple.691"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %1, i64* dereferenceable(8) %2, %"class.thrust::zip_iterator.600"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %this, %"class.thrust::tuple.691"* dereferenceable(56) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"*, align 8
  %args.addr = alloca %"class.thrust::tuple.691"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.691"* %args, %"class.thrust::tuple.691"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.690", %"class.thrust::system::cuda::detail::bulk_::detail::closure.690"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.691"*, %"class.thrust::tuple.691"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.691"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.691"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 56, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_(%"class.thrust::tuple.691"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.691"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.691"* %this, %"class.thrust::tuple.691"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t3, %"class.thrust::zip_iterator.600"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.691"*, %"class.thrust::tuple.691"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.691"* %this1 to %"struct.thrust::detail::cons.692"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.692"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %2, i64* dereferenceable(8) %3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.692"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t2, i64* dereferenceable(8) %t3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.692"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.692"* %this, %"struct.thrust::detail::cons.692"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t2, %"class.thrust::zip_iterator.604"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t4, %"class.thrust::zip_iterator.600"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.692"*, %"struct.thrust::detail::cons.692"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.692", %"struct.thrust::detail::cons.692"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.692", %"struct.thrust::detail::cons.692"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.693"* %tail, %"class.thrust::zip_iterator.604"* dereferenceable(16) %3, i64* dereferenceable(8) %4, %"class.thrust::zip_iterator.600"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.693"* %this, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.693"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.693"* %this, %"struct.thrust::detail::cons.693"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t3, %"class.thrust::zip_iterator.600"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.693"*, %"struct.thrust::detail::cons.693"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.693", %"struct.thrust::detail::cons.693"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.604"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.604"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.693", %"struct.thrust::detail::cons.693"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.694"* %tail, i64* dereferenceable(8) %3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.694"* %this, i64* dereferenceable(8) %t1, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.694"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.694"* %this, %"struct.thrust::detail::cons.694"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t2, %"class.thrust::zip_iterator.600"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.694"*, %"struct.thrust::detail::cons.694"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.694", %"struct.thrust::detail::cons.694"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !425
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.694", %"struct.thrust::detail::cons.694"* %this1, i32 0, i32 1
  %2 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t2.addr, align 8
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.695"* %tail, %"class.thrust::zip_iterator.600"* dereferenceable(16) %2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.695"* %this, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.695"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t2.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.695"* %this, %"struct.thrust::detail::cons.695"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.600"* %t1, %"class.thrust::zip_iterator.600"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.695"*, %"struct.thrust::detail::cons.695"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.695", %"struct.thrust::detail::cons.695"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.600"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.600"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.695", %"struct.thrust::detail::cons.695"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.696"* %tail, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.696"* %this, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.696"*, align 8
  %t1.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.696"* %this, %"struct.thrust::detail::cons.696"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.696"*, %"struct.thrust::detail::cons.696"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.696", %"struct.thrust::detail::cons.696"* %this9, i32 0, i32 0
  %9 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t1.addr, align 8
  %10 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %head to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE(%"class.thrust::detail::temporary_allocator.679"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.679"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.679"* %this, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.679"*, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.679"* %this1 to %"class.thrust::detail::tagged_allocator.680"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.680"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.679", %"class.thrust::detail::temporary_allocator.679"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cuda::detail::tag"* %call, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.679"* %this1 to %"class.thrust::detail::tagged_allocator.680"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev(%"class.thrust::detail::tagged_allocator.680"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_(%"struct.thrust::detail::no_throw_allocator.678"* %this, %"class.thrust::detail::temporary_allocator.679"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.679"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %this, %"struct.thrust::detail::no_throw_allocator.678"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.679"* %other, %"class.thrust::detail::temporary_allocator.679"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.678"* %this1 to %"class.thrust::detail::temporary_allocator.679"*
  %1 = load %"class.thrust::detail::temporary_allocator.679"*, %"class.thrust::detail::temporary_allocator.679"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.679"* %0, %"class.thrust::detail::temporary_allocator.679"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_(%"class.thrust::detail::contiguous_storage.677"* %this, i64 %n, %"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  %n.addr = alloca i64, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store %"struct.thrust::detail::no_throw_allocator.678"* %alloc, %"struct.thrust::detail::no_throw_allocator.678"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_(%"struct.thrust::detail::no_throw_allocator.678"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.685"* %agg.tmp, %"class.thrust::tuple.688"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  %1 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.682"* %m_begin, %"class.thrust::tuple.688"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !432
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.677"* %this1, i64 %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont3
  ret void

lpad:                                             ; preds = %invoke.cont3, %invoke.cont, %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.680"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.678"*)*)(%"struct.thrust::detail::no_throw_allocator.678"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev(%"class.thrust::detail::tagged_allocator.680"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.680"*, align 8
  store %"class.thrust::detail::tagged_allocator.680"* %this, %"class.thrust::detail::tagged_allocator.680"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.680"*, %"class.thrust::detail::tagged_allocator.680"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.676"* dereferenceable(24), i64) #1 comdat {
entry:
  %.addr = alloca %"class.thrust::detail::temporary_array.676"*, align 8
  %.addr1 = alloca i64, align 8
  store %"class.thrust::detail::temporary_array.676"* %0, %"class.thrust::detail::temporary_array.676"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr1, align 8, !tbaa !13
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.677"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.677"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.680"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.678"*)*)(%"struct.thrust::detail::no_throw_allocator.678"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.680"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.678"*)*)(%"struct.thrust::detail::no_throw_allocator.678"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.680"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.680"*, align 8
  store %"class.thrust::detail::tagged_allocator.680"* %this, %"class.thrust::detail::tagged_allocator.680"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.680"*, %"class.thrust::detail::tagged_allocator.680"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.679"* %this, %"class.thrust::detail::temporary_allocator.679"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.679"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.679"*, align 8
  store %"class.thrust::detail::temporary_allocator.679"* %this, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.679"* %other, %"class.thrust::detail::temporary_allocator.679"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.679"*, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.679"* %this1 to %"class.thrust::detail::tagged_allocator.680"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.680"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.679", %"class.thrust::detail::temporary_allocator.679"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.679"*, %"class.thrust::detail::temporary_allocator.679"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.679", %"class.thrust::detail::temporary_allocator.679"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::tag"* %ref, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_(%"struct.thrust::detail::no_throw_allocator.678"* %this, %"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %this, %"struct.thrust::detail::no_throw_allocator.678"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.678"* %0, %"struct.thrust::detail::no_throw_allocator.678"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.678"* %this1 to %"class.thrust::detail::temporary_allocator.679"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.678"* %2 to %"class.thrust::detail::temporary_allocator.679"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.679"* %1, %"class.thrust::detail::temporary_allocator.679"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.685"* %this, %"class.thrust::tuple.688"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.685"*, align 8
  %other.addr = alloca %"class.thrust::tuple.688"*, align 8
  store %"class.thrust::pointer.685"* %this, %"class.thrust::pointer.685"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.688"* %other, %"class.thrust::tuple.688"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.685"* %this1 to %"class.thrust::iterator_adaptor.686"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_(%"class.thrust::iterator_adaptor.686"* %0, %"class.thrust::tuple.688"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.682"* %this, %"class.thrust::tuple.688"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.682"* %this, %"class.thrust::detail::normal_iterator.682"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.682"* %this2 to %"class.thrust::iterator_adaptor.683"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_(%"class.thrust::iterator_adaptor.683"* %0, %"class.thrust::pointer.685"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.677"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.685", align 8
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.688"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call, %"class.thrust::tuple.688"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %2 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.682"* %ref.tmp, %"class.thrust::tuple.688"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.682"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.682"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !432
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.685"* %agg.tmp7, %"class.thrust::tuple.688"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive8, i32 0, i32 0
  %6 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.682"* %ref.tmp6, %"class.thrust::tuple.688"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.682"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.682"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !432
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_(%"class.thrust::iterator_adaptor.686"* %this, %"class.thrust::tuple.688"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.686"*, align 8
  %iter.addr = alloca %"class.thrust::tuple.688"**, align 8
  store %"class.thrust::iterator_adaptor.686"* %this, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.688"** %iter, %"class.thrust::tuple.688"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.686"*, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.686"* %this1 to %"class.thrust::iterator_facade.687"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::tuple.688"**, %"class.thrust::tuple.688"*** %iter.addr, align 8
  %2 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %1, align 8, !tbaa !1
  store %"class.thrust::tuple.688"* %2, %"class.thrust::tuple.688"** %m_iterator, align 8, !tbaa !436
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_(%"class.thrust::iterator_adaptor.683"* %this, %"class.thrust::pointer.685"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.683"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.685"*, align 8
  store %"class.thrust::iterator_adaptor.683"* %this, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.685"* %iter, %"class.thrust::pointer.685"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.683"*, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.683"* %this1 to %"class.thrust::iterator_facade.684"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.685"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.685"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.688"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  %2 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.688"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.678"* %0 to %"class.thrust::detail::temporary_allocator.679"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.688"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.679"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  %3 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.688"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.679"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.679"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.705", align 8
  %ref.tmp = alloca %"struct.thrust::pair.706", align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.679"* %this, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.679"*, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.705"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.679"* %this1)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.706"* %ref.tmp to { %"class.thrust::tuple.688"*, i64 }*
  %4 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call2, 0
  store %"class.thrust::tuple.688"* %5, %"class.thrust::tuple.688"** %4, align 8
  %6 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.705"* %result, %"struct.thrust::pair.706"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.705", %"struct.thrust::pair.705"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !438
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.705", %"struct.thrust::pair.705"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.685"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  %13 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.679"* %this1, %"class.thrust::tuple.688"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.705"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.705", %"struct.thrust::pair.705"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.685"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.685"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.705"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive11, i32 0, i32 0
  %25 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive12, align 8
  ret %"class.thrust::tuple.688"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.706", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.706", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.706"* %agg.tmp to { %"class.thrust::tuple.688"*, i64 }*
  %4 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call2, 0
  store %"class.thrust::tuple.688"* %5, %"class.thrust::tuple.688"** %4, align 8
  %6 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.706"* %agg.tmp to { %"class.thrust::tuple.688"*, i64 }*
  %9 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %8, i32 0, i32 0
  %10 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %9, align 8
  %11 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_(%"class.thrust::tuple.688"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.706"* %retval to { %"class.thrust::tuple.688"*, i64 }*
  %14 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call3, 0
  store %"class.thrust::tuple.688"* %15, %"class.thrust::tuple.688"** %14, align 8
  %16 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.706"* %retval to { %"class.thrust::tuple.688"*, i64 }*
  %19 = load { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %18, align 8
  ret { %"class.thrust::tuple.688"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.679"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.679"*, align 8
  store %"class.thrust::detail::temporary_allocator.679"* %this, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.679"*, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.679", %"class.thrust::detail::temporary_allocator.679"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cuda::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.705"* %this, %"struct.thrust::pair.706"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.705"*, align 8
  %p.addr = alloca %"struct.thrust::pair.706"*, align 8
  store %"struct.thrust::pair.705"* %this, %"struct.thrust::pair.705"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.706"* %p, %"struct.thrust::pair.706"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.705"*, %"struct.thrust::pair.705"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.705", %"struct.thrust::pair.705"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.706"*, %"struct.thrust::pair.706"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.706", %"struct.thrust::pair.706"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.685"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.705", %"struct.thrust::pair.705"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.706"*, %"struct.thrust::pair.706"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.706", %"struct.thrust::pair.706"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !441
  store i64 %4, i64* %second, align 8, !tbaa !438
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.679"* %this, %"class.thrust::tuple.688"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.679"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.679"* %this, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.679"*, %"class.thrust::detail::temporary_allocator.679"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.679"* %this2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %3 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0, %"class.thrust::tuple.688"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_(%"class.thrust::tuple.688"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.706", align 8
  %p = alloca %"struct.thrust::pair.706", align 8
  %ptr = alloca %"class.thrust::pointer.685", align 8
  %0 = bitcast %"struct.thrust::pair.706"* %p to { %"class.thrust::tuple.688"*, i64 }*
  %1 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %0, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce0, %"class.thrust::tuple.688"** %1, align 8
  %2 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.685"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.706", %"struct.thrust::pair.706"* %p, i32 0, i32 0
  %call = call %"class.thrust::tuple.688"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.685"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.685"* %ptr, %"class.thrust::tuple.688"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.706", %"struct.thrust::pair.706"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.706"* %retval, %"class.thrust::pointer.685"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.685"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.706"* %retval to { %"class.thrust::tuple.688"*, i64 }*
  %6 = load { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %5, align 8
  ret { %"class.thrust::tuple.688"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.706", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.685"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.688"* @_ZN6thrust6mallocINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  %call2 = call %"class.thrust::tuple.688"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.685"* %ptr)
  %tobool = icmp ne %"class.thrust::tuple.688"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.685"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %7 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  %call5 = call { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_(%"class.thrust::tuple.688"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.706"* %retval to { %"class.thrust::tuple.688"*, i64 }*
  %9 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call5, 0
  store %"class.thrust::tuple.688"* %10, %"class.thrust::tuple.688"** %9, align 8
  %11 = getelementptr inbounds { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"class.thrust::tuple.688"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.685"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.706"* %retval to { %"class.thrust::tuple.688"*, i64 }*
  %15 = load { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %14, align 8
  ret { %"class.thrust::tuple.688"*, i64 } %15
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.685"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.685"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  store %"class.thrust::pointer.685"* %ptr, %"class.thrust::pointer.685"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  %3 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  %call = call %"class.thrust::tuple.688"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_(%"class.thrust::tuple.688"* %3)
  ret %"class.thrust::tuple.688"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.706"* %this, %"class.thrust::pointer.685"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.706"*, align 8
  %x.addr = alloca %"class.thrust::pointer.685"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.706"* %this, %"struct.thrust::pair.706"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.685"* %x, %"class.thrust::pointer.685"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.706"*, %"struct.thrust::pair.706"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.706", %"struct.thrust::pair.706"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.706", %"struct.thrust::pair.706"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !441
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_(%"class.thrust::tuple.688"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %ptr.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  %call = call %"class.thrust::tuple.688"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.685"* %ptr)
  ret %"class.thrust::tuple.688"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.685"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.685"*, align 8
  store %"class.thrust::pointer.685"* %this, %"class.thrust::pointer.685"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.685"* %this1 to %"class.thrust::iterator_adaptor.686"*
  %call = call dereferenceable(8) %"class.thrust::tuple.688"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.686"* %0)
  %1 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %call, align 8, !tbaa !1
  ret %"class.thrust::tuple.688"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::tuple.688"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.686"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.686"*, align 8
  store %"class.thrust::iterator_adaptor.686"* %this, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.686"*, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.688"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6mallocINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"class.thrust::tuple.688"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.685", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::tuple.688"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"class.thrust::tuple.688"* @_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call2, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  %call4 = call %"class.thrust::tuple.688"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.685"* dereferenceable(8) %ref.tmp)
  store %"class.thrust::tuple.688"* %call4, %"class.thrust::tuple.688"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.685"* %retval, %"class.thrust::tuple.688"* %4)
  %5 = bitcast %"class.thrust::tuple.688"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive5, i32 0, i32 0
  %6 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive6, align 8
  ret %"class.thrust::tuple.688"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"class.thrust::tuple.688"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_(%"class.thrust::tuple.688"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.706", align 8
  %x = alloca %"class.thrust::pointer.685", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %x.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.706"* %retval, %"class.thrust::pointer.685"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.706"* %retval to { %"class.thrust::tuple.688"*, i64 }*
  %1 = load { %"class.thrust::tuple.688"*, i64 }, { %"class.thrust::tuple.688"*, i64 }* %0, align 8
  ret { %"class.thrust::tuple.688"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 8, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to %"class.thrust::tuple.688"*
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.685"* %retval, %"class.thrust::tuple.688"* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %6 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  ret %"class.thrust::tuple.688"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.688"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"class.thrust::tuple.688"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"class.thrust::tuple.688"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"class.thrust::tuple.688"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.688"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.685", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %ptr.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.685"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::tuple.688"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), %"class.thrust::tuple.688"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.685", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %ptr.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call %"class.thrust::tuple.688"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.685"* dereferenceable(8) %ptr)
  %1 = bitcast %"class.thrust::tuple.688"* %call to i8*
  %call2 = call i32 @cudaFree(i8* %1)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.677"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.685", align 8
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.677"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.682"* %m_begin to %"class.thrust::iterator_adaptor.683"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.685"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.683"* %0)
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.677"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  %3 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %m_allocator, %"class.thrust::tuple.688"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.685"* %agg.tmp6, %"class.thrust::tuple.688"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive7, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.682"* %ref.tmp, %"class.thrust::tuple.688"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.682"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.682"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !432
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.677"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !432
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a, %"class.thrust::tuple.688"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %0, %"class.thrust::tuple.688"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.685"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.683"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.683"*, align 8
  store %"class.thrust::iterator_adaptor.683"* %this, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.683"*, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.685"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a, %"class.thrust::tuple.688"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.678"* %0, %"class.thrust::tuple.688"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.678"* %this, %"class.thrust::tuple.688"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %this, %"struct.thrust::detail::no_throw_allocator.678"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.678"* %this2 to %"class.thrust::detail::temporary_allocator.679"*
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.679"* %0, %"class.thrust::tuple.688"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 88, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 88, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %a2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %a3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %a3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %ref.tmp = alloca %"class.thrust::tuple.708", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %a2, %"class.thrust::zip_iterator.604"** %a2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %a3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %a4, %"class.thrust::detail::normal_iterator.682"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %a2.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.708"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %agg.result, %"class.thrust::tuple.708"* dereferenceable(80) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 88, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %task to i8*
  call void @llvm.lifetime.start(i64 112, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 88, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 112, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %task to i8*
  call void @llvm.lifetime.end(i64 112, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.714"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !443
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 112, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.715"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 88, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.719"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.716"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 112, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 112, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 112, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.718"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.708"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_(%"class.thrust::tuple.708"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %this, %"class.thrust::tuple.708"* dereferenceable(80) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"*, align 8
  %args.addr = alloca %"class.thrust::tuple.708"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.708"* %args, %"class.thrust::tuple.708"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.707", %"class.thrust::system::cuda::detail::bulk_::detail::closure.707"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.708"*, %"class.thrust::tuple.708"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.708"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.708"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 80, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_(%"class.thrust::tuple.708"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.708"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.708"* %this, %"class.thrust::tuple.708"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.708"*, %"class.thrust::tuple.708"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.708"* %this1 to %"struct.thrust::detail::cons.709"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.709"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.709"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.709"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.709"* %this, %"struct.thrust::detail::cons.709"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t2, %"class.thrust::zip_iterator.604"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t4, %"class.thrust::detail::normal_iterator.682"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.709"*, %"struct.thrust::detail::cons.709"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.709", %"struct.thrust::detail::cons.709"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.709", %"struct.thrust::detail::cons.709"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t2.addr, align 8
  %4 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.710"* %tail, %"class.thrust::zip_iterator.604"* dereferenceable(16) %3, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %4, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.710"* %this, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.710"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.710"* %this, %"struct.thrust::detail::cons.710"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.710"*, %"struct.thrust::detail::cons.710"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.710", %"struct.thrust::detail::cons.710"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.604"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.604"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.710", %"struct.thrust::detail::cons.710"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.711"* %tail, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.711"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.711"*, align 8
  %t1.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.711"* %this, %"struct.thrust::detail::cons.711"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t2, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.711"*, %"struct.thrust::detail::cons.711"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.711", %"struct.thrust::detail::cons.711"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %head to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false), !tbaa.struct !220
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.711", %"struct.thrust::detail::cons.711"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.712"* %tail, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.712"* %this, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.712"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t2.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.712"* %this, %"struct.thrust::detail::cons.712"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.682"* %t1, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.712"*, %"struct.thrust::detail::cons.712"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.712", %"struct.thrust::detail::cons.712"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.682"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.682"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.712", %"struct.thrust::detail::cons.712"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.696"* %tail, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %a2, i64* dereferenceable(8) %a3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %a3.addr = alloca i64*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %ref.tmp = alloca %"class.thrust::tuple.722", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %a2, %"class.thrust::detail::normal_iterator.682"** %a2.addr, align 8, !tbaa !7
  store i64* %a3, i64** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %a4, %"class.thrust::detail::normal_iterator.682"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %a2.addr, align 8
  %2 = load i64*, i64** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_(%"class.thrust::tuple.722"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %1, i64* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %agg.result, %"class.thrust::tuple.722"* dereferenceable(40) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 48, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 48, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 48, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.726"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !445
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.727"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.731"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.728"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.730"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_(%"class.thrust::tuple.722"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t1, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8
  %2 = load i64*, i64** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_(%"class.thrust::tuple.722"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %1, i64* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %this, %"class.thrust::tuple.722"* dereferenceable(40) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"*, align 8
  %args.addr = alloca %"class.thrust::tuple.722"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.722"* %args, %"class.thrust::tuple.722"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.721", %"class.thrust::system::cuda::detail::bulk_::detail::closure.721"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.722"*, %"class.thrust::tuple.722"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.722"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.722"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_(%"class.thrust::tuple.722"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.722"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.722"* %this, %"class.thrust::tuple.722"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t1, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.722"*, %"class.thrust::tuple.722"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.722"* %this1 to %"struct.thrust::detail::cons.723"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.723"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %2, i64* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.723"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t2, i64* dereferenceable(8) %t3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.723"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.723"* %this, %"struct.thrust::detail::cons.723"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t2, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t4, %"class.thrust::detail::normal_iterator.682"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.723"*, %"struct.thrust::detail::cons.723"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.723", %"struct.thrust::detail::cons.723"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.723", %"struct.thrust::detail::cons.723"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.724"* %tail, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, i64* dereferenceable(8) %4, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.724"* %this, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.724"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.724"* %this, %"struct.thrust::detail::cons.724"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.682"* %t1, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.724"*, %"struct.thrust::detail::cons.724"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.724", %"struct.thrust::detail::cons.724"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.682"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.682"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.724", %"struct.thrust::detail::cons.724"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.725"* %tail, i64* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.725"* %this, i64* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.725"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.725"* %this, %"struct.thrust::detail::cons.725"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t2, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.725"*, %"struct.thrust::detail::cons.725"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.725", %"struct.thrust::detail::cons.725"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !447
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.725", %"struct.thrust::detail::cons.725"* %this1, i32 0, i32 1
  %2 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.712"* %tail, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 104, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 104, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %a2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %a3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %a4, %"class.thrust::zip_iterator.600"* dereferenceable(16) %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %a6) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %a3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %a5.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %a6.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %ref.tmp = alloca %"class.thrust::tuple.734", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %a2, %"class.thrust::zip_iterator.604"** %a2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %a3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %a4, %"class.thrust::detail::normal_iterator.682"** %a4.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %a5, %"class.thrust::zip_iterator.600"** %a5.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %a6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a6.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %a2.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %a4.addr, align 8
  %4 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %a5.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %a6.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_(%"class.thrust::tuple.734"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %agg.result, %"class.thrust::tuple.734"* dereferenceable(96) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 104, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 104, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %task to i8*
  call void @llvm.lifetime.start(i64 128, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 104, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 128, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %task to i8*
  call void @llvm.lifetime.end(i64 128, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.739"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 104, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !450
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 128, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.740"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 104, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.744"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.741"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 128, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 128, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 128, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.743"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_(%"class.thrust::tuple.734"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t5) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t4, %"class.thrust::zip_iterator.600"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %4 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t4.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_(%"class.thrust::tuple.734"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %this, %"class.thrust::tuple.734"* dereferenceable(96) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"*, align 8
  %args.addr = alloca %"class.thrust::tuple.734"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.734"* %args, %"class.thrust::tuple.734"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.733", %"class.thrust::system::cuda::detail::bulk_::detail::closure.733"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.734"*, %"class.thrust::tuple.734"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.734"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.734"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 96, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_(%"class.thrust::tuple.734"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t5) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.734"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.734"* %this, %"class.thrust::tuple.734"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t4, %"class.thrust::zip_iterator.600"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.734"*, %"class.thrust::tuple.734"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.734"* %this1 to %"struct.thrust::detail::cons.735"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.735"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %4, %"class.thrust::zip_iterator.600"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.735"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t4, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.735"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t5.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t6.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.735"* %this, %"struct.thrust::detail::cons.735"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.604"* %t2, %"class.thrust::zip_iterator.604"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t4, %"class.thrust::detail::normal_iterator.682"** %t4.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t5, %"class.thrust::zip_iterator.600"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.735"*, %"struct.thrust::detail::cons.735"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.735", %"struct.thrust::detail::cons.735"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.735", %"struct.thrust::detail::cons.735"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t2.addr, align 8
  %4 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t4.addr, align 8
  %6 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t5.addr, align 8
  %7 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.736"* %tail, %"class.thrust::zip_iterator.604"* dereferenceable(16) %3, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %4, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %5, %"class.thrust::zip_iterator.600"* dereferenceable(16) %6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.736"* %this, %"class.thrust::zip_iterator.604"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.736"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.736"* %this, %"struct.thrust::detail::cons.736"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.604"* %t1, %"class.thrust::zip_iterator.604"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t3, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t4, %"class.thrust::zip_iterator.600"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.736"*, %"struct.thrust::detail::cons.736"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.736", %"struct.thrust::detail::cons.736"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.604"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.604"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.736", %"struct.thrust::detail::cons.736"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.737"* %tail, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %4, %"class.thrust::zip_iterator.600"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.737"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t2, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.737"*, align 8
  %t1.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.737"* %this, %"struct.thrust::detail::cons.737"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %t2, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t3, %"class.thrust::zip_iterator.600"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.737"*, %"struct.thrust::detail::cons.737"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.737", %"struct.thrust::detail::cons.737"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %head to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false), !tbaa.struct !220
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.737", %"struct.thrust::detail::cons.737"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.738"* %tail, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3, %"class.thrust::zip_iterator.600"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.738"* %this, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %t1, %"class.thrust::zip_iterator.600"* dereferenceable(16) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.738"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.738"* %this, %"struct.thrust::detail::cons.738"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.682"* %t1, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.600"* %t2, %"class.thrust::zip_iterator.600"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.738"*, %"struct.thrust::detail::cons.738"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.738", %"struct.thrust::detail::cons.738"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.682"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.682"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.738", %"struct.thrust::detail::cons.738"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %t2.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.695"* %tail, %"class.thrust::zip_iterator.600"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.608"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_(%"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::tuple.688"* %first.coerce, %"class.thrust::tuple.688"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  store %"class.thrust::tuple.688"* %first.coerce, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive6, i32 0, i32 0
  store %"class.thrust::tuple.688"* %last.coerce, %"class.thrust::tuple.688"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.682"* %first to %"class.thrust::iterator_adaptor.683"*
  %call = call dereferenceable(8) %"class.thrust::pointer.685"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.683"* %0)
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.682"* %last to %"class.thrust::iterator_facade.684"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.682"* %first to %"class.thrust::iterator_facade.684"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_(%"class.thrust::iterator_facade.684"* dereferenceable(1) %3, %"class.thrust::iterator_facade.684"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive10, i32 0, i32 0
  %5 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %m_allocator, %"class.thrust::tuple.688"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.677"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.677"*, align 8
  store %"class.thrust::detail::contiguous_storage.677"* %this, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.677"*, %"class.thrust::detail::contiguous_storage.677"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.677", %"class.thrust::detail::contiguous_storage.677"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.682"* %m_begin to %"class.thrust::iterator_facade.684"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.677"* %this1)
  %call2 = call %"class.thrust::tuple.688"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE(%"class.thrust::iterator_facade.684"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive4, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call2, %"class.thrust::tuple.688"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive8, i32 0, i32 0
  %1 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive9, align 8
  ret %"class.thrust::tuple.688"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a, %"class.thrust::tuple.688"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %0, %"class.thrust::tuple.688"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_(%"class.thrust::iterator_facade.684"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.684"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.684"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.684"*, align 8
  store %"class.thrust::iterator_facade.684"* %lhs, %"class.thrust::iterator_facade.684"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.684"* %rhs, %"class.thrust::iterator_facade.684"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.684"*, %"class.thrust::iterator_facade.684"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.684"* %0 to %"class.thrust::detail::normal_iterator.682"*
  %2 = load %"class.thrust::iterator_facade.684"*, %"class.thrust::iterator_facade.684"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.684"* %2 to %"class.thrust::detail::normal_iterator.682"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_(%"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a, %"class.thrust::tuple.688"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.685", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.685", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %p.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.685"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %5 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  %call5 = call %"class.thrust::tuple.688"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"class.thrust::tuple.688"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive6, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call5, %"class.thrust::tuple.688"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.688"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %first = alloca %"class.thrust::pointer.685", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %first.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.685"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive4, i32 0, i32 0
  %5 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive5, align 8
  %call6 = call %"class.thrust::tuple.688"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::tuple.688"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive7, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call6, %"class.thrust::tuple.688"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive9, i32 0, i32 0
  %6 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive10, align 8
  ret %"class.thrust::tuple.688"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::tuple.688"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %first = alloca %"class.thrust::pointer.685", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %first.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive4, align 8
  %call = call %"class.thrust::tuple.688"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::tuple.688"* %4, i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive5, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call, %"class.thrust::tuple.688"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive7, i32 0, i32 0
  %5 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive8, align 8
  ret %"class.thrust::tuple.688"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::tuple.688"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %first = alloca %"class.thrust::pointer.685", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp5 = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp6 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce13 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp16 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp17 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp18 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp19 = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp20 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp25 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp28 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp31 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp32 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp33 = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp34 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp37 = alloca i32, align 4
  %agg.tmp.ensured40 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp41 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp46 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp47 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp48 = alloca %"class.thrust::pointer.685", align 8
  %agg.tmp49 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %first.coerce, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive2 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::pointer.685"* %agg.tmp5 to i8*
  %12 = bitcast %"class.thrust::pointer.685"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp6 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp5, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive7, i32 0, i32 0
  %16 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive8, align 8
  %call9 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::tuple.688"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call9, i64* %17, align 4
  %call10 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call11 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call11, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call12 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce13, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive14 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call12, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call12, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp16, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::pointer.685"* %agg.tmp19 to i8*
  %30 = bitcast %"class.thrust::pointer.685"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp20 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp19, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive21, i32 0, i32 0
  %34 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive22, align 8
  %call23 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp16, %"class.thrust::tuple.688"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp15 to i64*
  store i64 %call23, i64* %35, align 4
  %call24 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce13, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp15)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call26 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call26, i64* %ref.tmp25, align 8, !tbaa !13
  %call27 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp25)
  store i64 %call27, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call29 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call30 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp28, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call30)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp32 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::pointer.685"* %agg.tmp33 to i8*
  %45 = bitcast %"class.thrust::pointer.685"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp34 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp33, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive35, i32 0, i32 0
  %49 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive36, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp28, %"class.thrust::tuple.688"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call38 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call38, i32* %ref.tmp37, align 4, !tbaa !11
  %call39 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp37)
  store i32 %call39, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv42 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv43 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call44 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call44 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call45 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp41, i64 %conv42, i64 %conv43, i64 0, %struct.CUstream_st* %call45)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp47 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::pointer.685"* %agg.tmp48 to i8*
  %61 = bitcast %"class.thrust::pointer.685"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp49 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %agg.tmp48, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive50, i32 0, i32 0
  %65 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive51, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured40, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp41, %"class.thrust::tuple.688"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured40) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::pointer.685"* %first to %"class.thrust::iterator_facade.687"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call52 = call %"class.thrust::tuple.688"* @_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.687"* dereferenceable(1) %66, i64 %67)
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive53, i32 0, i32 0
  store %"class.thrust::tuple.688"* %call52, %"class.thrust::tuple.688"** %coerce.dive54, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive55, i32 0, i32 0
  %72 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive56, align 8
  ret %"class.thrust::tuple.688"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::tuple.688"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.685", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg2.coerce, %"class.thrust::tuple.688"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.685"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIssEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENSC_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::tuple.688"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.685", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg2.coerce, %"class.thrust::tuple.688"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.685"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIssEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::tuple.688"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.685", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg2.coerce, %"class.thrust::tuple.688"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.685"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::tuple.688"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.685", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.688"* %arg2.coerce, %"class.thrust::tuple.688"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.685"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.687"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.685", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.687"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.685", align 8
  store %"class.thrust::iterator_facade.687"* %i, %"class.thrust::iterator_facade.687"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.685"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.687"*, %"class.thrust::iterator_facade.687"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.687"* %1 to %"class.thrust::pointer.685"*
  %3 = bitcast %"class.thrust::pointer.685"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.685"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.685"* %tmp to %"class.thrust::iterator_facade.687"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.685"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.687"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.685"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.685"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.685"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive, i32 0, i32 0
  %10 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive1, align 8
  ret %"class.thrust::tuple.688"* %10
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIssEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.685"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.685"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.747", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %a2, %"class.thrust::pointer.685"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.747"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.685"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %agg.result, %"class.thrust::tuple.747"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.747"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.685"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %t1, %"class.thrust::pointer.685"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj(%"class.thrust::tuple.747"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.685"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %this, %"class.thrust::tuple.747"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"*, align 8
  %args.addr = alloca %"class.thrust::tuple.747"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.747"* %args, %"class.thrust::tuple.747"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.747"*, %"class.thrust::tuple.747"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.747"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.747"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj(%"class.thrust::tuple.747"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.685"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.747"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.747"* %this, %"class.thrust::tuple.747"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %t1, %"class.thrust::pointer.685"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.747"*, %"class.thrust::tuple.747"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.747"* %this1 to %"struct.thrust::detail::cons.748"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.748"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.685"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.748"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.685"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.748"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.748"* %this, %"struct.thrust::detail::cons.748"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %t2, %"class.thrust::pointer.685"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.748"*, %"struct.thrust::detail::cons.748"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.748", %"struct.thrust::detail::cons.748"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.748", %"struct.thrust::detail::cons.748"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.749"* %tail, %"class.thrust::pointer.685"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.749"* %this, %"class.thrust::pointer.685"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.749"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.749"* %this, %"struct.thrust::detail::cons.749"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.685"* %t1, %"class.thrust::pointer.685"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.749"*, %"struct.thrust::detail::cons.749"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.749", %"struct.thrust::detail::cons.749"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.749", %"struct.thrust::detail::cons.749"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIssEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.685"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.685"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.758", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %a2, %"class.thrust::pointer.685"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.758"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.685"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %agg.result, %"class.thrust::tuple.758"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.758"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.685"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %t1, %"class.thrust::pointer.685"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl(%"class.thrust::tuple.758"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.685"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIssEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %this, %"class.thrust::tuple.758"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"*, align 8
  %args.addr = alloca %"class.thrust::tuple.758"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.758"* %args, %"class.thrust::tuple.758"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.758"*, %"class.thrust::tuple.758"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.758"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.758"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIssEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl(%"class.thrust::tuple.758"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.685"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.758"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.758"* %this, %"class.thrust::tuple.758"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %t1, %"class.thrust::pointer.685"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.758"*, %"class.thrust::tuple.758"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.758"* %this1 to %"struct.thrust::detail::cons.759"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.759"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.685"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.759"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.685"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.759"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.759"* %this, %"struct.thrust::detail::cons.759"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %t2, %"class.thrust::pointer.685"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.759"*, %"struct.thrust::detail::cons.759"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.759", %"struct.thrust::detail::cons.759"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.759", %"struct.thrust::detail::cons.759"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.760"* %tail, %"class.thrust::pointer.685"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.760"* %this, %"class.thrust::pointer.685"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.760"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.760"* %this, %"struct.thrust::detail::cons.760"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.685"* %t1, %"class.thrust::pointer.685"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.760"*, %"struct.thrust::detail::cons.760"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.760", %"struct.thrust::detail::cons.760"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.685"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.760", %"struct.thrust::detail::cons.760"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.761"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.757", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !452
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.762"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.757"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.766"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.763"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.765"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.750"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.746", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !454
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.751"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.746"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.755"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.752"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIssEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIssEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.754"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.685"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.687"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.687"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.687"* %this, %"class.thrust::iterator_facade.687"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.687"*, %"class.thrust::iterator_facade.687"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.685"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.687"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE(%"class.thrust::pointer.685"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.685"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.687"* %this1)
  ret %"class.thrust::pointer.685"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE(%"class.thrust::pointer.685"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.685"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.685"* %f, %"class.thrust::pointer.685"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.685"* %0 to %"class.thrust::iterator_adaptor.686"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl(%"class.thrust::iterator_adaptor.686"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.685"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.687"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.687"*, align 8
  store %"class.thrust::iterator_facade.687"* %this, %"class.thrust::iterator_facade.687"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.687"*, %"class.thrust::iterator_facade.687"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.687"* %this1 to %"class.thrust::pointer.685"*
  ret %"class.thrust::pointer.685"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl(%"class.thrust::iterator_adaptor.686"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.686"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.686"* %this, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.686"*, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %m_iterator, align 8, !tbaa !436
  %add.ptr = getelementptr inbounds %"class.thrust::tuple.688", %"class.thrust::tuple.688"* %1, i64 %0
  store %"class.thrust::tuple.688"* %add.ptr, %"class.thrust::tuple.688"** %m_iterator, align 8, !tbaa !436
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_(%"struct.thrust::detail::no_throw_allocator.678"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.678"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.678"* %a, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.678"*, %"struct.thrust::detail::no_throw_allocator.678"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.678"* %0 to %"class.thrust::detail::temporary_allocator.679"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.679"* %1)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_(%"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.682"* %f1, %"class.thrust::detail::normal_iterator.682"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %f2, %"class.thrust::detail::normal_iterator.682"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  store %"class.thrust::detail::normal_iterator.682"* %f1, %"class.thrust::detail::normal_iterator.682"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.682"* %f2, %"class.thrust::detail::normal_iterator.682"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.682"* %1 to %"class.thrust::iterator_adaptor.683"*
  %3 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.682"* %3 to %"class.thrust::iterator_adaptor.683"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.683"* %2, %"class.thrust::iterator_adaptor.683"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.683"* %this, %"class.thrust::iterator_adaptor.683"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.683"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.683"*, align 8
  store %"class.thrust::iterator_adaptor.683"* %this, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.683"* %y, %"class.thrust::iterator_adaptor.683"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.683"*, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.683"*, %"class.thrust::iterator_adaptor.683"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.685"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.683"* %0)
  %1 = bitcast %"class.thrust::pointer.685"* %call to %"class.thrust::iterator_facade.687"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.685"* %m_iterator to %"class.thrust::iterator_facade.687"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_(%"class.thrust::iterator_facade.687"* dereferenceable(1) %1, %"class.thrust::iterator_facade.687"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_(%"class.thrust::iterator_facade.687"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.687"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.687"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.687"*, align 8
  store %"class.thrust::iterator_facade.687"* %lhs, %"class.thrust::iterator_facade.687"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.687"* %rhs, %"class.thrust::iterator_facade.687"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.687"*, %"class.thrust::iterator_facade.687"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.687"* %0 to %"class.thrust::pointer.685"*
  %2 = load %"class.thrust::iterator_facade.687"*, %"class.thrust::iterator_facade.687"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.687"* %2 to %"class.thrust::pointer.685"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_(%"class.thrust::pointer.685"* dereferenceable(8) %1, %"class.thrust::pointer.685"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_(%"class.thrust::pointer.685"* dereferenceable(8) %f1, %"class.thrust::pointer.685"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.685"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.685"* %f1, %"class.thrust::pointer.685"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %f2, %"class.thrust::pointer.685"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.685"* dereferenceable(8) %0, %"class.thrust::pointer.685"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.685"* dereferenceable(8) %f1, %"class.thrust::pointer.685"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.685"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.685"*, align 8
  store %"class.thrust::pointer.685"* %f1, %"class.thrust::pointer.685"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.685"* %f2, %"class.thrust::pointer.685"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.685"* %1 to %"class.thrust::iterator_adaptor.686"*
  %3 = load %"class.thrust::pointer.685"*, %"class.thrust::pointer.685"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.685"* %3 to %"class.thrust::iterator_adaptor.686"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.686"* %2, %"class.thrust::iterator_adaptor.686"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.686"* %this, %"class.thrust::iterator_adaptor.686"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.686"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.686"*, align 8
  store %"class.thrust::iterator_adaptor.686"* %this, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.686"* %y, %"class.thrust::iterator_adaptor.686"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.686"*, %"class.thrust::iterator_adaptor.686"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.686"*, %"class.thrust::iterator_adaptor.686"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::tuple.688"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.686"* %0)
  %1 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %this1, i32 0, i32 0
  %2 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %m_iterator, align 8, !tbaa !436
  %sub.ptr.lhs.cast = ptrtoint %"class.thrust::tuple.688"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"class.thrust::tuple.688"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.688"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE(%"class.thrust::iterator_facade.684"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.682", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.684"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.682", align 8
  store %"class.thrust::iterator_facade.684"* %i, %"class.thrust::iterator_facade.684"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.682"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.684"*, %"class.thrust::iterator_facade.684"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.684"* %1 to %"class.thrust::detail::normal_iterator.682"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.682"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.682"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.682"* %tmp to %"class.thrust::iterator_facade.684"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.682"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl(%"class.thrust::iterator_facade.684"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.682"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.682"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.682"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.682", %"class.thrust::detail::normal_iterator.682"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.685", %"class.thrust::pointer.685"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.686", %"class.thrust::iterator_adaptor.686"* %coerce.dive2, i32 0, i32 0
  %10 = load %"class.thrust::tuple.688"*, %"class.thrust::tuple.688"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.688"* %10
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.682"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl(%"class.thrust::iterator_facade.684"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.684"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.684"* %this, %"class.thrust::iterator_facade.684"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.684"*, %"class.thrust::iterator_facade.684"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.682"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.684"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE(%"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.682"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.684"* %this1)
  ret %"class.thrust::detail::normal_iterator.682"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE(%"class.thrust::detail::normal_iterator.682"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.682"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.682"* %f, %"class.thrust::detail::normal_iterator.682"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.682"*, %"class.thrust::detail::normal_iterator.682"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.682"* %0 to %"class.thrust::iterator_adaptor.683"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl(%"class.thrust::iterator_adaptor.683"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.682"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.684"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.684"*, align 8
  store %"class.thrust::iterator_facade.684"* %this, %"class.thrust::iterator_facade.684"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.684"*, %"class.thrust::iterator_facade.684"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.684"* %this1 to %"class.thrust::detail::normal_iterator.682"*
  ret %"class.thrust::detail::normal_iterator.682"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl(%"class.thrust::iterator_adaptor.683"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.683"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.683"* %this, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.683"*, %"class.thrust::iterator_adaptor.683"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.683", %"class.thrust::iterator_adaptor.683"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.685"* %m_iterator to %"class.thrust::iterator_facade.687"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.685"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.687"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.600"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl(%"class.thrust::iterator_facade.601"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.601"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.601"* %this, %"class.thrust::iterator_facade.601"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.601"*, %"class.thrust::iterator_facade.601"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.600"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.601"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE(%"class.thrust::zip_iterator.600"* dereferenceable(16) %call, i64 %0)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.600"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.601"* %this1)
  ret %"class.thrust::zip_iterator.600"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE(%"class.thrust::zip_iterator.600"* dereferenceable(16) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.600"* %f, %"class.thrust::zip_iterator.600"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl(%"class.thrust::zip_iterator.600"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.600"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.601"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.601"*, align 8
  store %"class.thrust::iterator_facade.601"* %this, %"class.thrust::iterator_facade.601"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.601"*, %"class.thrust::iterator_facade.601"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.601"* %this1 to %"class.thrust::zip_iterator.600"*
  ret %"class.thrust::zip_iterator.600"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl(%"class.thrust::zip_iterator.600"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.600"* %this, %"class.thrust::zip_iterator.600"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_(%"class.thrust::tuple.602"* dereferenceable(16) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_(%"class.thrust::tuple.602"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.602"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.602"* %t, %"class.thrust::tuple.602"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.602"*, %"class.thrust::tuple.602"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.602"* %0 to %"struct.thrust::detail::cons.603"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.603"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.602"*, %"class.thrust::tuple.602"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.602"* %2 to %"struct.thrust::detail::cons.603"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.603"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.505"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.603"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.603"*, align 8
  store %"struct.thrust::detail::cons.603"* %this, %"struct.thrust::detail::cons.603"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.603"*, %"struct.thrust::detail::cons.603"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.603", %"struct.thrust::detail::cons.603"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.505"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.603"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.603"*, align 8
  store %"struct.thrust::detail::cons.603"* %this, %"struct.thrust::detail::cons.603"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.603"*, %"struct.thrust::detail::cons.603"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.603", %"struct.thrust::detail::cons.603"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_(%"class.thrust::zip_iterator.604"* %this, %"struct.thrust::pair.487"* %iterator_tuple.coerce0, i32* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.606", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %0 = bitcast %"class.thrust::tuple.606"* %iterator_tuple to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %iterator_tuple.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %iterator_tuple.coerce1, i32** %2, align 8
  store %"class.thrust::zip_iterator.604"* %this, %"class.thrust::zip_iterator.604"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.604"* %this1 to %"class.thrust::iterator_facade.605"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.606"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.606"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_(%"class.thrust::tuple.606"* %this, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.606"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.606"* %this, %"class.thrust::tuple.606"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.596"* %t0, %"class.thrust::detail::normal_iterator.596"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.606"*, %"class.thrust::tuple.606"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.606"* %this1 to %"struct.thrust::detail::cons.607"*
  %1 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.607"* %0, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.607"* %this, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.607"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.596"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.607"* %this, %"struct.thrust::detail::cons.607"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.596"* %t1, %"class.thrust::detail::normal_iterator.596"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.607"*, %"struct.thrust::detail::cons.607"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.607", %"struct.thrust::detail::cons.607"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.596"*, %"class.thrust::detail::normal_iterator.596"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.596"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.596"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.607", %"struct.thrust::detail::cons.607"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.604"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl(%"class.thrust::iterator_facade.605"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.605"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.605"* %this, %"class.thrust::iterator_facade.605"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.605"*, %"class.thrust::iterator_facade.605"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.604"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.605"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE(%"class.thrust::zip_iterator.604"* dereferenceable(16) %call, i64 %0)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.604"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.605"* %this1)
  ret %"class.thrust::zip_iterator.604"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE(%"class.thrust::zip_iterator.604"* dereferenceable(16) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.604"* %f, %"class.thrust::zip_iterator.604"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl(%"class.thrust::zip_iterator.604"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.604"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.605"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.605"*, align 8
  store %"class.thrust::iterator_facade.605"* %this, %"class.thrust::iterator_facade.605"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.605"*, %"class.thrust::iterator_facade.605"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.605"* %this1 to %"class.thrust::zip_iterator.604"*
  ret %"class.thrust::zip_iterator.604"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl(%"class.thrust::zip_iterator.604"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.604"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.604"* %this, %"class.thrust::zip_iterator.604"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.604"*, %"class.thrust::zip_iterator.604"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.604", %"class.thrust::zip_iterator.604"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_(%"class.thrust::tuple.606"* dereferenceable(16) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_(%"class.thrust::tuple.606"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.606"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.606"* %t, %"class.thrust::tuple.606"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.606"*, %"class.thrust::tuple.606"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.606"* %0 to %"struct.thrust::detail::cons.607"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.607"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.596"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.606"*, %"class.thrust::tuple.606"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.606"* %2 to %"struct.thrust::detail::cons.607"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.607"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.596"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.607"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.607"*, align 8
  store %"struct.thrust::detail::cons.607"* %this, %"struct.thrust::detail::cons.607"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.607"*, %"struct.thrust::detail::cons.607"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.607", %"struct.thrust::detail::cons.607"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.596"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.607"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.607"*, align 8
  store %"struct.thrust::detail::cons.607"* %this, %"struct.thrust::detail::cons.607"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.607"*, %"struct.thrust::detail::cons.607"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.607", %"struct.thrust::detail::cons.607"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_(%"class.thrust::zip_iterator.600"* %this, %"struct.thrust::pair.487"* %iterator_tuple.coerce0, i32* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.602", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.600"*, align 8
  %0 = bitcast %"class.thrust::tuple.602"* %iterator_tuple to { %"struct.thrust::pair.487"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %iterator_tuple.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i32* }, { %"struct.thrust::pair.487"*, i32* }* %0, i32 0, i32 1
  store i32* %iterator_tuple.coerce1, i32** %2, align 8
  store %"class.thrust::zip_iterator.600"* %this, %"class.thrust::zip_iterator.600"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.600"*, %"class.thrust::zip_iterator.600"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.600"* %this1 to %"class.thrust::iterator_facade.601"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.600", %"class.thrust::zip_iterator.600"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.602"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.602"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_(%"class.thrust::tuple.602"* %this, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.602"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.602"* %this, %"class.thrust::tuple.602"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.505"* %t0, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.602"*, %"class.thrust::tuple.602"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.602"* %this1 to %"struct.thrust::detail::cons.603"*
  %1 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.603"* %0, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.603"* %this, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.603"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.603"* %this, %"struct.thrust::detail::cons.603"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.505"* %t1, %"class.thrust::detail::normal_iterator.505"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.603"*, %"struct.thrust::detail::cons.603"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.603", %"struct.thrust::detail::cons.603"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.505"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.505"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.603", %"struct.thrust::detail::cons.603"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.591"* %this, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %first to %"class.thrust::iterator_adaptor.597"*
  %call = call dereferenceable(8) %"class.thrust::pointer.562"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.597"* %0)
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.596"* %last to %"class.thrust::iterator_facade.598"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.596"* %first to %"class.thrust::iterator_facade.598"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.598"* dereferenceable(1) %3, %"class.thrust::iterator_facade.598"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive10, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.487"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.591"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.596", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.591"*, align 8
  store %"class.thrust::detail::contiguous_storage.591"* %this, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.591"*, %"class.thrust::detail::contiguous_storage.591"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.591", %"class.thrust::detail::contiguous_storage.591"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.596"* %m_begin to %"class.thrust::iterator_facade.598"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.591"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.598"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.596", %"class.thrust::detail::normal_iterator.596"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.597", %"class.thrust::iterator_adaptor.597"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive8, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.562", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.562", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.562"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call5, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %first = alloca %"class.thrust::pointer.562", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.562"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive4, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call6, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive9, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %first = alloca %"class.thrust::pointer.562", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %call = call %"struct.thrust::pair.487"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  ret %"struct.thrust::pair.487"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.562", align 8
  %first = alloca %"class.thrust::pointer.562", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp5 = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp6 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce13 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp16 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp17 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp18 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp19 = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp20 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp25 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp28 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp31 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp32 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp33 = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp34 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp37 = alloca i32, align 4
  %agg.tmp.ensured40 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp41 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp46 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp47 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp48 = alloca %"class.thrust::pointer.562", align 8
  %agg.tmp49 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive2 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::pointer.562"* %agg.tmp5 to i8*
  %12 = bitcast %"class.thrust::pointer.562"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp6 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp5, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive7, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %call9 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"struct.thrust::pair.487"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call9, i64* %17, align 4
  %call10 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call11 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call11, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call12 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce13, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive14 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call12, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call12, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp16, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::pointer.562"* %agg.tmp19 to i8*
  %30 = bitcast %"class.thrust::pointer.562"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp20 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp19, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive21, i32 0, i32 0
  %34 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %call23 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp16, %"struct.thrust::pair.487"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp15 to i64*
  store i64 %call23, i64* %35, align 4
  %call24 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce13, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp15)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call26 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call26, i64* %ref.tmp25, align 8, !tbaa !13
  %call27 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp25)
  store i64 %call27, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call29 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call30 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp28, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call30)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp32 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::pointer.562"* %agg.tmp33 to i8*
  %45 = bitcast %"class.thrust::pointer.562"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp34 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp33, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive35, i32 0, i32 0
  %49 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive36, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp28, %"struct.thrust::pair.487"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call38 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call38, i32* %ref.tmp37, align 4, !tbaa !11
  %call39 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp37)
  store i32 %call39, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv42 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv43 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call44 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call44 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call45 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp41, i64 %conv42, i64 %conv43, i64 0, %struct.CUstream_st* %call45)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp47 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::pointer.562"* %agg.tmp48 to i8*
  %61 = bitcast %"class.thrust::pointer.562"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp49 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %agg.tmp48, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive50, i32 0, i32 0
  %65 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive51, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured40, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp41, %"struct.thrust::pair.487"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured40) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::pointer.562"* %first to %"class.thrust::iterator_facade.564"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call52 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.564"* dereferenceable(1) %66, i64 %67)
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive53, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call52, %"struct.thrust::pair.487"** %coerce.dive54, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %retval, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive55, i32 0, i32 0
  %72 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive56, align 8
  ret %"struct.thrust::pair.487"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.562", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.562"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENSB_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.562", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.562"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.562", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.562"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.487"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.562", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.562", %"class.thrust::pointer.562"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.563", %"class.thrust::iterator_adaptor.563"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %arg2.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.562"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.562"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.562"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.769", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %a2, %"class.thrust::pointer.562"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.769"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.562"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %agg.result, %"class.thrust::tuple.769"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.769"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.562"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %t1, %"class.thrust::pointer.562"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj(%"class.thrust::tuple.769"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.562"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %this, %"class.thrust::tuple.769"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"*, align 8
  %args.addr = alloca %"class.thrust::tuple.769"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.769"* %args, %"class.thrust::tuple.769"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.769"*, %"class.thrust::tuple.769"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.769"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.769"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj(%"class.thrust::tuple.769"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.562"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.769"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.769"* %this, %"class.thrust::tuple.769"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %t1, %"class.thrust::pointer.562"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.769"*, %"class.thrust::tuple.769"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.769"* %this1 to %"struct.thrust::detail::cons.770"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.770"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.562"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.770"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.562"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.770"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.770"* %this, %"struct.thrust::detail::cons.770"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %t2, %"class.thrust::pointer.562"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.770"*, %"struct.thrust::detail::cons.770"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.770", %"struct.thrust::detail::cons.770"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.770", %"struct.thrust::detail::cons.770"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.771"* %tail, %"class.thrust::pointer.562"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.771"* %this, %"class.thrust::pointer.562"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.771"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.771"* %this, %"struct.thrust::detail::cons.771"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.562"* %t1, %"class.thrust::pointer.562"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.771"*, %"struct.thrust::detail::cons.771"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.771", %"struct.thrust::detail::cons.771"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.771", %"struct.thrust::detail::cons.771"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEENSD_IiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.562"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.562"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.780", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %a2, %"class.thrust::pointer.562"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.780"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.562"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %agg.result, %"class.thrust::tuple.780"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.780"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.562"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %t1, %"class.thrust::pointer.562"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl(%"class.thrust::tuple.780"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.562"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %this, %"class.thrust::tuple.780"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"*, align 8
  %args.addr = alloca %"class.thrust::tuple.780"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.780"* %args, %"class.thrust::tuple.780"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.780"*, %"class.thrust::tuple.780"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.780"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.780"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIssEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl(%"class.thrust::tuple.780"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.562"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.780"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.780"* %this, %"class.thrust::tuple.780"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %t1, %"class.thrust::pointer.562"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.780"*, %"class.thrust::tuple.780"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.780"* %this1 to %"struct.thrust::detail::cons.781"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.781"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.562"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIssEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.781"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.562"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.781"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.781"* %this, %"struct.thrust::detail::cons.781"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.562"* %t2, %"class.thrust::pointer.562"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.781"*, %"struct.thrust::detail::cons.781"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.781", %"struct.thrust::detail::cons.781"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.781", %"struct.thrust::detail::cons.781"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.782"* %tail, %"class.thrust::pointer.562"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.782"* %this, %"class.thrust::pointer.562"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.782"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.562"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.782"* %this, %"struct.thrust::detail::cons.782"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.562"* %t1, %"class.thrust::pointer.562"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.782"*, %"struct.thrust::detail::cons.782"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.782", %"struct.thrust::detail::cons.782"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.562"*, %"class.thrust::pointer.562"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.562"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.562"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.782", %"struct.thrust::detail::cons.782"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.783"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.779", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !456
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.784"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.779"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.788"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.785"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.787"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.772"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.768", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !458
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.773"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.768"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.777"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.774"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIssEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.776"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.592"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.592"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.592"* %a, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.592"*, %"struct.thrust::detail::no_throw_allocator.592"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.592"* %0 to %"class.thrust::detail::temporary_allocator.593"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.593"* %1)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEE4sizeEv(%"class.thrust::detail::vector_base.489"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.489"*, align 8
  store %"class.thrust::detail::vector_base.489"* %this, %"class.thrust::detail::vector_base.489"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.489"*, %"class.thrust::detail::vector_base.489"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.489", %"class.thrust::detail::vector_base.489"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !373
  ret i64 %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_4pairIssEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE(%"class.thrust::detail::vector_base.479"* dereferenceable(32) %lhs, %"class.thrust::detail::vector_base.501"* dereferenceable(32) %rhs) #0 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  %rhs.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  store %"class.thrust::detail::vector_base.479"* %lhs, %"class.thrust::detail::vector_base.479"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::detail::vector_base.501"* %rhs, %"class.thrust::detail::vector_base.501"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %lhs.addr, align 8
  %call = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.479"* %0)
  %1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %rhs.addr, align 8
  %call1 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.501"* %1)
  %cmp = icmp eq i64 %call, %call1
  br i1 %cmp, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %2 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %lhs.addr, align 8
  %call2 = call %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %3 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %lhs.addr, align 8
  %call5 = call %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.479"* %3)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp4, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call5, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %4 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %rhs.addr, align 8
  %call9 = call %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.501"* %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp8, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call9, %"struct.thrust::pair.487"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive15, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp4, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive17, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp8, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive22, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %call24 = call zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIssEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_(%"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"* %6, %"struct.thrust::pair.487"* %7)
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %8 = phi i1 [ false, %entry ], [ %call24, %land.rhs ]
  ret i1 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIssEESaIS4_EEEEESsv(%"class.std::basic_string"* noalias sret %agg.result) #0 comdat {
entry:
  %call = call i8* @_ZNKSt9type_info4nameEv(%"class.std::type_info"* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust11host_vectorINS_4pairIssEESaIS2_EEE to %"class.std::type_info"*)) #5
  call void @_ZN8unittest8demangleEPKc(%"class.std::basic_string"* sret %agg.result, i8* %call)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.501"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !387
  ret i64 %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIssEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_(%"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp11 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %ref.tmp = alloca %"struct.thrust::detail::is_same", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp9 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp10 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::is_same"* %ref.tmp to %"struct.thrust::detail::integral_constant.197"*
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive12, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive14, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp10, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive19, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive20, align 8
  %call = call zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIssEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE(%"struct.thrust::pair.487"* %7, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.501"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.501", %"class.thrust::detail::vector_base.501"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.502"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive9, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIssEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE(%"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first1 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %0 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %from_system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %from_system2 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %to_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %rng1 = alloca %"class.thrust::detail::move_to_system.793", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp15 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %rng2 = alloca %"class.thrust::detail::move_to_system.798", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp38 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp44 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp51 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %1 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp9 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive10, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive12, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair.487"* %6, %"struct.thrust::pair.487"* %7)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %8) #5
  %9 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %9) #5
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %10) #5
  %11 = bitcast %"class.thrust::detail::move_to_system.793"* %rng1 to i8*
  call void @llvm.lifetime.start(i64 16, i8* %11) #5
  %12 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to %"struct.thrust::execution_policy.88"*
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to %"struct.thrust::execution_policy.88"*
  %14 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp14 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.555"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp15 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.555"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp14, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive16, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp15, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive18, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  call void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_(%"class.thrust::detail::move_to_system.793"* %rng1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %12, %"struct.thrust::execution_policy.88"* dereferenceable(1) %13, %"struct.thrust::pair.487"* %18, %"struct.thrust::pair.487"* %19)
  %20 = bitcast %"class.thrust::detail::move_to_system.798"* %rng2 to i8*
  call void @llvm.lifetime.start(i64 24, i8* %20) #5
  %21 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to %"struct.thrust::execution_policy.120"*
  %22 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to %"struct.thrust::execution_policy.88"*
  %23 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp20 to i8*
  %24 = bitcast %"class.thrust::detail::normal_iterator.790"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %23, i8* %24, i64 8, i32 8, i1 false)
  %25 = bitcast %"class.thrust::detail::normal_iterator.790"* %first2 to %"class.thrust::iterator_facade.792"*
  %26 = load i64, i64* %n, align 8, !tbaa !13
  %call22 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.792"* dereferenceable(1) %25, i64 %26)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp21, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive26, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call22, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp20, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive31, i32 0, i32 0
  %27 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp21, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive36, i32 0, i32 0
  %28 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive37, align 8
  call void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_(%"class.thrust::detail::move_to_system.798"* %rng2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %21, %"struct.thrust::execution_policy.88"* dereferenceable(1) %22, %"struct.thrust::pair.487"* %27, %"struct.thrust::pair.487"* %28)
  %29 = bitcast %"class.thrust::detail::move_to_system.793"* %rng1 to %"class.thrust::detail::tagged_iterator_range.794"*
  %call39 = invoke %"struct.thrust::pair.487"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEE5beginEv(%"class.thrust::detail::tagged_iterator_range.794"* %29)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive40 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp38, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive41, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive42, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call39, %"struct.thrust::pair.487"** %coerce.dive43, align 8
  %30 = bitcast %"class.thrust::detail::move_to_system.793"* %rng1 to %"class.thrust::detail::tagged_iterator_range.794"*
  %call46 = invoke %"struct.thrust::pair.487"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEE3endEv(%"class.thrust::detail::tagged_iterator_range.794"* %30)
          to label %invoke.cont45 unwind label %lpad

invoke.cont45:                                    ; preds = %invoke.cont
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp44, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive49, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call46, %"struct.thrust::pair.487"** %coerce.dive50, align 8
  %31 = bitcast %"class.thrust::detail::move_to_system.798"* %rng2 to %"class.thrust::detail::contiguous_storage.800"*
  %call53 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.800"* %31)
          to label %invoke.cont52 unwind label %lpad

invoke.cont52:                                    ; preds = %invoke.cont45
  %coerce.dive54 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp51, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive56, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call53, %"struct.thrust::pair.487"** %coerce.dive57, align 8
  %coerce.dive58 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp38, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive60, i32 0, i32 0
  %32 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive61, align 8
  %coerce.dive62 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp44, i32 0, i32 0
  %coerce.dive63 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive62, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive64, i32 0, i32 0
  %33 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive65, align 8
  %coerce.dive66 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp51, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive66, i32 0, i32 0
  %coerce.dive68 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive67, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive68, i32 0, i32 0
  %34 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive69, align 8
  %call71 = invoke zeroext i1 @_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_(%"struct.thrust::pair.487"* %32, %"struct.thrust::pair.487"* %33, %"struct.thrust::pair.487"* %34)
          to label %invoke.cont70 unwind label %lpad

invoke.cont70:                                    ; preds = %invoke.cont52
  call void bitcast (void (%"class.thrust::detail::temporary_array.799"*)* @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system3cpp6detail3tagEED2Ev to void (%"class.thrust::detail::move_to_system.798"*)*)(%"class.thrust::detail::move_to_system.798"* %rng2) #5
  %35 = bitcast %"class.thrust::detail::move_to_system.798"* %rng2 to i8*
  call void @llvm.lifetime.end(i64 24, i8* %35) #5
  %36 = bitcast %"class.thrust::detail::move_to_system.793"* %rng1 to i8*
  call void @llvm.lifetime.end(i64 16, i8* %36) #5
  %37 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %37) #5
  %38 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %38) #5
  %39 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %39) #5
  %40 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %40) #5
  ret i1 %call71

lpad:                                             ; preds = %invoke.cont52, %invoke.cont45, %invoke.cont, %entry
  %41 = landingpad { i8*, i32 }
          cleanup
  %42 = extractvalue { i8*, i32 } %41, 0
  store i8* %42, i8** %exn.slot, align 8
  %43 = extractvalue { i8*, i32 } %41, 1
  store i32 %43, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::temporary_array.799"*)* @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system3cpp6detail3tagEED2Ev to void (%"class.thrust::detail::move_to_system.798"*)*)(%"class.thrust::detail::move_to_system.798"* %rng2) #5
  %44 = bitcast %"class.thrust::detail::move_to_system.798"* %rng2 to i8*
  call void @llvm.lifetime.end(i64 24, i8* %44) #5
  %45 = bitcast %"class.thrust::detail::move_to_system.793"* %rng1 to i8*
  call void @llvm.lifetime.end(i64 16, i8* %45) #5
  %46 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %46) #5
  %47 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %47) #5
  %48 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %48) #5
  %49 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %49) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val72 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val72
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_(%"class.thrust::detail::move_to_system.793"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"struct.thrust::execution_policy.88"* dereferenceable(1) %to_system, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::move_to_system.793"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %to_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store %"class.thrust::detail::move_to_system.793"* %this, %"class.thrust::detail::move_to_system.793"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %to_system, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::move_to_system.793"*, %"class.thrust::detail::move_to_system.793"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::move_to_system.793"* %this4 to %"class.thrust::detail::tagged_iterator_range.794"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8
  %2 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive8, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_(%"class.thrust::detail::tagged_iterator_range.794"* %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::pair.487"* %7, %"struct.thrust::pair.487"* %8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.792"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.792"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  store %"class.thrust::iterator_facade.792"* %i, %"class.thrust::iterator_facade.792"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.790"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.792"*, %"class.thrust::iterator_facade.792"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.792"* %1 to %"class.thrust::detail::normal_iterator.790"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %tmp to %"class.thrust::iterator_facade.792"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.790"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl(%"class.thrust::iterator_facade.792"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.790"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.790"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.790"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_(%"class.thrust::detail::move_to_system.798"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::execution_policy.88"* dereferenceable(1) %to_system, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %this.addr = alloca %"class.thrust::detail::move_to_system.798"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %to_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  store %"class.thrust::detail::move_to_system.798"* %this, %"class.thrust::detail::move_to_system.798"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %to_system, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8, !tbaa !7
  %this10 = load %"class.thrust::detail::move_to_system.798"*, %"class.thrust::detail::move_to_system.798"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::move_to_system.798"* %this10 to %"class.thrust::detail::temporary_array.799"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp11 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive15, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp11, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive20, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_(%"class.thrust::detail::temporary_array.799"* %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, %"struct.thrust::pair.487"* %7, %"struct.thrust::pair.487"* %8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_(%"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::detail::tagged_iterator.795"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.805"* %agg.tmp13 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.805"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive16, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp12, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive20, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp13, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive24, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  %call26 = call zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4, %"struct.thrust::pair.487"* %11, %"struct.thrust::pair.487"* %12, %"struct.thrust::pair.487"* %13)
  %14 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %14) #5
  %15 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %15) #5
  ret i1 %call26
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEE5beginEv(%"class.thrust::detail::tagged_iterator_range.794"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range.794"*, align 8
  store %"class.thrust::detail::tagged_iterator_range.794"* %this, %"class.thrust::detail::tagged_iterator_range.794"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_iterator_range.794"*, %"class.thrust::detail::tagged_iterator_range.794"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.794", %"class.thrust::detail::tagged_iterator_range.794"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::tagged_iterator.795"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEE3endEv(%"class.thrust::detail::tagged_iterator_range.794"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range.794"*, align 8
  store %"class.thrust::detail::tagged_iterator_range.794"* %this, %"class.thrust::detail::tagged_iterator_range.794"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_iterator_range.794"*, %"class.thrust::detail::tagged_iterator_range.794"** %this.addr, align 8
  %m_end = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.794", %"class.thrust::detail::tagged_iterator_range.794"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::tagged_iterator.795"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %m_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.800"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.805"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.805"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system3cpp6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.799"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.799"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  store %"class.thrust::detail::temporary_array.799"* %this, %"class.thrust::detail::temporary_array.799"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.799"*, %"class.thrust::detail::temporary_array.799"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.799"* %this1 to %"class.thrust::detail::contiguous_storage.800"*
  %1 = bitcast %"class.thrust::detail::temporary_array.799"* %this1 to %"class.thrust::detail::contiguous_storage.800"*
  %call = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.800"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.799"* %this1 to %"class.thrust::detail::contiguous_storage.800"*
  %call7 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.800"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call7, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive14, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive18, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.800"* %0, %"struct.thrust::pair.487"* %3, %"struct.thrust::pair.487"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.799"* %this1 to %"class.thrust::detail::contiguous_storage.800"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.800"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.799"* %this1 to %"class.thrust::detail::contiguous_storage.800"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.800"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_(%"class.thrust::detail::tagged_iterator_range.794"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1), %"struct.thrust::execution_policy.88"* dereferenceable(1), %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range.794"*, align 8
  %.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %.addr4 = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store %"class.thrust::detail::tagged_iterator_range.794"* %this, %"class.thrust::detail::tagged_iterator_range.794"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %0, %"struct.thrust::execution_policy.88"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %1, %"struct.thrust::execution_policy.88"** %.addr4, align 8, !tbaa !7
  %this5 = load %"class.thrust::detail::tagged_iterator_range.794"*, %"class.thrust::detail::tagged_iterator_range.794"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.794", %"class.thrust::detail::tagged_iterator_range.794"* %this5, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  call void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator.795"* %m_begin, %"struct.thrust::pair.487"* %4)
  %m_end = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.794", %"class.thrust::detail::tagged_iterator_range.794"* %this5, i32 0, i32 1
  %5 = bitcast %"class.thrust::detail::normal_iterator.555"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.555"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %agg.tmp8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive9, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator.795"* %m_end, %"struct.thrust::pair.487"* %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator.795"* %this, %"struct.thrust::pair.487"* %x.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %x = alloca %"class.thrust::detail::normal_iterator.555", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %x.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"class.thrust::detail::tagged_iterator.795"* %this, %"class.thrust::detail::tagged_iterator.795"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tagged_iterator.795"* %this2 to %"class.thrust::iterator_adaptor.796"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_(%"class.thrust::iterator_adaptor.796"* %0, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %x)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_(%"class.thrust::iterator_adaptor.796"* %this, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.796"*, align 8
  %iter.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  store %"class.thrust::iterator_adaptor.796"* %this, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.555"* %iter, %"class.thrust::detail::normal_iterator.555"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.796"*, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.796"* %this1 to %"class.thrust::iterator_facade.797"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.790"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl(%"class.thrust::iterator_facade.792"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.792"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.792"* %this, %"class.thrust::iterator_facade.792"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.792"*, %"class.thrust::iterator_facade.792"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.790"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.792"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEEvRT_NSA_15difference_typeE(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.790"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.792"* %this1)
  ret %"class.thrust::detail::normal_iterator.790"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEEvRT_NSA_15difference_typeE(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.790"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.790"* %f, %"class.thrust::detail::normal_iterator.790"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.790"*, %"class.thrust::detail::normal_iterator.790"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.790"* %0 to %"class.thrust::iterator_adaptor.791"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl(%"class.thrust::iterator_adaptor.791"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.790"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.792"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.792"*, align 8
  store %"class.thrust::iterator_facade.792"* %this, %"class.thrust::iterator_facade.792"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.792"*, %"class.thrust::iterator_facade.792"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.792"* %this1 to %"class.thrust::detail::normal_iterator.790"*
  ret %"class.thrust::detail::normal_iterator.790"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl(%"class.thrust::iterator_adaptor.791"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.791"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.791"* %this, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.791"*, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.558"* %m_iterator to %"class.thrust::iterator_facade.561"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl(%"class.thrust::iterator_facade.561"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl(%"class.thrust::iterator_facade.561"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.561"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.561"* %this, %"class.thrust::iterator_facade.561"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.561"*, %"class.thrust::iterator_facade.561"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.561"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIssEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::device_ptr.558"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.561"* %this1)
  ret %"class.thrust::device_ptr.558"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIssEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::device_ptr.558"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.558"* %f, %"class.thrust::device_ptr.558"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.558"* %0 to %"class.thrust::iterator_adaptor.560"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl(%"class.thrust::iterator_adaptor.560"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.561"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.561"*, align 8
  store %"class.thrust::iterator_facade.561"* %this, %"class.thrust::iterator_facade.561"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.561"*, %"class.thrust::iterator_facade.561"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.561"* %this1 to %"class.thrust::device_ptr.558"*
  ret %"class.thrust::device_ptr.558"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl(%"class.thrust::iterator_adaptor.560"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.560"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.560"* %this, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.560"*, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !399
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %1, i64 %0
  store %"struct.thrust::pair.487"* %add.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !399
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIssEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_(%"class.thrust::detail::temporary_array.799"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system, %"struct.thrust::execution_policy.120"* dereferenceable(1) %input_system, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_array.799"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %input_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.801", align 8
  %ref.tmp11 = alloca %"class.thrust::detail::temporary_allocator.802", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp28 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp29 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp30 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  store %"class.thrust::detail::temporary_array.799"* %this, %"class.thrust::detail::temporary_array.799"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %system, %"struct.thrust::execution_policy.88"** %system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %input_system, %"struct.thrust::execution_policy.120"** %input_system.addr, align 8, !tbaa !7
  %this10 = load %"class.thrust::detail::temporary_array.799"*, %"class.thrust::detail::temporary_array.799"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.799"* %this10 to %"class.thrust::detail::contiguous_storage.800"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.802"* %ref.tmp11, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.801"* %ref.tmp, %"class.thrust::detail::temporary_allocator.802"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_(%"class.thrust::detail::contiguous_storage.800"* %0, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont13 unwind label %lpad12

invoke.cont13:                                    ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.803"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.801"*)*)(%"struct.thrust::detail::no_throw_allocator.801"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.803"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.802"*)*)(%"class.thrust::detail::temporary_allocator.802"* %ref.tmp11) #5
  %2 = bitcast %"class.thrust::detail::temporary_array.799"* %this10 to %"class.thrust::detail::contiguous_storage.800"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp14 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive18, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp14, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive23, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive24, align 8
  %call = invoke i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(%"struct.thrust::pair.487"* %7, %"struct.thrust::pair.487"* %8)
          to label %invoke.cont26 unwind label %lpad25

invoke.cont26:                                    ; preds = %invoke.cont13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.800"* %2, i64 %call)
          to label %invoke.cont27 unwind label %lpad25

invoke.cont27:                                    ; preds = %invoke.cont26
  %9 = bitcast %"class.thrust::detail::temporary_array.799"* %this10 to %"class.thrust::detail::contiguous_storage.800"*
  %10 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %input_system.addr, align 8
  %11 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp28 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp29 to i8*
  %14 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 8, i32 8, i1 false)
  %15 = bitcast %"class.thrust::detail::temporary_array.799"* %this10 to %"class.thrust::detail::contiguous_storage.800"*
  %call32 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.800"* %15)
          to label %invoke.cont31 unwind label %lpad25

invoke.cont31:                                    ; preds = %invoke.cont27
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp30, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive35, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call32, %"struct.thrust::pair.487"** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp28, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive40, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive41, align 8
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp29, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive45, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive46, align 8
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp30, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive49, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive50, align 8
  %call52 = invoke %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_(%"class.thrust::detail::contiguous_storage.800"* %9, %"struct.thrust::execution_policy.120"* dereferenceable(1) %10, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %17, %"struct.thrust::pair.487"* %18)
          to label %invoke.cont51 unwind label %lpad25

invoke.cont51:                                    ; preds = %invoke.cont31
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %coerce, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive55, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call52, %"struct.thrust::pair.487"** %coerce.dive56, align 8
  ret void

lpad:                                             ; preds = %entry
  %19 = landingpad { i8*, i32 }
          cleanup
  %20 = extractvalue { i8*, i32 } %19, 0
  store i8* %20, i8** %exn.slot, align 8
  %21 = extractvalue { i8*, i32 } %19, 1
  store i32 %21, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad12:                                           ; preds = %invoke.cont
  %22 = landingpad { i8*, i32 }
          cleanup
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.803"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.801"*)*)(%"struct.thrust::detail::no_throw_allocator.801"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad12, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.803"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.802"*)*)(%"class.thrust::detail::temporary_allocator.802"* %ref.tmp11) #5
  br label %eh.resume

lpad25:                                           ; preds = %invoke.cont31, %invoke.cont27, %invoke.cont26, %invoke.cont13
  %25 = landingpad { i8*, i32 }
          cleanup
  %26 = extractvalue { i8*, i32 } %25, 0
  store i8* %26, i8** %exn.slot, align 8
  %27 = extractvalue { i8*, i32 } %25, 1
  store i32 %27, i32* %ehselector.slot, align 4
  %28 = bitcast %"class.thrust::detail::temporary_array.799"* %this10 to %"class.thrust::detail::contiguous_storage.800"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.800"* %28) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad25, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val58 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val58
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.802"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.802"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.802"* %this, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %system, %"struct.thrust::execution_policy.88"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.802"*, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.802"* %this1 to %"class.thrust::detail::tagged_allocator.803"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.803"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.802", %"class.thrust::detail::temporary_allocator.802"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cpp::detail::tag"* %call, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.802"* %this1 to %"class.thrust::detail::tagged_allocator.803"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.803"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.801"* %this, %"class.thrust::detail::temporary_allocator.802"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.802"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %this, %"struct.thrust::detail::no_throw_allocator.801"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.802"* %other, %"class.thrust::detail::temporary_allocator.802"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.801"* %this1 to %"class.thrust::detail::temporary_allocator.802"*
  %1 = load %"class.thrust::detail::temporary_allocator.802"*, %"class.thrust::detail::temporary_allocator.802"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.802"* %0, %"class.thrust::detail::temporary_allocator.802"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_(%"class.thrust::detail::contiguous_storage.800"* %this, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.801"* %alloc, %"struct.thrust::detail::no_throw_allocator.801"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.801"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.808"* %agg.tmp, %"struct.thrust::pair.487"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.805"* %m_begin, %"struct.thrust::pair.487"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !460
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.803"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.801"*)*)(%"struct.thrust::detail::no_throw_allocator.801"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.803"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.803"*, align 8
  store %"class.thrust::detail::tagged_allocator.803"* %this, %"class.thrust::detail::tagged_allocator.803"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.803"*, %"class.thrust::detail::tagged_allocator.803"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.800"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.808", align 8
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.805"* %ref.tmp, %"struct.thrust::pair.487"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.805"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.805"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !460
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.808"* %agg.tmp7, %"struct.thrust::pair.487"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive8, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.805"* %ref.tmp6, %"struct.thrust::pair.487"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.805"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.805"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !460
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(%"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive14, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp10, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive19, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive20, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_(%"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_(%"class.thrust::detail::contiguous_storage.800"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp15 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp16 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp17 = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive13, align 8
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  %this14 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this14, i32 0, i32 0
  %1 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp15 to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp16 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.805"* %result to %"class.thrust::iterator_adaptor.806"*
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.806"* %5)
  %6 = bitcast %"class.thrust::pointer.808"* %agg.tmp17 to i8*
  %7 = bitcast %"class.thrust::pointer.808"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp15, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive21, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp16, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive26, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp17, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive28, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive29, align 8
  %call30 = call %"struct.thrust::pair.487"* @_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call30, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive33, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive34, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.805"* %retval, %"struct.thrust::pair.487"* %11)
  %coerce.dive35 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %retval, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive37, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive38, align 8
  ret %"struct.thrust::pair.487"* %12
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.800"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.800"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.803"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.801"*)*)(%"struct.thrust::detail::no_throw_allocator.801"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.803"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.801"*)*)(%"struct.thrust::detail::no_throw_allocator.801"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.803"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.803"*, align 8
  store %"class.thrust::detail::tagged_allocator.803"* %this, %"class.thrust::detail::tagged_allocator.803"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.803"*, %"class.thrust::detail::tagged_allocator.803"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.802"* %this, %"class.thrust::detail::temporary_allocator.802"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.802"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.802"*, align 8
  store %"class.thrust::detail::temporary_allocator.802"* %this, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.802"* %other, %"class.thrust::detail::temporary_allocator.802"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.802"*, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.802"* %this1 to %"class.thrust::detail::tagged_allocator.803"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIssEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.803"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.802", %"class.thrust::detail::temporary_allocator.802"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.802"*, %"class.thrust::detail::temporary_allocator.802"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.802", %"class.thrust::detail::temporary_allocator.802"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cpp::detail::tag"* %ref, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.801"* %this, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %this, %"struct.thrust::detail::no_throw_allocator.801"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.801"* %0, %"struct.thrust::detail::no_throw_allocator.801"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.801"* %this1 to %"class.thrust::detail::temporary_allocator.802"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.801"* %2 to %"class.thrust::detail::temporary_allocator.802"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.802"* %1, %"class.thrust::detail::temporary_allocator.802"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.808"* %this, %"struct.thrust::pair.487"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.808"*, align 8
  %other.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"class.thrust::pointer.808"* %this, %"class.thrust::pointer.808"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %other, %"struct.thrust::pair.487"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.808"* %this1 to %"class.thrust::iterator_adaptor.809"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.809"* %0, %"struct.thrust::pair.487"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.805"* %this, %"struct.thrust::pair.487"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.805"* %this, %"class.thrust::detail::normal_iterator.805"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.805"* %this2 to %"class.thrust::iterator_adaptor.806"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.806"* %0, %"class.thrust::pointer.808"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.809"* %this, %"struct.thrust::pair.487"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.809"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.487"**, align 8
  store %"class.thrust::iterator_adaptor.809"* %this, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"** %iter, %"struct.thrust::pair.487"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.809"*, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.809"* %this1 to %"class.thrust::iterator_facade.810"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"**, %"struct.thrust::pair.487"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !464
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::pointer.808"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.806"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.808"*, align 8
  store %"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.808"* %iter, %"class.thrust::pointer.808"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.806"*, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.806"* %this1 to %"class.thrust::iterator_facade.807"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.808"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.808"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.801"* %0 to %"class.thrust::detail::temporary_allocator.802"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.802"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.802"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.802"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.811", align 8
  %ref.tmp = alloca %"struct.thrust::pair.812", align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.802"* %this, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.802"*, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.811"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.802"* %this1)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIssEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.812"* %ref.tmp to { %"struct.thrust::pair.487"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 0
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.811"* %result, %"struct.thrust::pair.812"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.811", %"struct.thrust::pair.811"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !466
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.811", %"struct.thrust::pair.811"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.808"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  %13 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.802"* %this1, %"struct.thrust::pair.487"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.811"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.811", %"struct.thrust::pair.811"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.808"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.808"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.811"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive11, i32 0, i32 0
  %25 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.487"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIssEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.812", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.812", align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIssEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.812"* %agg.tmp to { %"struct.thrust::pair.487"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 0
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.812"* %agg.tmp to { %"struct.thrust::pair.487"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIssEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.487"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.812"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %14 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call3, 0
  store %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"** %14, align 8
  %16 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.812"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %19 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %18, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.802"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.802"*, align 8
  store %"class.thrust::detail::temporary_allocator.802"* %this, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.802"*, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.802", %"class.thrust::detail::temporary_allocator.802"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cpp::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.811"* %this, %"struct.thrust::pair.812"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.811"*, align 8
  %p.addr = alloca %"struct.thrust::pair.812"*, align 8
  store %"struct.thrust::pair.811"* %this, %"struct.thrust::pair.811"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.812"* %p, %"struct.thrust::pair.812"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.811"*, %"struct.thrust::pair.811"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.811", %"struct.thrust::pair.811"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.812"*, %"struct.thrust::pair.812"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.812", %"struct.thrust::pair.812"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.808"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.811", %"struct.thrust::pair.811"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.812"*, %"struct.thrust::pair.812"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.812", %"struct.thrust::pair.812"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !469
  store i64 %4, i64* %second, align 8, !tbaa !466
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.802"* %this, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.802"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.802"* %this, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.802"*, %"class.thrust::detail::temporary_allocator.802"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.802"* %this2)
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIssEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.487"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.812", align 8
  %p = alloca %"struct.thrust::pair.812", align 8
  %ptr = alloca %"class.thrust::pointer.808", align 8
  %0 = bitcast %"struct.thrust::pair.812"* %p to { %"struct.thrust::pair.487"*, i64 }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.808"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.812", %"struct.thrust::pair.812"* %p, i32 0, i32 0
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.808"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.808"* %ptr, %"struct.thrust::pair.487"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.812", %"struct.thrust::pair.812"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.812"* %retval, %"class.thrust::pointer.808"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.808"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.812"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %6 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %5, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIssEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.812", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.808"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6mallocINS_4pairIssEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.808"* %ptr)
  %tobool = icmp ne %"struct.thrust::pair.487"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.808"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %call5 = call { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.487"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.812"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call5, 0
  store %"struct.thrust::pair.487"* %10, %"struct.thrust::pair.487"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair.487"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.808"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.812"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %15 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %14, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %15
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.808"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.808"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  store %"class.thrust::pointer.808"* %ptr, %"class.thrust::pointer.808"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.487"* %3)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.812"* %this, %"class.thrust::pointer.808"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.812"*, align 8
  %x.addr = alloca %"class.thrust::pointer.808"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.812"* %this, %"struct.thrust::pair.812"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.808"* %x, %"class.thrust::pointer.808"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.812"*, %"struct.thrust::pair.812"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.812", %"struct.thrust::pair.812"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.812", %"struct.thrust::pair.812"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !469
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.487"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.808"* %ptr)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.808"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.808"*, align 8
  store %"class.thrust::pointer.808"* %this, %"class.thrust::pointer.808"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.808"* %this1 to %"class.thrust::iterator_adaptor.809"*
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.809"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.809"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.809"*, align 8
  store %"class.thrust::iterator_adaptor.809"* %this, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.809"*, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.487"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6mallocINS_4pairIssEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.808", align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::pair.487"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIssEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.808"* dereferenceable(8) %ref.tmp)
  store %"struct.thrust::pair.487"* %call4, %"struct.thrust::pair.487"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.808"* %retval, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"struct.thrust::pair.487"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive5, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.487"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.487"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.812", align 8
  %x = alloca %"class.thrust::pointer.808", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %x.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.812"* %retval, %"class.thrust::pointer.808"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.812"* %retval to { %"struct.thrust::pair.487"*, i64 }*
  %1 = load { %"struct.thrust::pair.487"*, i64 }, { %"struct.thrust::pair.487"*, i64 }* %0, align 8
  ret { %"struct.thrust::pair.487"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIssEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.447", align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.447"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 4, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system3cpp6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.447", %"class.thrust::pointer.447"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.448", %"class.thrust::iterator_adaptor.448"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.447"* %void_ptr)
  %4 = bitcast i8* %call2 to %"struct.thrust::pair.487"*
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.808"* %retval, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"class.thrust::pointer.447"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.487"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.808", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.808"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.487"* %ptr.coerce) #8 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.808", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.808"* dereferenceable(8) %ptr)
  %1 = bitcast %"struct.thrust::pair.487"* %call to i8*
  call void @free(i8* %1) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_(%"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive15, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp10, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive20, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE(%"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE(%"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to %"class.thrust::iterator_facade.792"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to %"class.thrust::iterator_facade.792"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.792"* dereferenceable(1) %1, %"class.thrust::iterator_facade.792"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.792"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.792"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.792"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.792"*, align 8
  store %"class.thrust::iterator_facade.792"* %lhs, %"class.thrust::iterator_facade.792"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.792"* %rhs, %"class.thrust::iterator_facade.792"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.792"*, %"class.thrust::iterator_facade.792"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.792"* %0 to %"class.thrust::detail::normal_iterator.790"*
  %2 = load %"class.thrust::iterator_facade.792"*, %"class.thrust::iterator_facade.792"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.792"* %2 to %"class.thrust::detail::normal_iterator.790"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.790"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.790"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.790"* %f1, %"class.thrust::detail::normal_iterator.790"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.790"* %f2, %"class.thrust::detail::normal_iterator.790"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.790"*, %"class.thrust::detail::normal_iterator.790"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.790"*, %"class.thrust::detail::normal_iterator.790"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.790"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.790"*, align 8
  store %"class.thrust::detail::normal_iterator.790"* %f1, %"class.thrust::detail::normal_iterator.790"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.790"* %f2, %"class.thrust::detail::normal_iterator.790"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.790"*, %"class.thrust::detail::normal_iterator.790"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.790"* %1 to %"class.thrust::iterator_adaptor.791"*
  %3 = load %"class.thrust::detail::normal_iterator.790"*, %"class.thrust::detail::normal_iterator.790"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %3 to %"class.thrust::iterator_adaptor.791"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.791"* %2, %"class.thrust::iterator_adaptor.791"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.791"* %this, %"class.thrust::iterator_adaptor.791"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.791"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.791"*, align 8
  store %"class.thrust::iterator_adaptor.791"* %this, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.791"* %y, %"class.thrust::iterator_adaptor.791"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.791"*, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.791"*, %"class.thrust::iterator_adaptor.791"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv(%"class.thrust::iterator_adaptor.791"* %0)
  %1 = bitcast %"class.thrust::device_ptr.558"* %call to %"class.thrust::iterator_facade.561"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.558"* %m_iterator to %"class.thrust::iterator_facade.561"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.561"* dereferenceable(1) %1, %"class.thrust::iterator_facade.561"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.561"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.561"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.561"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.561"*, align 8
  store %"class.thrust::iterator_facade.561"* %lhs, %"class.thrust::iterator_facade.561"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.561"* %rhs, %"class.thrust::iterator_facade.561"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.561"*, %"class.thrust::iterator_facade.561"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.561"* %0 to %"class.thrust::device_ptr.558"*
  %2 = load %"class.thrust::iterator_facade.561"*, %"class.thrust::iterator_facade.561"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.561"* %2 to %"class.thrust::device_ptr.558"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIssEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::device_ptr.558"* dereferenceable(8) %1, %"class.thrust::device_ptr.558"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv(%"class.thrust::iterator_adaptor.791"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.791"*, align 8
  store %"class.thrust::iterator_adaptor.791"* %this, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.791"*, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.558"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIssEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::device_ptr.558"* dereferenceable(8) %f1, %"class.thrust::device_ptr.558"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.558"* %f1, %"class.thrust::device_ptr.558"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.558"* %f2, %"class.thrust::device_ptr.558"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIssEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.558"* dereferenceable(8) %0, %"class.thrust::device_ptr.558"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIssEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.558"* dereferenceable(8) %f1, %"class.thrust::device_ptr.558"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  store %"class.thrust::device_ptr.558"* %f1, %"class.thrust::device_ptr.558"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.558"* %f2, %"class.thrust::device_ptr.558"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.558"* %1 to %"class.thrust::iterator_adaptor.560"*
  %3 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.558"* %3 to %"class.thrust::iterator_adaptor.560"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.560"* %2, %"class.thrust::iterator_adaptor.560"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.560"* %this, %"class.thrust::iterator_adaptor.560"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.560"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.560"*, align 8
  store %"class.thrust::iterator_adaptor.560"* %this, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.560"* %y, %"class.thrust::iterator_adaptor.560"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.560"*, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.560"*, %"class.thrust::iterator_adaptor.560"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.560"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !399
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.487"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.487"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.560"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.560"*, align 8
  store %"class.thrust::iterator_adaptor.560"* %this, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.560"*, %"class.thrust::iterator_adaptor.560"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.487"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp13 = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %1 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::pointer.808"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp13, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive24, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %1, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive26, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive28, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive29, align 8
  ret %"struct.thrust::pair.487"* %11
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.808"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.806"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.806"*, align 8
  store %"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.806"*, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.808"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp13 = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %1 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %1)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::pointer.808"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive17, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive22, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp13, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive24, i32 0, i32 0
  %11 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  %call26 = call %"struct.thrust::pair.487"* @_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10, %"struct.thrust::pair.487"* %11)
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive27, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call26, %"struct.thrust::pair.487"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive29, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive30, align 8
  ret %"struct.thrust::pair.487"* %12
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp16 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp17 = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %system1, %"struct.thrust::execution_policy.120"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call12 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %3 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.88"* %3 to %"struct.thrust::detail::execution_policy_base.85"*
  %call13 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4)
  %call14 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call13)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call14 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call15 = call { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call15, 0
  store %"struct.thrust::execution_policy.120"* %8, %"struct.thrust::execution_policy.120"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call15, 1
  store %"struct.thrust::execution_policy.88"* %10, %"struct.thrust::execution_policy.88"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.229"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp16 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::pointer.808"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive21, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp16, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive26, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp17, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive28, i32 0, i32 0
  %20 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive29, align 8
  %call30 = call %"struct.thrust::pair.487"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %11, %"struct.thrust::pair.487"* %18, %"struct.thrust::pair.487"* %19, %"struct.thrust::pair.487"* %20)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call30, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive33, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive34, align 8
  ret %"struct.thrust::pair.487"* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.229"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp15 = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.229"* %exec, %"struct.thrust::detail::execution_policy_base.229"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.229"*, %"struct.thrust::detail::execution_policy_base.229"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.229"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %0)
  %call12 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %call12 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp13 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp14 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::pointer.808"* %agg.tmp15 to i8*
  %8 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp13, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive19, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive20, align 8
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp14, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive24, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp15, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive26, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %call28 = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %11, %"struct.thrust::execution_policy.88"* %13, %"struct.thrust::pair.487"* %14, %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"* %16)
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive29, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call28, %"struct.thrust::pair.487"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive31, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  ret %"struct.thrust::pair.487"* %17
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.808", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.790"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.808"* %agg.tmp14 to i8*
  %10 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp12, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive18, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive23, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive24, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp14, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive25, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %17, %"struct.thrust::pair.487"* %18)
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive27, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive29, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive30, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp15 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp16 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.790"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.790"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.808"* %agg.tmp14 to i8*
  %10 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive20, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp13, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive25, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp14, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive27, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive28, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %17, %"struct.thrust::pair.487"* %18)
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive29, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive31, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp15 = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp16 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp17 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp18 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp13 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.790"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp14 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.790"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.808"* %agg.tmp15 to i8*
  %10 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp13, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive22, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive27, i32 0, i32 0
  %17 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp15, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive29, i32 0, i32 0
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive30, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %17, %"struct.thrust::pair.487"* %18)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive33, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive34, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.808", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %begin.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %end.coerce, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.790"* %end to %"class.thrust::iterator_facade.792"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.790"* %begin to %"class.thrust::iterator_facade.792"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.792"* dereferenceable(1) %7, %"class.thrust::iterator_facade.792"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.790"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.790"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::pointer.808"* %agg.tmp14 to i8*
  %13 = bitcast %"class.thrust::pointer.808"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive18, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp14, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive20, i32 0, i32 0
  %15 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %14, i64 %11, %"struct.thrust::pair.487"* %15)
  %16 = bitcast %"class.thrust::pointer.808"* %result to %"class.thrust::iterator_facade.810"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call22 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.810"* dereferenceable(1) %16, i64 %17)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive23, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call22, %"struct.thrust::pair.487"** %coerce.dive24, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive25, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  ret %"struct.thrust::pair.487"* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.487"* %first.coerce, i64 %n, %"struct.thrust::pair.487"* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %result = alloca %"class.thrust::pointer.808", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce = alloca %"class.thrust::reference.813", align 8
  %src = alloca i8*, align 8
  %ref.tmp14 = alloca %"class.thrust::device_ptr.558", align 8
  %coerce16 = alloca %"class.thrust::device_reference.814", align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %result, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %result.coerce, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::pointer.808"* %result to %"class.thrust::iterator_facade.810"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.810"* %1)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %coerce, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  %call10 = call %"struct.thrust::pair.487"* @_ZNK6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.813"* %coerce)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive11, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call10, %"struct.thrust::pair.487"** %coerce.dive12, align 8
  %call13 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.808"* dereferenceable(8) %ref.tmp)
  %2 = bitcast %"struct.thrust::pair.487"* %call13 to i8*
  store i8* %2, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = bitcast %"class.thrust::detail::normal_iterator.790"* %first to %"class.thrust::iterator_facade.792"*
  %call15 = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv(%"class.thrust::iterator_facade.792"* %4)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %coerce16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call15, %"struct.thrust::pair.487"** %coerce.dive21, align 8
  %5 = bitcast %"class.thrust::device_reference.814"* %coerce16 to %"class.thrust::reference.815"*
  %call22 = call %"struct.thrust::pair.487"* @_ZNK6thrust9referenceIKNS_4pairIssEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv(%"class.thrust::reference.815"* %5)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %ref.tmp14, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive24, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call22, %"struct.thrust::pair.487"** %coerce.dive25, align 8
  %call26 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIssEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_(%"class.thrust::device_ptr.558"* dereferenceable(8) %ref.tmp14)
  %6 = bitcast %"struct.thrust::pair.487"* %call26 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.120"* %ref to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %11, i32 0, i32 1
  %ref28 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.88"* %ref28 to %"struct.thrust::detail::execution_policy_base.85"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call29 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call30 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS2_3tagENS0_3cpp6detail3tagEEE14cudaMemcpyKindRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %10, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %13)
  store i32 %call30, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system131 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %15, i32 0, i32 0
  %ref32 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system131, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.120"* %ref32 to %"struct.thrust::detail::execution_policy_base.121"*
  %call33 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call33 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system234 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %18, i32 0, i32 1
  %ref35 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system234, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.88"* %ref35 to %"struct.thrust::detail::execution_policy_base.85"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call36 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS2_3tagENS0_3cpp6detail3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %17, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call37, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 4
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrustplINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.810"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.808", align 8
  store %"class.thrust::iterator_facade.810"* %i, %"class.thrust::iterator_facade.810"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.808"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.810"* %1 to %"class.thrust::pointer.808"*
  %3 = bitcast %"class.thrust::pointer.808"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.808"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.808"* %tmp to %"class.thrust::iterator_facade.810"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.810"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.808"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.808"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.808"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  ret %"struct.thrust::pair.487"* %10
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.810"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.813", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  store %"class.thrust::iterator_facade.810"* %this, %"class.thrust::iterator_facade.810"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.810"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.808"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.813"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %this.addr = alloca %"class.thrust::reference.813"*, align 8
  store %"class.thrust::reference.813"* %this, %"class.thrust::reference.813"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.808"* %retval to i8*
  %1 = bitcast %"class.thrust::pointer.808"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIssEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_(%"class.thrust::device_ptr.558"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.558", align 8
  store %"class.thrust::device_ptr.558"* %ptr, %"class.thrust::device_ptr.558"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.558"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.558"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive1, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIssEEEEE3getES6_(%"struct.thrust::pair.487"* %3)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv(%"class.thrust::iterator_facade.792"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.814", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.792"*, align 8
  store %"class.thrust::iterator_facade.792"* %this, %"class.thrust::iterator_facade.792"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.792"*, %"class.thrust::iterator_facade.792"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.790"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.792"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENT_9referenceERKSA_(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust9referenceIKNS_4pairIssEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv(%"class.thrust::reference.815"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.558", align 8
  %this.addr = alloca %"class.thrust::reference.815"*, align 8
  store %"class.thrust::reference.815"* %this, %"class.thrust::reference.815"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.815"*, %"class.thrust::reference.815"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.558"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.558"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.808"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.813", align 8
  %f.addr = alloca %"class.thrust::pointer.808"*, align 8
  store %"class.thrust::pointer.808"* %f, %"class.thrust::pointer.808"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %f.addr, align 8
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.808"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.808"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.810"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  store %"class.thrust::iterator_facade.810"* %this, %"class.thrust::iterator_facade.810"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.810"* %this1 to %"class.thrust::pointer.808"*
  ret %"class.thrust::pointer.808"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.808"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.813", align 8
  %this.addr = alloca %"class.thrust::pointer.808"*, align 8
  store %"class.thrust::pointer.808"* %this, %"class.thrust::pointer.808"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %this.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.813"* %retval, %"class.thrust::pointer.808"* dereferenceable(8) %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.813"* %this, %"class.thrust::pointer.808"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.813"*, align 8
  %ptr.addr = alloca %"class.thrust::pointer.808"*, align 8
  store %"class.thrust::reference.813"* %this, %"class.thrust::reference.813"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.808"* %ptr, %"class.thrust::pointer.808"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIssEEEEE3getES6_(%"struct.thrust::pair.487"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.558", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %ptr.coerce, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.558"* %ptr to %"class.thrust::pointer.559"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv(%"class.thrust::pointer.559"* %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv(%"class.thrust::pointer.559"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.559"*, align 8
  store %"class.thrust::pointer.559"* %this, %"class.thrust::pointer.559"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.559"*, %"class.thrust::pointer.559"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.559"* %this1 to %"class.thrust::iterator_adaptor.560"*
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.560"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEEEENT_9referenceERKSA_(%"class.thrust::detail::normal_iterator.790"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.814", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.790"*, align 8
  store %"class.thrust::detail::normal_iterator.790"* %f, %"class.thrust::detail::normal_iterator.790"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.790"*, %"class.thrust::detail::normal_iterator.790"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.790"* %0 to %"class.thrust::iterator_adaptor.791"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv(%"class.thrust::iterator_adaptor.791"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.790"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.792"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.792"*, align 8
  store %"class.thrust::iterator_facade.792"* %this, %"class.thrust::iterator_facade.792"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.792"*, %"class.thrust::iterator_facade.792"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.792"* %this1 to %"class.thrust::detail::normal_iterator.790"*
  ret %"class.thrust::detail::normal_iterator.790"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv(%"class.thrust::iterator_adaptor.791"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.814", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.791"*, align 8
  store %"class.thrust::iterator_adaptor.791"* %this, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.791"*, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.558"* %m_iterator to %"class.thrust::iterator_facade.561"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv(%"class.thrust::iterator_facade.561"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive9, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv(%"class.thrust::iterator_facade.561"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.814", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.561"*, align 8
  store %"class.thrust::iterator_facade.561"* %this, %"class.thrust::iterator_facade.561"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.561"*, %"class.thrust::iterator_facade.561"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.561"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIssEEEEEENT_9referenceERKS7_(%"class.thrust::device_ptr.558"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIssEEEEEENT_9referenceERKS7_(%"class.thrust::device_ptr.558"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.814", align 8
  %f.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  store %"class.thrust::device_ptr.558"* %f, %"class.thrust::device_ptr.558"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.558"* %0 to %"class.thrust::pointer.559"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv(%"class.thrust::pointer.559"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.558"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIssEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.561"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.561"*, align 8
  store %"class.thrust::iterator_facade.561"* %this, %"class.thrust::iterator_facade.561"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.561"*, %"class.thrust::iterator_facade.561"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.561"* %this1 to %"class.thrust::device_ptr.558"*
  ret %"class.thrust::device_ptr.558"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv(%"class.thrust::pointer.559"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.814", align 8
  %this.addr = alloca %"class.thrust::pointer.559"*, align 8
  store %"class.thrust::pointer.559"* %this, %"class.thrust::pointer.559"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.559"*, %"class.thrust::pointer.559"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.559"* %this1 to %"class.thrust::device_ptr.558"*
  call void @_ZN6thrust16device_referenceIKNS_4pairIssEEEC2ERKNS_10device_ptrIS3_EE(%"class.thrust::device_reference.814"* %retval, %"class.thrust::device_ptr.558"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.814", %"class.thrust::device_reference.814"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceIKNS_4pairIssEEEC2ERKNS_10device_ptrIS3_EE(%"class.thrust::device_reference.814"* %this, %"class.thrust::device_ptr.558"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.814"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  store %"class.thrust::device_reference.814"* %this, %"class.thrust::device_reference.814"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.558"* %ptr, %"class.thrust::device_ptr.558"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.814"*, %"class.thrust::device_reference.814"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.814"* %this1 to %"class.thrust::reference.815"*
  %1 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceIKNS_4pairIssEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_(%"class.thrust::reference.815"* %0, %"class.thrust::device_ptr.558"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceIKNS_4pairIssEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_(%"class.thrust::reference.815"* %this, %"class.thrust::device_ptr.558"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.815"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  store %"class.thrust::reference.815"* %this, %"class.thrust::reference.815"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.558"* %ptr, %"class.thrust::device_ptr.558"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.815"*, %"class.thrust::reference.815"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.815", %"class.thrust::reference.815"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.558"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.558"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.810"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.810"* %this, %"class.thrust::iterator_facade.810"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.810"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.808"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.810"* %this1)
  ret %"class.thrust::pointer.808"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.808"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.808"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.808"* %f, %"class.thrust::pointer.808"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %0 to %"class.thrust::iterator_adaptor.809"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.809"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.810"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  store %"class.thrust::iterator_facade.810"* %this, %"class.thrust::iterator_facade.810"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.810"* %this1 to %"class.thrust::pointer.808"*
  ret %"class.thrust::pointer.808"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.809"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.809"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.809"* %this, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.809"*, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !464
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %1, i64 %0
  store %"struct.thrust::pair.487"* %add.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !464
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.801"* %0 to %"class.thrust::detail::temporary_allocator.802"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.802"* %1)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.800"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.808", align 8
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.800"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.805"* %m_begin to %"class.thrust::iterator_adaptor.806"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.806"* %0)
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.800"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.487"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.808"* %agg.tmp6, %"struct.thrust::pair.487"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.805"* %ref.tmp, %"struct.thrust::pair.487"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.805"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.805"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !460
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.800"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !460
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.801"* %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.801"* %this, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %this, %"struct.thrust::detail::no_throw_allocator.801"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.801"* %this2 to %"class.thrust::detail::temporary_allocator.802"*
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.802"* %0, %"struct.thrust::pair.487"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %system, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %system.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %system, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.795"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.805"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.805"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp13, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp14, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %call27 = call zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  ret i1 %call27
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %agg.tmp14 = alloca %"struct.thrust::detail::equal_to.816", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.795"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.805"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.805"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp13, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %call = call zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %system, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %binary_pred = alloca %"struct.thrust::detail::equal_to.816", align 1
  %system.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %agg.tmp15 = alloca %"struct.thrust::detail::equal_to.816", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %system, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.795"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.805"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.805"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive18, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive26, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %call28 = call zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  ret i1 %call28
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %binary_pred = alloca %"struct.thrust::detail::equal_to.816", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.817", align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %agg.tmp14 = alloca %"struct.thrust::detail::equal_to.816", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.795"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.805"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.805"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp13, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive26, align 8
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  %11 = bitcast %"struct.thrust::pair.817"* %ref.tmp to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %13, %"struct.thrust::pair.487"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"** %14, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.817", %"struct.thrust::pair.817"* %ref.tmp, i32 0, i32 0
  %16 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first to %"class.thrust::iterator_facade.797"*
  %17 = bitcast %"class.thrust::detail::tagged_iterator.795"* %last1 to %"class.thrust::iterator_facade.797"*
  %call27 = call zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.797"* dereferenceable(1) %16, %"class.thrust::iterator_facade.797"* dereferenceable(1) %17)
  ret i1 %call27
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.797"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.797"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.797"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.797"*, align 8
  store %"class.thrust::iterator_facade.797"* %lhs, %"class.thrust::iterator_facade.797"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.797"* %rhs, %"class.thrust::iterator_facade.797"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.797"*, %"class.thrust::iterator_facade.797"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.797"* %0 to %"class.thrust::detail::tagged_iterator.795"*
  %2 = load %"class.thrust::iterator_facade.797"*, %"class.thrust::iterator_facade.797"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.797"* %2 to %"class.thrust::detail::tagged_iterator.795"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %1, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIssEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.817", align 8
  %first1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %pred = alloca %"struct.thrust::detail::equal_to.816", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %agg.tmp15 = alloca %"struct.thrust::detail::equal_to.816", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.795"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.805"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.805"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive18, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive26, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive27, align 8
  %call28 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %9, %"struct.thrust::pair.487"* %10)
  %11 = bitcast %"struct.thrust::pair.817"* %retval to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call28, 0
  store %"struct.thrust::pair.487"* %13, %"struct.thrust::pair.487"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call28, 1
  store %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"** %14, align 8
  %16 = bitcast %"struct.thrust::pair.817"* %retval to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %17 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %16, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %17
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %f1, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  %f2.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  store %"class.thrust::detail::tagged_iterator.795"* %f1, %"class.thrust::detail::tagged_iterator.795"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::tagged_iterator.795"* %f2, %"class.thrust::detail::tagged_iterator.795"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %0 to %"class.thrust::iterator_adaptor.796"*
  %2 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::tagged_iterator.795"* %2 to %"class.thrust::iterator_adaptor.796"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.796"* %1, %"class.thrust::iterator_adaptor.796"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.796"* %this, %"class.thrust::iterator_adaptor.796"* dereferenceable(8) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.796"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.796"*, align 8
  store %"class.thrust::iterator_adaptor.796"* %this, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.796"* %x, %"class.thrust::iterator_adaptor.796"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.796"*, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.555"* %m_iterator to %"class.thrust::iterator_facade.557"*
  %1 = load %"class.thrust::iterator_adaptor.796"*, %"class.thrust::iterator_adaptor.796"** %x.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv(%"class.thrust::iterator_adaptor.796"* %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.555"* %call to %"class.thrust::iterator_facade.557"*
  %call2 = call zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.557"* dereferenceable(1) %0, %"class.thrust::iterator_facade.557"* dereferenceable(1) %2)
  ret i1 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.557"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.557"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  store %"class.thrust::iterator_facade.557"* %lhs, %"class.thrust::iterator_facade.557"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.557"* %rhs, %"class.thrust::iterator_facade.557"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.557"* %0 to %"class.thrust::detail::normal_iterator.555"*
  %2 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.557"* %2 to %"class.thrust::detail::normal_iterator.555"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv(%"class.thrust::iterator_adaptor.796"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.796"*, align 8
  store %"class.thrust::iterator_adaptor.796"* %this, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.796"*, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.555"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIssEEEES8_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  store %"class.thrust::detail::normal_iterator.555"* %f1, %"class.thrust::detail::normal_iterator.555"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.555"* %f2, %"class.thrust::detail::normal_iterator.555"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %0 to %"class.thrust::iterator_adaptor.556"*
  %2 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.555"* %2 to %"class.thrust::iterator_adaptor.556"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.556"* %1, %"class.thrust::iterator_adaptor.556"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"* dereferenceable(8) %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  store %"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.556"* %x, %"class.thrust::iterator_adaptor.556"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  %1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %x.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.556"* %1)
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %cmp = icmp eq %"struct.thrust::pair.487"* %0, %2
  ret i1 %cmp
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"* %first2.coerce) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.817", align 8
  %first1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %pred = alloca %"struct.thrust::detail::equal_to.816", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_first = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp = alloca %"class.thrust::tuple.820", align 8
  %zipped_last = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp16 = alloca %"class.thrust::tuple.820", align 8
  %result = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp22 = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp23 = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp24 = alloca %"struct.thrust::detail::tuple_binary_predicate.823", align 1
  %agg.tmp28 = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %agg.tmp31 = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first1.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last1.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first2.coerce, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.818"* %zipped_first to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %first2)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %agg.tmp, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive12 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %3, %"struct.thrust::pair.487"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %6 = bitcast %"class.thrust::tuple.820"* %agg.tmp to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %7 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %6, i32 0, i32 0
  %8 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %6, i32 0, i32 1
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %9, align 8
  %call13 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"* %10)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %zipped_first, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive14, i32 0, i32 0
  %11 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive15 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call13, 0
  store %"struct.thrust::pair.487"* %13, %"struct.thrust::pair.487"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call13, 1
  store %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"** %14, align 8
  %16 = bitcast %"class.thrust::zip_iterator.818"* %zipped_last to i8*
  call void @llvm.lifetime.start(i64 16, i8* %16) #5
  %call17 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %first2)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %agg.tmp16, i32 0, i32 0
  %17 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive18 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %18 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %17, i32 0, i32 0
  %19 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call17, 0
  store %"struct.thrust::pair.487"* %19, %"struct.thrust::pair.487"** %18, align 8
  %20 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %17, i32 0, i32 1
  %21 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call17, 1
  store %"struct.thrust::pair.487"* %21, %"struct.thrust::pair.487"** %20, align 8
  %22 = bitcast %"class.thrust::tuple.820"* %agg.tmp16 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %23 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %22, i32 0, i32 0
  %24 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %23, align 8
  %25 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %22, i32 0, i32 1
  %26 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %25, align 8
  %call19 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair.487"* %24, %"struct.thrust::pair.487"* %26)
  %coerce.dive20 = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %zipped_last, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive20, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive21 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %28 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %27, i32 0, i32 0
  %29 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call19, 0
  store %"struct.thrust::pair.487"* %29, %"struct.thrust::pair.487"** %28, align 8
  %30 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %27, i32 0, i32 1
  %31 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call19, 1
  store %"struct.thrust::pair.487"* %31, %"struct.thrust::pair.487"** %30, align 8
  %32 = bitcast %"class.thrust::zip_iterator.818"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %32) #5
  %33 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %34 = bitcast %"struct.thrust::execution_policy.88"* %33 to %"struct.thrust::detail::execution_policy_base.85"*
  %35 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp22 to i8*
  %36 = bitcast %"class.thrust::zip_iterator.818"* %zipped_first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %35, i8* %36, i64 16, i32 8, i1 false)
  %37 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp23 to i8*
  %38 = bitcast %"class.thrust::zip_iterator.818"* %zipped_last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %37, i8* %38, i64 16, i32 8, i1 false)
  call void @_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEC2ERKS5_(%"struct.thrust::detail::tuple_binary_predicate.823"* %agg.tmp24, %"struct.thrust::detail::equal_to.816"* dereferenceable(1) %pred)
  %39 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp22 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %40 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %39, i32 0, i32 0
  %41 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %40, align 8
  %42 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %39, i32 0, i32 1
  %43 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %42, align 8
  %44 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp23 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %45 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %44, i32 0, i32 0
  %46 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %45, align 8
  %47 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %44, i32 0, i32 1
  %48 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %47, align 8
  %call25 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %34, %"struct.thrust::pair.487"* %41, %"struct.thrust::pair.487"* %43, %"struct.thrust::pair.487"* %46, %"struct.thrust::pair.487"* %48)
  %coerce.dive26 = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %result, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive26, i32 0, i32 0
  %49 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive27 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %50 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %49, i32 0, i32 0
  %51 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call25, 0
  store %"struct.thrust::pair.487"* %51, %"struct.thrust::pair.487"** %50, align 8
  %52 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %49, i32 0, i32 1
  %53 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call25, 1
  store %"struct.thrust::pair.487"* %53, %"struct.thrust::pair.487"** %52, align 8
  %call29 = call dereferenceable(16) %"class.thrust::tuple.820"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.818"* %result)
  %54 = bitcast %"class.thrust::tuple.820"* %call29 to %"struct.thrust::detail::cons.821"*
  %call30 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %54)
  %55 = bitcast %"class.thrust::detail::tagged_iterator.795"* %agg.tmp28 to i8*
  %56 = bitcast %"class.thrust::detail::tagged_iterator.795"* %call30 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %55, i8* %56, i64 8, i32 8, i1 false)
  %call32 = call dereferenceable(16) %"class.thrust::tuple.820"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.818"* %result)
  %57 = bitcast %"class.thrust::tuple.820"* %call32 to %"struct.thrust::detail::cons.821"*
  %call33 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %57)
  %58 = bitcast %"class.thrust::detail::normal_iterator.805"* %agg.tmp31 to i8*
  %59 = bitcast %"class.thrust::detail::normal_iterator.805"* %call33 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %58, i8* %59, i64 8, i32 8, i1 false)
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %agg.tmp28, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive36, i32 0, i32 0
  %60 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %agg.tmp31, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive40, i32 0, i32 0
  %61 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive41, align 8
  %call42 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_(%"struct.thrust::pair.487"* %60, %"struct.thrust::pair.487"* %61)
  %62 = bitcast %"struct.thrust::pair.817"* %retval to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %63 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %62, i32 0, i32 0
  %64 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call42, 0
  store %"struct.thrust::pair.487"* %64, %"struct.thrust::pair.487"** %63, align 8
  %65 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %62, i32 0, i32 1
  %66 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call42, 1
  store %"struct.thrust::pair.487"* %66, %"struct.thrust::pair.487"** %65, align 8
  %67 = bitcast %"class.thrust::zip_iterator.818"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %67) #5
  %68 = bitcast %"class.thrust::zip_iterator.818"* %zipped_last to i8*
  call void @llvm.lifetime.end(i64 16, i8* %68) #5
  %69 = bitcast %"class.thrust::zip_iterator.818"* %zipped_first to i8*
  call void @llvm.lifetime.end(i64 16, i8* %69) #5
  %70 = bitcast %"struct.thrust::pair.817"* %retval to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %71 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %70, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %71
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair.487"* %t.coerce0, %"struct.thrust::pair.487"* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.818", align 8
  %t = alloca %"class.thrust::tuple.820", align 8
  %agg.tmp = alloca %"class.thrust::tuple.820", align 8
  %0 = bitcast %"class.thrust::tuple.820"* %t to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %t.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.487"* %t.coerce1, %"struct.thrust::pair.487"** %2, align 8
  %3 = bitcast %"class.thrust::tuple.820"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.820"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.820"* %agg.tmp to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %5, i32 0, i32 1
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.818"* %retval, %"struct.thrust::pair.487"* %7, %"struct.thrust::pair.487"* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive1 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %11 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %10, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.820", align 8
  %t0.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  store %"class.thrust::detail::tagged_iterator.795"* %t0, %"class.thrust::detail::tagged_iterator.795"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.805"* %t1, %"class.thrust::detail::normal_iterator.805"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_(%"class.thrust::tuple.820"* %retval, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %3 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %2, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %3
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.818", align 8
  %first = alloca %"class.thrust::zip_iterator.818", align 8
  %last = alloca %"class.thrust::zip_iterator.818", align 8
  %pred = alloca %"struct.thrust::detail::tuple_binary_predicate.823", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::tuple_binary_predicate.823", align 1
  %0 = bitcast %"class.thrust::zip_iterator.818"* %first to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.818"* %last to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair.487"* %last.coerce1, %"struct.thrust::pair.487"** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %8 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.818"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.818"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::detail::tuple_binary_predicate.823"* %agg.tmp3 to i8*
  %13 = bitcast %"struct.thrust::detail::tuple_binary_predicate.823"* %pred to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 1, i32 1, i1 false), !tbaa.struct !41
  %14 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %15 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %14, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %15, align 8
  %17 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %14, i32 0, i32 1
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %17, align 8
  %19 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp2 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %20 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %19, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %20, align 8
  %22 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %19, i32 0, i32 1
  %23 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %22, align 8
  %call4 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIssEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %7, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %18, %"struct.thrust::pair.487"* %21, %"struct.thrust::pair.487"* %23)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive, i32 0, i32 0
  %24 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive5 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %25 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %24, i32 0, i32 0
  %26 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call4, 0
  store %"struct.thrust::pair.487"* %26, %"struct.thrust::pair.487"** %25, align 8
  %27 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %24, i32 0, i32 1
  %28 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call4, 1
  store %"struct.thrust::pair.487"* %28, %"struct.thrust::pair.487"** %27, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive6, i32 0, i32 0
  %29 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive7 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %30 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %29, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %30
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEC2ERKS5_(%"struct.thrust::detail::tuple_binary_predicate.823"* %this, %"struct.thrust::detail::equal_to.816"* dereferenceable(1) %p) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.823"*, align 8
  %p.addr = alloca %"struct.thrust::detail::equal_to.816"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate.823"* %this, %"struct.thrust::detail::tuple_binary_predicate.823"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::equal_to.816"* %p, %"struct.thrust::detail::equal_to.816"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::tuple_binary_predicate.823"*, %"struct.thrust::detail::tuple_binary_predicate.823"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::tuple_binary_predicate.823", %"struct.thrust::detail::tuple_binary_predicate.823"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::equal_to.816"*, %"struct.thrust::detail::equal_to.816"** %p.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_(%"struct.thrust::pair.487"* %x.coerce, %"struct.thrust::pair.487"* %y.coerce) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.817", align 8
  %x = alloca %"class.thrust::detail::tagged_iterator.795", align 8
  %y = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.795", %"class.thrust::detail::tagged_iterator.795"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.555", %"class.thrust::detail::normal_iterator.555"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %x.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %y, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %y.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  call void @_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_(%"struct.thrust::pair.817"* %retval, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %x, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %y)
  %0 = bitcast %"struct.thrust::pair.817"* %retval to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.821"*, align 8
  store %"struct.thrust::detail::cons.821"* %c, %"struct.thrust::detail::cons.821"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.821"*, %"struct.thrust::detail::cons.821"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.821"* dereferenceable(16) %0)
  ret %"class.thrust::detail::tagged_iterator.795"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.820"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.818"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  store %"class.thrust::zip_iterator.818"* %this, %"class.thrust::zip_iterator.818"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.820"* %m_iterator_tuple
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.821"*, align 8
  store %"struct.thrust::detail::cons.821"* %c, %"struct.thrust::detail::cons.821"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.821"*, %"struct.thrust::detail::cons.821"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE(%"struct.thrust::detail::cons.821"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.805"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.818"* %this, %"struct.thrust::pair.487"* %iterator_tuple.coerce0, %"struct.thrust::pair.487"* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.820", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  %0 = bitcast %"class.thrust::tuple.820"* %iterator_tuple to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %iterator_tuple.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.487"* %iterator_tuple.coerce1, %"struct.thrust::pair.487"** %2, align 8
  store %"class.thrust::zip_iterator.818"* %this, %"class.thrust::zip_iterator.818"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.818"* %this1 to %"class.thrust::iterator_facade.819"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.820"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.820"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_(%"class.thrust::tuple.820"* %this, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.820"*, align 8
  %t0.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.820"* %this, %"class.thrust::tuple.820"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.795"* %t0, %"class.thrust::detail::tagged_iterator.795"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.805"* %t1, %"class.thrust::detail::normal_iterator.805"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.820"*, %"class.thrust::tuple.820"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.820"* %this1 to %"struct.thrust::detail::cons.821"*
  %1 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.821"* %0, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.821"* %this, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.821"*, align 8
  %t1.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.821"* %this, %"struct.thrust::detail::cons.821"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.795"* %t1, %"class.thrust::detail::tagged_iterator.795"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.805"* %t2, %"class.thrust::detail::normal_iterator.805"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.821"*, %"struct.thrust::detail::cons.821"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.821", %"struct.thrust::detail::cons.821"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %head to i8*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.795"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.821", %"struct.thrust::detail::cons.821"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.822"* %tail, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.822"* %this, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.822"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.822"* %this, %"struct.thrust::detail::cons.822"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.805"* %t1, %"class.thrust::detail::normal_iterator.805"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.822"*, %"struct.thrust::detail::cons.822"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.822", %"struct.thrust::detail::cons.822"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.805"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.805"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIssEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.818", align 8
  %first = alloca %"class.thrust::zip_iterator.818", align 8
  %last = alloca %"class.thrust::zip_iterator.818", align 8
  %pred = alloca %"struct.thrust::detail::tuple_binary_predicate.823", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::unary_negate.824", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::unary_negate.824", align 1
  %0 = bitcast %"class.thrust::zip_iterator.818"* %first to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.818"* %last to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair.487"* %last.coerce1, %"struct.thrust::pair.487"** %5, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %7 = bitcast %"struct.thrust::execution_policy.88"* %6 to %"struct.thrust::detail::execution_policy_base.85"*
  %8 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.818"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp1 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.818"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  call void @_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEENS0_12unary_negateIT_EERKS9_(%"struct.thrust::detail::tuple_binary_predicate.823"* dereferenceable(1) %pred)
  %12 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %13 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %12, i32 0, i32 0
  %14 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %13, align 8
  %15 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %12, i32 0, i32 1
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %15, align 8
  %17 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp1 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %18 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %17, i32 0, i32 0
  %19 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %18, align 8
  %20 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %17, i32 0, i32 1
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %20, align 8
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %7, %"struct.thrust::pair.487"* %14, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %19, %"struct.thrust::pair.487"* %21)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive3 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %23 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %22, i32 0, i32 0
  %24 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %24, %"struct.thrust::pair.487"** %23, align 8
  %25 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %22, i32 0, i32 1
  %26 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %26, %"struct.thrust::pair.487"** %25, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive4, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive5 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %28 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %27, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %28
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIssEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.818", align 8
  %first = alloca %"class.thrust::zip_iterator.818", align 8
  %last = alloca %"class.thrust::zip_iterator.818", align 8
  %pred = alloca %"struct.thrust::detail::unary_negate.824", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.818", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::unary_negate.824", align 1
  %0 = bitcast %"class.thrust::zip_iterator.818"* %first to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.818"* %last to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair.487"* %last.coerce1, %"struct.thrust::pair.487"** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %8 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.818"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.818"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::detail::unary_negate.824"* %agg.tmp3 to i8*
  %13 = bitcast %"struct.thrust::detail::unary_negate.824"* %pred to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 1, i32 1, i1 false), !tbaa.struct !41
  %14 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %15 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %14, i32 0, i32 0
  %16 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %15, align 8
  %17 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %14, i32 0, i32 1
  %18 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %17, align 8
  %19 = bitcast %"class.thrust::zip_iterator.818"* %agg.tmp2 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %20 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %19, i32 0, i32 0
  %21 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %20, align 8
  %22 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %19, i32 0, i32 1
  %23 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %22, align 8
  %call4 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIssEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %7, %"struct.thrust::pair.487"* %16, %"struct.thrust::pair.487"* %18, %"struct.thrust::pair.487"* %21, %"struct.thrust::pair.487"* %23)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive, i32 0, i32 0
  %24 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive5 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %25 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %24, i32 0, i32 0
  %26 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call4, 0
  store %"struct.thrust::pair.487"* %26, %"struct.thrust::pair.487"** %25, align 8
  %27 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %24, i32 0, i32 1
  %28 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call4, 1
  store %"struct.thrust::pair.487"* %28, %"struct.thrust::pair.487"** %27, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive6, i32 0, i32 0
  %29 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive7 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %30 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %29, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %30
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEENS0_12unary_negateIT_EERKS9_(%"struct.thrust::detail::tuple_binary_predicate.823"* dereferenceable(1) %pred) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::unary_negate.824", align 1
  %pred.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.823"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate.823"* %pred, %"struct.thrust::detail::tuple_binary_predicate.823"** %pred.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::tuple_binary_predicate.823"*, %"struct.thrust::detail::tuple_binary_predicate.823"** %pred.addr, align 8
  call void @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEC2ERKS7_(%"struct.thrust::detail::unary_negate.824"* %retval, %"struct.thrust::detail::tuple_binary_predicate.823"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIssEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.818", align 8
  %first = alloca %"class.thrust::zip_iterator.818", align 8
  %last = alloca %"class.thrust::zip_iterator.818", align 8
  %pred = alloca %"struct.thrust::detail::unary_negate.824", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_pred = alloca %"struct.thrust::detail::wrapped_function.825", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.826", align 8
  %cleanup.dest.slot = alloca i32
  %1 = bitcast %"class.thrust::zip_iterator.818"* %first to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce0, %"struct.thrust::pair.487"** %2, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 1
  store %"struct.thrust::pair.487"* %first.coerce1, %"struct.thrust::pair.487"** %3, align 8
  %4 = bitcast %"class.thrust::zip_iterator.818"* %last to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce0, %"struct.thrust::pair.487"** %5, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %4, i32 0, i32 1
  store %"struct.thrust::pair.487"* %last.coerce1, %"struct.thrust::pair.487"** %6, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %7 = bitcast %"struct.thrust::detail::wrapped_function.825"* %wrapped_pred to i8*
  call void @llvm.lifetime.start(i64 1, i8* %7) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEEbEC2ERKS9_(%"struct.thrust::detail::wrapped_function.825"* %wrapped_pred, %"struct.thrust::detail::unary_negate.824"* dereferenceable(1) %pred)
  br label %while.cond

while.cond:                                       ; preds = %if.end, %entry
  %8 = bitcast %"class.thrust::zip_iterator.818"* %first to %"class.thrust::iterator_facade.819"*
  %9 = bitcast %"class.thrust::zip_iterator.818"* %last to %"class.thrust::iterator_facade.819"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.819"* dereferenceable(1) %8, %"class.thrust::iterator_facade.819"* dereferenceable(1) %9)
  br i1 %call, label %while.body, label %while.end

while.body:                                       ; preds = %while.cond
  %10 = bitcast %"class.thrust::zip_iterator.818"* %first to %"class.thrust::iterator_facade.819"*
  %call1 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv(%"class.thrust::iterator_facade.819"* %10)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.826", %"class.thrust::detail::tuple_of_iterator_references.826"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %coerce.dive, i32 0, i32 0
  %11 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive2 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call1, 0
  store %"struct.thrust::pair.487"* %13, %"struct.thrust::pair.487"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call1, 1
  store %"struct.thrust::pair.487"* %15, %"struct.thrust::pair.487"** %14, align 8
  %call3 = call zeroext i1 @_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_(%"struct.thrust::detail::wrapped_function.825"* %wrapped_pred, %"class.thrust::detail::tuple_of_iterator_references.826"* dereferenceable(16) %ref.tmp)
  br i1 %call3, label %if.then, label %if.end

if.then:                                          ; preds = %while.body
  %16 = bitcast %"class.thrust::zip_iterator.818"* %retval to i8*
  %17 = bitcast %"class.thrust::zip_iterator.818"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 16, i32 8, i1 false)
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %while.body
  %18 = bitcast %"class.thrust::zip_iterator.818"* %first to %"class.thrust::iterator_facade.819"*
  %call4 = call dereferenceable(16) %"class.thrust::zip_iterator.818"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv(%"class.thrust::iterator_facade.819"* %18)
  br label %while.cond

while.end:                                        ; preds = %while.cond
  %19 = bitcast %"class.thrust::zip_iterator.818"* %retval to i8*
  %20 = bitcast %"class.thrust::zip_iterator.818"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %19, i8* %20, i64 16, i32 8, i1 false)
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %while.end, %if.then
  %21 = bitcast %"struct.thrust::detail::wrapped_function.825"* %wrapped_pred to i8*
  call void @llvm.lifetime.end(i64 1, i8* %21) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.820", %"class.thrust::tuple.820"* %coerce.dive5, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.821"* %coerce.dive6 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %23 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %22, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %23
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEEbEC2ERKS9_(%"struct.thrust::detail::wrapped_function.825"* %this, %"struct.thrust::detail::unary_negate.824"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.825"*, align 8
  %f.addr = alloca %"struct.thrust::detail::unary_negate.824"*, align 8
  store %"struct.thrust::detail::wrapped_function.825"* %this, %"struct.thrust::detail::wrapped_function.825"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::unary_negate.824"* %f, %"struct.thrust::detail::unary_negate.824"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.825"*, %"struct.thrust::detail::wrapped_function.825"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.825", %"struct.thrust::detail::wrapped_function.825"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::unary_negate.824"*, %"struct.thrust::detail::unary_negate.824"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::unary_negate.824"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::unary_negate.824"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.819"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.819"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.819"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.819"*, align 8
  store %"class.thrust::iterator_facade.819"* %lhs, %"class.thrust::iterator_facade.819"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.819"* %rhs, %"class.thrust::iterator_facade.819"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.819"*, %"class.thrust::iterator_facade.819"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.819"* %0 to %"class.thrust::zip_iterator.818"*
  %2 = load %"class.thrust::iterator_facade.819"*, %"class.thrust::iterator_facade.819"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.819"* %2 to %"class.thrust::zip_iterator.818"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_(%"class.thrust::zip_iterator.818"* dereferenceable(16) %1, %"class.thrust::zip_iterator.818"* dereferenceable(16) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_(%"struct.thrust::detail::wrapped_function.825"* %this, %"class.thrust::detail::tuple_of_iterator_references.826"* dereferenceable(16) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.825"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.826"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.830", align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.826", align 8
  store %"struct.thrust::detail::wrapped_function.825"* %this, %"struct.thrust::detail::wrapped_function.825"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.826"* %x, %"class.thrust::detail::tuple_of_iterator_references.826"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.825"*, %"struct.thrust::detail::wrapped_function.825"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.825", %"struct.thrust::detail::wrapped_function.825"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.826"*, %"class.thrust::detail::tuple_of_iterator_references.826"** %x.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.826"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.826"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.826"* %agg.tmp to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %3, i32 0, i32 1
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %6, align 8
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust18raw_reference_castIRKNS_4pairIssEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_(%"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"* %7)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.830", %"class.thrust::detail::tuple_of_iterator_references.830"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.831", %"class.thrust::tuple.831"* %coerce.dive, i32 0, i32 0
  %8 = bitcast %"struct.thrust::detail::cons.832"* %coerce.dive2 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %10, %"struct.thrust::pair.487"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %12, %"struct.thrust::pair.487"** %11, align 8
  %call3 = call zeroext i1 @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_(%"struct.thrust::detail::unary_negate.824"* %m_f, %"class.thrust::detail::tuple_of_iterator_references.830"* dereferenceable(16) %ref.tmp)
  ret i1 %call3
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv(%"class.thrust::iterator_facade.819"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.826", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.819"*, align 8
  store %"class.thrust::iterator_facade.819"* %this, %"class.thrust::iterator_facade.819"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.819"*, %"class.thrust::iterator_facade.819"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.818"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.819"* %this1)
  %call2 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_(%"class.thrust::zip_iterator.818"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.826", %"class.thrust::detail::tuple_of_iterator_references.826"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %coerce.dive, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive3 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  %2 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call2, 0
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %1, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  %4 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call2, 1
  store %"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"** %3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.826", %"class.thrust::detail::tuple_of_iterator_references.826"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %coerce.dive4, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive5 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %6 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %5, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %6
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.818"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv(%"class.thrust::iterator_facade.819"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.819"*, align 8
  store %"class.thrust::iterator_facade.819"* %this, %"class.thrust::iterator_facade.819"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.819"*, %"class.thrust::iterator_facade.819"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.818"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.819"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_(%"class.thrust::zip_iterator.818"* dereferenceable(16) %call)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.818"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.819"* %this1)
  ret %"class.thrust::zip_iterator.818"* %call2
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_(%"class.thrust::zip_iterator.818"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.818"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  store %"class.thrust::zip_iterator.818"* %f1, %"class.thrust::zip_iterator.818"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.818"* %f2, %"class.thrust::zip_iterator.818"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.818"* %0, %"class.thrust::zip_iterator.818"* dereferenceable(16) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.818"* %this, %"class.thrust::zip_iterator.818"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  store %"class.thrust::zip_iterator.818"* %this, %"class.thrust::zip_iterator.818"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.818"* %other, %"class.thrust::zip_iterator.818"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.820"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.818"* %this1)
  %0 = bitcast %"class.thrust::tuple.820"* %call to %"struct.thrust::detail::cons.821"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %call2 to %"class.thrust::iterator_facade.797"*
  %2 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %other.addr, align 8
  %call3 = call dereferenceable(16) %"class.thrust::tuple.820"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.818"* %2)
  %3 = bitcast %"class.thrust::tuple.820"* %call3 to %"struct.thrust::detail::cons.821"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.795"* %call4 to %"class.thrust::iterator_facade.797"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.797"* dereferenceable(1) %1, %"class.thrust::iterator_facade.797"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_(%"struct.thrust::detail::unary_negate.824"* %this, %"class.thrust::detail::tuple_of_iterator_references.830"* dereferenceable(16) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::unary_negate.824"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.830"*, align 8
  store %"struct.thrust::detail::unary_negate.824"* %this, %"struct.thrust::detail::unary_negate.824"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.830"* %x, %"class.thrust::detail::tuple_of_iterator_references.830"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::unary_negate.824"*, %"struct.thrust::detail::unary_negate.824"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::unary_negate.824", %"struct.thrust::detail::unary_negate.824"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.830"*, %"class.thrust::detail::tuple_of_iterator_references.830"** %x.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_(%"struct.thrust::detail::tuple_binary_predicate.823"* %pred, %"class.thrust::detail::tuple_of_iterator_references.830"* dereferenceable(16) %0)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust18raw_reference_castIRKNS_4pairIssEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_(%"struct.thrust::pair.487"* %t.coerce0, %"struct.thrust::pair.487"* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.830", align 8
  %t = alloca %"class.thrust::detail::tuple_of_iterator_references.826", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %ref.tmp = alloca %"class.thrust::tuple.831", align 8
  %agg.tmp = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.826"* %t to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.487"* %t.coerce0, %"struct.thrust::pair.487"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.487"* %t.coerce1, %"struct.thrust::pair.487"** %2, align 8
  %3 = bitcast %"struct.thrust::detail::raw_reference_caster"* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_(%"class.thrust::detail::tuple_of_iterator_references.826"* dereferenceable(16) %t)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.831", %"class.thrust::tuple.831"* %ref.tmp, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.832"* %coerce.dive to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %5 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %4, i32 0, i32 0
  %6 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %6, %"struct.thrust::pair.487"** %5, align 8
  %7 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %4, i32 0, i32 1
  %8 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %8, %"struct.thrust::pair.487"** %7, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIssEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE(%"class.thrust::detail::tuple_of_iterator_references.830"* %retval, %"class.thrust::tuple.831"* dereferenceable(16) %ref.tmp)
  %9 = bitcast %"struct.thrust::detail::raw_reference_caster"* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %9) #5
  %coerce.dive1 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.830", %"class.thrust::detail::tuple_of_iterator_references.830"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.831", %"class.thrust::tuple.831"* %coerce.dive1, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.832"* %coerce.dive2 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %11 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %10, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %11
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_(%"struct.thrust::detail::tuple_binary_predicate.823"* %this, %"class.thrust::detail::tuple_of_iterator_references.830"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.823"*, align 8
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.830"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate.823"* %this, %"struct.thrust::detail::tuple_binary_predicate.823"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.830"* %t, %"class.thrust::detail::tuple_of_iterator_references.830"** %t.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::tuple_binary_predicate.823"*, %"struct.thrust::detail::tuple_binary_predicate.823"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::tuple_binary_predicate.823", %"struct.thrust::detail::tuple_binary_predicate.823"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.830"*, %"class.thrust::detail::tuple_of_iterator_references.830"** %t.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.830"* %0 to %"struct.thrust::detail::cons.832"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi0ERKNS_4pairIssEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.832"* dereferenceable(16) %1)
  %2 = load %"class.thrust::detail::tuple_of_iterator_references.830"*, %"class.thrust::detail::tuple_of_iterator_references.830"** %t.addr, align 8
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.830"* %2 to %"struct.thrust::detail::cons.832"*
  %call2 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi1ERKNS_4pairIssEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.832"* dereferenceable(16) %3)
  %call3 = call zeroext i1 @_ZNK6thrust6detail8equal_toINS_4pairIssEEEclIS3_EEbRKS3_RKT_(%"struct.thrust::detail::equal_to.816"* %pred, %"struct.thrust::pair.487"* dereferenceable(4) %call, %"struct.thrust::pair.487"* dereferenceable(4) %call2)
  ret i1 %call3
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail8equal_toINS_4pairIssEEEclIS3_EEbRKS3_RKT_(%"struct.thrust::detail::equal_to.816"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %lhs, %"struct.thrust::pair.487"* dereferenceable(4) %rhs) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::equal_to.816"*, align 8
  %lhs.addr = alloca %"struct.thrust::pair.487"*, align 8
  %rhs.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::detail::equal_to.816"* %this, %"struct.thrust::detail::equal_to.816"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %lhs, %"struct.thrust::pair.487"** %lhs.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %rhs, %"struct.thrust::pair.487"** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::equal_to.816"*, %"struct.thrust::detail::equal_to.816"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %lhs.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %rhs.addr, align 8
  %call = call zeroext i1 @_ZN6thrusteqIssEEbRKNS_4pairIT_T0_EES6_(%"struct.thrust::pair.487"* dereferenceable(4) %0, %"struct.thrust::pair.487"* dereferenceable(4) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi0ERKNS_4pairIssEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.832"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.832"*, align 8
  store %"struct.thrust::detail::cons.832"* %c, %"struct.thrust::detail::cons.832"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.832"*, %"struct.thrust::detail::cons.832"** %c.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIssEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.832"* dereferenceable(16) %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi1ERKNS_4pairIssEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.832"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.832"*, align 8
  store %"struct.thrust::detail::cons.832"* %c, %"struct.thrust::detail::cons.832"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.832"*, %"struct.thrust::detail::cons.832"** %c.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIssEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.832"* dereferenceable(16) %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqIssEEbRKNS_4pairIT_T0_EES6_(%"struct.thrust::pair.487"* dereferenceable(4) %x, %"struct.thrust::pair.487"* dereferenceable(4) %y) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::pair.487"*, align 8
  %y.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::pair.487"* %x, %"struct.thrust::pair.487"** %x.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %y, %"struct.thrust::pair.487"** %y.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %0, i32 0, i32 0
  %1 = load i16, i16* %first, align 2, !tbaa !348
  %conv = sext i16 %1 to i32
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %y.addr, align 8
  %first1 = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %2, i32 0, i32 0
  %3 = load i16, i16* %first1, align 2, !tbaa !348
  %conv2 = sext i16 %3 to i32
  %cmp = icmp eq i32 %conv, %conv2
  br i1 %cmp, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %4, i32 0, i32 1
  %5 = load i16, i16* %second, align 2, !tbaa !350
  %conv3 = sext i16 %5 to i32
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %y.addr, align 8
  %second4 = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %6, i32 0, i32 1
  %7 = load i16, i16* %second4, align 2, !tbaa !350
  %conv5 = sext i16 %7 to i32
  %cmp6 = icmp eq i32 %conv3, %conv5
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %8 = phi i1 [ false, %entry ], [ %cmp6, %land.rhs ]
  ret i1 %8
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIssEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.832"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.832"*, align 8
  store %"struct.thrust::detail::cons.832"* %t, %"struct.thrust::detail::cons.832"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.832"*, %"struct.thrust::detail::cons.832"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.832", %"struct.thrust::detail::cons.832"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.487"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIssEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.832"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.832"*, align 8
  store %"struct.thrust::detail::cons.832"* %t, %"struct.thrust::detail::cons.832"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.832"*, %"struct.thrust::detail::cons.832"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.832", %"struct.thrust::detail::cons.832"* %0, i32 0, i32 1
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIssEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.542"* dereferenceable(8) %tail)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIssEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.542"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.542"*, align 8
  store %"struct.thrust::detail::cons.542"* %t, %"struct.thrust::detail::cons.542"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.542"*, %"struct.thrust::detail::cons.542"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.542", %"struct.thrust::detail::cons.542"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.487"* %ref
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_(%"class.thrust::detail::tuple_of_iterator_references.826"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.831", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.826"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  store %"class.thrust::detail::tuple_of_iterator_references.826"* %t, %"class.thrust::detail::tuple_of_iterator_references.826"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.826"*, %"class.thrust::detail::tuple_of_iterator_references.826"** %t.addr, align 8
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_(%"class.thrust::detail::tuple_of_iterator_references.826"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.831", %"class.thrust::tuple.831"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.832"* %coerce.dive to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %3, %"struct.thrust::pair.487"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.831", %"class.thrust::tuple.831"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.832"* %coerce.dive1 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %7 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %6, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIssEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE(%"class.thrust::detail::tuple_of_iterator_references.830"* %this, %"class.thrust::tuple.831"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.830"*, align 8
  %other.addr = alloca %"class.thrust::tuple.831"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.830"* %this, %"class.thrust::detail::tuple_of_iterator_references.830"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.831"* %other, %"class.thrust::tuple.831"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.830"*, %"class.thrust::detail::tuple_of_iterator_references.830"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.830"* %this1 to %"class.thrust::tuple.831"*
  %1 = load %"class.thrust::tuple.831"*, %"class.thrust::tuple.831"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.831"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.831"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_(%"class.thrust::detail::tuple_of_iterator_references.826"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.831", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.826"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.826"* %t, %"class.thrust::detail::tuple_of_iterator_references.826"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.826"*, %"class.thrust::detail::tuple_of_iterator_references.826"** %t.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.826"* %0 to %"struct.thrust::detail::cons.828"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi0ERKNS_4pairIssEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.828"* dereferenceable(16) %1)
  %call1 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20raw_reference_casterclINS_4pairIssEEEENS0_13raw_referenceIKT_E4typeERS7_(%"struct.thrust::detail::raw_reference_caster"* %f, %"struct.thrust::pair.487"* dereferenceable(4) %call)
  %2 = load %"class.thrust::detail::tuple_of_iterator_references.826"*, %"class.thrust::detail::tuple_of_iterator_references.826"** %t.addr, align 8
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.826"* %2 to %"struct.thrust::detail::cons.828"*
  %call2 = call dereferenceable(8) %"class.thrust::reference.813"* @_ZN6thrust3getILi1ERKNS_4pairIssEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.828"* dereferenceable(16) %3)
  %call3 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIssEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_(%"struct.thrust::detail::raw_reference_caster"* %f, %"class.thrust::reference.813"* dereferenceable(8) %call2)
  call void @_ZN6thrust5tupleIRKNS_4pairIssEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_(%"class.thrust::tuple.831"* %retval, %"struct.thrust::pair.487"* dereferenceable(4) %call1, %"struct.thrust::pair.487"* dereferenceable(4) %call3)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.831", %"class.thrust::tuple.831"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.832"* %coerce.dive to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %5 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %4, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20raw_reference_casterclINS_4pairIssEEEENS0_13raw_referenceIKT_E4typeERS7_(%"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %ref) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::raw_reference_caster"*, align 8
  %ref.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %ref, %"struct.thrust::pair.487"** %ref.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::raw_reference_caster"*, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %ref.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_4pairIssEEEENS_6detail13raw_referenceIKT_E4typeERS6_(%"struct.thrust::pair.487"* dereferenceable(4) %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust3getILi0ERKNS_4pairIssEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.828"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.828"*, align 8
  store %"struct.thrust::detail::cons.828"* %c, %"struct.thrust::detail::cons.828"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.828"*, %"struct.thrust::detail::cons.828"** %c.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIssEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.828"* dereferenceable(16) %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIssEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_(%"struct.thrust::detail::raw_reference_caster"* %this, %"class.thrust::reference.813"* dereferenceable(8) %ref) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::raw_reference_caster"*, align 8
  %ref.addr = alloca %"class.thrust::reference.813"*, align 8
  store %"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.813"* %ref, %"class.thrust::reference.813"** %ref.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::raw_reference_caster"*, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8
  %0 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %ref.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIssEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.813"* dereferenceable(8) %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.813"* @_ZN6thrust3getILi1ERKNS_4pairIssEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.828"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.828"*, align 8
  store %"struct.thrust::detail::cons.828"* %c, %"struct.thrust::detail::cons.828"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.828"*, %"struct.thrust::detail::cons.828"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::reference.813"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIssEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.828"* dereferenceable(16) %0)
  ret %"class.thrust::reference.813"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRKNS_4pairIssEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_(%"class.thrust::tuple.831"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %t0, %"struct.thrust::pair.487"* dereferenceable(4) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.831"*, align 8
  %t0.addr = alloca %"struct.thrust::pair.487"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.831"* %this, %"class.thrust::tuple.831"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %t0, %"struct.thrust::pair.487"** %t0.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %t1, %"struct.thrust::pair.487"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.831"*, %"class.thrust::tuple.831"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.831"* %this1 to %"struct.thrust::detail::cons.832"*
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t0.addr, align 8
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRKNS_4pairIssEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.832"* %0, %"struct.thrust::pair.487"* dereferenceable(4) %1, %"struct.thrust::pair.487"* dereferenceable(4) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_4pairIssEEEENS_6detail13raw_referenceIKT_E4typeERS6_(%"struct.thrust::pair.487"* dereferenceable(4) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"struct.thrust::pair.487"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::pair.487"* %ref, %"struct.thrust::pair.487"** %ref.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %ref.addr, align 8
  store %"struct.thrust::pair.487"* %0, %"struct.thrust::pair.487"** %ref.tmp, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIssEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.487"** dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIssEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.828"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.828"*, align 8
  store %"struct.thrust::detail::cons.828"* %t, %"struct.thrust::detail::cons.828"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.828"*, %"struct.thrust::detail::cons.828"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.828", %"struct.thrust::detail::cons.828"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.487"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIssEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.813"* dereferenceable(8) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::reference.813"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.808", align 8
  store %"class.thrust::reference.813"* %ref, %"class.thrust::reference.813"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %ref.addr, align 8
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust9referenceINS_4pairIssEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.813"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %ref.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.808"* dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair.487"* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.813"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIssEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.828"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.828"*, align 8
  store %"struct.thrust::detail::cons.828"* %t, %"struct.thrust::detail::cons.828"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.828"*, %"struct.thrust::detail::cons.828"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.828", %"struct.thrust::detail::cons.828"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::reference.813"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIssEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.829"* dereferenceable(8) %tail)
  ret %"class.thrust::reference.813"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.813"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIssEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.829"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.829"*, align 8
  store %"struct.thrust::detail::cons.829"* %t, %"struct.thrust::detail::cons.829"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.829"*, %"struct.thrust::detail::cons.829"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.829", %"struct.thrust::detail::cons.829"* %0, i32 0, i32 0
  ret %"class.thrust::reference.813"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRKNS_4pairIssEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.832"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %t1, %"struct.thrust::pair.487"* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.832"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.487"*, align 8
  %t2.addr = alloca %"struct.thrust::pair.487"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.832"* %this, %"struct.thrust::detail::cons.832"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %t1, %"struct.thrust::pair.487"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %t2, %"struct.thrust::pair.487"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.832"*, %"struct.thrust::detail::cons.832"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.832", %"struct.thrust::detail::cons.832"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t1.addr, align 8
  store %"struct.thrust::pair.487"* %0, %"struct.thrust::pair.487"** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.832", %"struct.thrust::detail::cons.832"* %this1, i32 0, i32 1
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRNS_4pairIssEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.542"* %tail, %"struct.thrust::pair.487"* dereferenceable(4) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_(%"class.thrust::zip_iterator.818"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.826", align 8
  %f.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  store %"class.thrust::zip_iterator.818"* %f, %"class.thrust::zip_iterator.818"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %f.addr, align 8
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv(%"class.thrust::zip_iterator.818"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.826", %"class.thrust::detail::tuple_of_iterator_references.826"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %coerce.dive, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive1 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %3, %"struct.thrust::pair.487"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.826", %"class.thrust::detail::tuple_of_iterator_references.826"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %coerce.dive2, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive3 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %7 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %6, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.818"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.819"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.819"*, align 8
  store %"class.thrust::iterator_facade.819"* %this, %"class.thrust::iterator_facade.819"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.819"*, %"class.thrust::iterator_facade.819"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.819"* %this1 to %"class.thrust::zip_iterator.818"*
  ret %"class.thrust::zip_iterator.818"* %0
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv(%"class.thrust::zip_iterator.818"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.826", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.827", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.818"* %this, %"class.thrust::zip_iterator.818"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.820"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.818"* %this1)
  %call2 = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_(%"class.thrust::tuple.820"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %ref.tmp, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 0
  %2 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call2, 0
  store %"struct.thrust::pair.487"* %2, %"struct.thrust::pair.487"** %1, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %0, i32 0, i32 1
  %4 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call2, 1
  store %"struct.thrust::pair.487"* %4, %"struct.thrust::pair.487"** %3, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE(%"class.thrust::detail::tuple_of_iterator_references.826"* %retval, %"class.thrust::tuple.827"* dereferenceable(16) %ref.tmp)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.826", %"class.thrust::detail::tuple_of_iterator_references.826"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %coerce.dive3, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive4 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %6 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %5, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_(%"class.thrust::tuple.820"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.827", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.820"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.820"* %t, %"class.thrust::tuple.820"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.820"*, %"class.thrust::tuple.820"** %t.addr, align 8
  %call = call { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_(%"class.thrust::tuple.820"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 0
  store %"struct.thrust::pair.487"* %3, %"struct.thrust::pair.487"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %call, 1
  store %"struct.thrust::pair.487"* %5, %"struct.thrust::pair.487"** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive1 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %7 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %6, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIssEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE(%"class.thrust::detail::tuple_of_iterator_references.826"* %this, %"class.thrust::tuple.827"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.826"*, align 8
  %other.addr = alloca %"class.thrust::tuple.827"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.826"* %this, %"class.thrust::detail::tuple_of_iterator_references.826"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.827"* %other, %"class.thrust::tuple.827"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.826"*, %"class.thrust::detail::tuple_of_iterator_references.826"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.826"* %this1 to %"class.thrust::tuple.827"*
  %1 = load %"class.thrust::tuple.827"*, %"class.thrust::tuple.827"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.827"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.827"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_(%"class.thrust::tuple.820"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.827", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.820"*, align 8
  %ref.tmp = alloca %"class.thrust::reference.813", align 8
  store %"class.thrust::tuple.820"* %t, %"class.thrust::tuple.820"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.820"*, %"class.thrust::tuple.820"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.820"* %0 to %"struct.thrust::detail::cons.821"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %1)
  %call1 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.820"*, %"class.thrust::tuple.820"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.820"* %2 to %"struct.thrust::detail::cons.821"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.821"* dereferenceable(16) %3)
  %call3 = call %"struct.thrust::pair.487"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %call2)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %ref.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call3, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  call void @_ZN6thrust5tupleIRKNS_4pairIssEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_(%"class.thrust::tuple.827"* %retval, %"struct.thrust::pair.487"* dereferenceable(4) %call1, %"class.thrust::reference.813"* dereferenceable(8) %ref.tmp)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.827", %"class.thrust::tuple.827"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.828"* %coerce.dive6 to { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }*
  %5 = load { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }, { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* }* %4, align 8
  ret { %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.795"* %it, %"class.thrust::detail::tagged_iterator.795"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %0 to %"class.thrust::iterator_facade.797"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv(%"class.thrust::iterator_facade.797"* %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.813", align 8
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.805"* %it, %"class.thrust::detail::normal_iterator.805"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.805"* %0 to %"class.thrust::iterator_facade.807"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.807"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRKNS_4pairIssEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_(%"class.thrust::tuple.827"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %t0, %"class.thrust::reference.813"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.827"*, align 8
  %t0.addr = alloca %"struct.thrust::pair.487"*, align 8
  %t1.addr = alloca %"class.thrust::reference.813"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.827"* %this, %"class.thrust::tuple.827"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %t0, %"struct.thrust::pair.487"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::reference.813"* %t1, %"class.thrust::reference.813"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.827"*, %"class.thrust::tuple.827"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.827"* %this1 to %"struct.thrust::detail::cons.828"*
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t0.addr, align 8
  %2 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRKNS_4pairIssEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.828"* %0, %"struct.thrust::pair.487"* dereferenceable(4) %1, %"class.thrust::reference.813"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv(%"class.thrust::iterator_facade.797"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.797"*, align 8
  store %"class.thrust::iterator_facade.797"* %this, %"class.thrust::iterator_facade.797"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.797"*, %"class.thrust::iterator_facade.797"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.797"* %this1)
  %call2 = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %call)
  ret %"struct.thrust::pair.487"* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  store %"class.thrust::detail::tagged_iterator.795"* %f, %"class.thrust::detail::tagged_iterator.795"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %0 to %"class.thrust::iterator_adaptor.796"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv(%"class.thrust::iterator_adaptor.796"* %1)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.797"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.797"*, align 8
  store %"class.thrust::iterator_facade.797"* %this, %"class.thrust::iterator_facade.797"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.797"*, %"class.thrust::iterator_facade.797"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.797"* %this1 to %"class.thrust::detail::tagged_iterator.795"*
  ret %"class.thrust::detail::tagged_iterator.795"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv(%"class.thrust::iterator_adaptor.796"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.796"*, align 8
  store %"class.thrust::iterator_adaptor.796"* %this, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.796"*, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.555"* %m_iterator to %"class.thrust::iterator_facade.557"*
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.557"* %0)
  ret %"struct.thrust::pair.487"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.807"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.813", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  store %"class.thrust::iterator_facade.807"* %this, %"class.thrust::iterator_facade.807"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.807"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.813", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  store %"class.thrust::detail::normal_iterator.805"* %f, %"class.thrust::detail::normal_iterator.805"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.805"* %0 to %"class.thrust::iterator_adaptor.806"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.806"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.807"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  store %"class.thrust::iterator_facade.807"* %this, %"class.thrust::iterator_facade.807"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.807"* %this1 to %"class.thrust::detail::normal_iterator.805"*
  ret %"class.thrust::detail::normal_iterator.805"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.806"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.813", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.806"*, align 8
  store %"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.806"*, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.808"* %m_iterator to %"class.thrust::iterator_facade.810"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.810"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive5, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRKNS_4pairIssEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.828"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %t1, %"class.thrust::reference.813"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.828"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.487"*, align 8
  %t2.addr = alloca %"class.thrust::reference.813"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.828"* %this, %"struct.thrust::detail::cons.828"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %t1, %"struct.thrust::pair.487"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::reference.813"* %t2, %"class.thrust::reference.813"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.828"*, %"struct.thrust::detail::cons.828"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.828", %"struct.thrust::detail::cons.828"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %t1.addr, align 8
  store %"struct.thrust::pair.487"* %0, %"struct.thrust::pair.487"** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.828", %"struct.thrust::detail::cons.828"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_9referenceINS_4pairIssEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.829"* %tail, %"class.thrust::reference.813"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_9referenceINS_4pairIssEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.829"* %this, %"class.thrust::reference.813"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.829"*, align 8
  %t1.addr = alloca %"class.thrust::reference.813"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.829"* %this, %"struct.thrust::detail::cons.829"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.813"* %t1, %"class.thrust::reference.813"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.829"*, %"struct.thrust::detail::cons.829"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.829", %"struct.thrust::detail::cons.829"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::reference.813"* %head to i8*
  %11 = bitcast %"class.thrust::reference.813"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_(%"class.thrust::zip_iterator.818"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  store %"class.thrust::zip_iterator.818"* %f, %"class.thrust::zip_iterator.818"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv(%"class.thrust::zip_iterator.818"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.818"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.819"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.819"*, align 8
  store %"class.thrust::iterator_facade.819"* %this, %"class.thrust::iterator_facade.819"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.819"*, %"class.thrust::iterator_facade.819"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.819"* %this1 to %"class.thrust::zip_iterator.818"*
  ret %"class.thrust::zip_iterator.818"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv(%"class.thrust::zip_iterator.818"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.818"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.818"* %this, %"class.thrust::zip_iterator.818"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.818"*, %"class.thrust::zip_iterator.818"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.818", %"class.thrust::zip_iterator.818"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_(%"class.thrust::tuple.820"* dereferenceable(16) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_(%"class.thrust::tuple.820"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.820"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.820"* %t, %"class.thrust::tuple.820"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.820"*, %"class.thrust::tuple.820"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.820"* %0 to %"struct.thrust::detail::cons.821"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.821"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.820"*, %"class.thrust::tuple.820"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.820"* %2 to %"struct.thrust::detail::cons.821"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.822"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.821"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_(%"struct.thrust::detail::cons.822"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.795"* %it, %"class.thrust::detail::tagged_iterator.795"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %0 to %"class.thrust::iterator_facade.797"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv(%"class.thrust::iterator_facade.797"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.821"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.821"*, align 8
  store %"struct.thrust::detail::cons.821"* %this, %"struct.thrust::detail::cons.821"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.821"*, %"struct.thrust::detail::cons.821"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.821", %"struct.thrust::detail::cons.821"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::tagged_iterator.795"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_(%"struct.thrust::detail::cons.822"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.822"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.822"* %t, %"struct.thrust::detail::cons.822"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.822"*, %"struct.thrust::detail::cons.822"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.822"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.822"*, %"struct.thrust::detail::cons.822"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.822"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.822"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.821"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.821"*, align 8
  store %"struct.thrust::detail::cons.821"* %this, %"struct.thrust::detail::cons.821"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.821"*, %"struct.thrust::detail::cons.821"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.821", %"struct.thrust::detail::cons.821"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.822"* %tail
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv(%"class.thrust::iterator_facade.797"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.797"*, align 8
  store %"class.thrust::iterator_facade.797"* %this, %"class.thrust::iterator_facade.797"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.797"*, %"class.thrust::iterator_facade.797"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.797"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.797"* %this1)
  ret %"class.thrust::detail::tagged_iterator.795"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  store %"class.thrust::detail::tagged_iterator.795"* %f, %"class.thrust::detail::tagged_iterator.795"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %0 to %"class.thrust::iterator_adaptor.796"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv(%"class.thrust::iterator_adaptor.796"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.797"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.797"*, align 8
  store %"class.thrust::iterator_facade.797"* %this, %"class.thrust::iterator_facade.797"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.797"*, %"class.thrust::iterator_facade.797"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.797"* %this1 to %"class.thrust::detail::tagged_iterator.795"*
  ret %"class.thrust::detail::tagged_iterator.795"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv(%"class.thrust::iterator_adaptor.796"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.796"*, align 8
  store %"class.thrust::iterator_adaptor.796"* %this, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.796"*, %"class.thrust::iterator_adaptor.796"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.796", %"class.thrust::iterator_adaptor.796"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.555"* %m_iterator to %"class.thrust::iterator_facade.557"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv(%"class.thrust::iterator_facade.557"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv(%"class.thrust::iterator_facade.557"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.557"*, align 8
  store %"class.thrust::iterator_facade.557"* %this, %"class.thrust::iterator_facade.557"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.557"*, %"class.thrust::iterator_facade.557"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.557"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEEvRT_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.555"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.557"* %this1)
  ret %"class.thrust::detail::normal_iterator.555"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIssEEEEEEvRT_(%"class.thrust::detail::normal_iterator.555"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.555"*, align 8
  store %"class.thrust::detail::normal_iterator.555"* %f, %"class.thrust::detail::normal_iterator.555"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.555"*, %"class.thrust::detail::normal_iterator.555"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.555"* %0 to %"class.thrust::iterator_adaptor.556"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv(%"class.thrust::iterator_adaptor.556"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv(%"class.thrust::iterator_adaptor.556"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.556"*, align 8
  store %"class.thrust::iterator_adaptor.556"* %this, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.556"*, %"class.thrust::iterator_adaptor.556"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.556", %"class.thrust::iterator_adaptor.556"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %0, i32 1
  store %"struct.thrust::pair.487"* %incdec.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !395
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.805"* %it, %"class.thrust::detail::normal_iterator.805"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.805"* %0 to %"class.thrust::iterator_facade.807"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv(%"class.thrust::iterator_facade.807"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.822"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.822"*, align 8
  store %"struct.thrust::detail::cons.822"* %this, %"struct.thrust::detail::cons.822"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.822"*, %"struct.thrust::detail::cons.822"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.822", %"struct.thrust::detail::cons.822"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.805"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.822"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.822"*, align 8
  store %"struct.thrust::detail::cons.822"* %this, %"struct.thrust::detail::cons.822"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.822"*, %"struct.thrust::detail::cons.822"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv(%"class.thrust::iterator_facade.807"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  store %"class.thrust::iterator_facade.807"* %this, %"class.thrust::iterator_facade.807"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.807"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.807"* %this1)
  ret %"class.thrust::detail::normal_iterator.805"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  store %"class.thrust::detail::normal_iterator.805"* %f, %"class.thrust::detail::normal_iterator.805"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.805"* %0 to %"class.thrust::iterator_adaptor.806"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv(%"class.thrust::iterator_adaptor.806"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.807"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  store %"class.thrust::iterator_facade.807"* %this, %"class.thrust::iterator_facade.807"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.807"* %this1 to %"class.thrust::detail::normal_iterator.805"*
  ret %"class.thrust::detail::normal_iterator.805"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv(%"class.thrust::iterator_adaptor.806"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.806"*, align 8
  store %"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.806"*, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.808"* %m_iterator to %"class.thrust::iterator_facade.810"*
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.810"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.810"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  store %"class.thrust::iterator_facade.810"* %this, %"class.thrust::iterator_facade.810"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.810"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_(%"class.thrust::pointer.808"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.810"* %this1)
  ret %"class.thrust::pointer.808"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_(%"class.thrust::pointer.808"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.808"*, align 8
  store %"class.thrust::pointer.808"* %f, %"class.thrust::pointer.808"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %0 to %"class.thrust::iterator_adaptor.809"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv(%"class.thrust::iterator_adaptor.809"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv(%"class.thrust::iterator_adaptor.809"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.809"*, align 8
  store %"class.thrust::iterator_adaptor.809"* %this, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.809"*, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !464
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %0, i32 1
  store %"struct.thrust::pair.487"* %incdec.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !464
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIssEEEEEEEC2ERKS7_(%"struct.thrust::detail::unary_negate.824"* %this, %"struct.thrust::detail::tuple_binary_predicate.823"* dereferenceable(1) %pred) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::unary_negate.824"*, align 8
  %pred.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.823"*, align 8
  store %"struct.thrust::detail::unary_negate.824"* %this, %"struct.thrust::detail::unary_negate.824"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::tuple_binary_predicate.823"* %pred, %"struct.thrust::detail::tuple_binary_predicate.823"** %pred.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::unary_negate.824"*, %"struct.thrust::detail::unary_negate.824"** %this.addr, align 8
  %pred2 = getelementptr inbounds %"struct.thrust::detail::unary_negate.824", %"struct.thrust::detail::unary_negate.824"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::tuple_binary_predicate.823"*, %"struct.thrust::detail::tuple_binary_predicate.823"** %pred.addr, align 8
  %1 = bitcast %"struct.thrust::detail::tuple_binary_predicate.823"* %pred2 to i8*
  %2 = bitcast %"struct.thrust::detail::tuple_binary_predicate.823"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IssEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_(%"struct.thrust::pair.817"* %this, %"class.thrust::detail::tagged_iterator.795"* dereferenceable(8) %x, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.817"*, align 8
  %x.addr = alloca %"class.thrust::detail::tagged_iterator.795"*, align 8
  %y.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  store %"struct.thrust::pair.817"* %this, %"struct.thrust::pair.817"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.795"* %x, %"class.thrust::detail::tagged_iterator.795"** %x.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.805"* %y, %"class.thrust::detail::normal_iterator.805"** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.817"*, %"struct.thrust::pair.817"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.817", %"struct.thrust::pair.817"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tagged_iterator.795"*, %"class.thrust::detail::tagged_iterator.795"** %x.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.795"* %first to i8*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.795"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.817", %"struct.thrust::pair.817"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %y.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.805"* %second to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.805"* %3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.795"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIssEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.821"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.821"*, align 8
  store %"struct.thrust::detail::cons.821"* %t, %"struct.thrust::detail::cons.821"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.821"*, %"struct.thrust::detail::cons.821"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.821", %"struct.thrust::detail::cons.821"* %0, i32 0, i32 0
  ret %"class.thrust::detail::tagged_iterator.795"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE(%"struct.thrust::detail::cons.821"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.821"*, align 8
  store %"struct.thrust::detail::cons.821"* %t, %"struct.thrust::detail::cons.821"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.821"*, %"struct.thrust::detail::cons.821"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.821", %"struct.thrust::detail::cons.821"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.822"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.805"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.822"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.822"*, align 8
  store %"struct.thrust::detail::cons.822"* %t, %"struct.thrust::detail::cons.822"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.822"*, %"struct.thrust::detail::cons.822"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.822", %"struct.thrust::detail::cons.822"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.805"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.800"* %this, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.805"* %first to %"class.thrust::iterator_adaptor.806"*
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.806"* %0)
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.805"* %last to %"class.thrust::iterator_facade.807"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.805"* %first to %"class.thrust::iterator_facade.807"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.807"* dereferenceable(1) %3, %"class.thrust::iterator_facade.807"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive10, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.487"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.800"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.800"*, align 8
  store %"class.thrust::detail::contiguous_storage.800"* %this, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.800"*, %"class.thrust::detail::contiguous_storage.800"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.800", %"class.thrust::detail::contiguous_storage.800"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.805"* %m_begin to %"class.thrust::iterator_facade.807"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.800"* %this1)
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.807"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call2, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive8, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.487"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %0, %"struct.thrust::pair.487"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.807"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.807"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  store %"class.thrust::iterator_facade.807"* %lhs, %"class.thrust::iterator_facade.807"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.807"* %rhs, %"class.thrust::iterator_facade.807"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.807"* %0 to %"class.thrust::detail::normal_iterator.805"*
  %2 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.807"* %2 to %"class.thrust::detail::normal_iterator.805"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %a, %"struct.thrust::pair.487"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.808", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.801"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.808", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %p.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.801"* %a, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.801"*, %"struct.thrust::detail::no_throw_allocator.801"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.801"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.808"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call5, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIssEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %first = alloca %"class.thrust::pointer.808", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.808", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::pointer.808"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.808"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive4, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call6, %"struct.thrust::pair.487"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive9, i32 0, i32 0
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.487"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIssEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.487"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.808", align 8
  %first = alloca %"class.thrust::pointer.808", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %i = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::reference.813", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = bitcast %"class.thrust::pointer.808"* %first to %"class.thrust::iterator_facade.810"*
  %call = call %"struct.thrust::pair.487"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.810"* %6)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.813", %"class.thrust::reference.813"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive4, align 8
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIssEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"class.thrust::reference.813"* dereferenceable(8) %ref.tmp)
  %7 = bitcast %"class.thrust::pointer.808"* %first to %"class.thrust::iterator_facade.810"*
  %call5 = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.810"* %7)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add nsw i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = bitcast %"class.thrust::pointer.808"* %retval to i8*
  %10 = bitcast %"class.thrust::pointer.808"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %11) #5
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive6, i32 0, i32 0
  %12 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.487"* %12
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIssEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.146"* %this, %"class.thrust::reference.813"* dereferenceable(8) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %x.addr = alloca %"class.thrust::reference.813"*, align 8
  store %"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.813"* %x, %"class.thrust::reference.813"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::wrapped_function.146"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::reference.813"*, %"class.thrust::reference.813"** %x.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIssEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.813"* dereferenceable(8) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIssEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %m_f, %"struct.thrust::pair.487"* dereferenceable(4) %call)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIssEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %x) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::gozer"*, align 8
  %x.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::gozer"* %this, %"struct.thrust::detail::allocator_traits_detail::gozer"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %x, %"struct.thrust::pair.487"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::gozer"*, %"struct.thrust::detail::allocator_traits_detail::gozer"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.805"* %f1, %"class.thrust::detail::normal_iterator.805"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.805"* %f2, %"class.thrust::detail::normal_iterator.805"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  store %"class.thrust::detail::normal_iterator.805"* %f1, %"class.thrust::detail::normal_iterator.805"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.805"* %f2, %"class.thrust::detail::normal_iterator.805"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.805"* %1 to %"class.thrust::iterator_adaptor.806"*
  %3 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.805"* %3 to %"class.thrust::iterator_adaptor.806"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.806"* %2, %"class.thrust::iterator_adaptor.806"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::iterator_adaptor.806"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.806"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.806"*, align 8
  store %"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.806"* %y, %"class.thrust::iterator_adaptor.806"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.806"*, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.806"*, %"class.thrust::iterator_adaptor.806"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.806"* %0)
  %1 = bitcast %"class.thrust::pointer.808"* %call to %"class.thrust::iterator_facade.810"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.808"* %m_iterator to %"class.thrust::iterator_facade.810"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.810"* dereferenceable(1) %1, %"class.thrust::iterator_facade.810"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.810"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.810"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.810"*, align 8
  store %"class.thrust::iterator_facade.810"* %lhs, %"class.thrust::iterator_facade.810"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.810"* %rhs, %"class.thrust::iterator_facade.810"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.810"* %0 to %"class.thrust::pointer.808"*
  %2 = load %"class.thrust::iterator_facade.810"*, %"class.thrust::iterator_facade.810"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.810"* %2 to %"class.thrust::pointer.808"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.808"* dereferenceable(8) %1, %"class.thrust::pointer.808"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.808"* dereferenceable(8) %f1, %"class.thrust::pointer.808"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.808"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.808"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.808"* %f1, %"class.thrust::pointer.808"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.808"* %f2, %"class.thrust::pointer.808"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.808"* dereferenceable(8) %0, %"class.thrust::pointer.808"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.808"* dereferenceable(8) %f1, %"class.thrust::pointer.808"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.808"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.808"*, align 8
  store %"class.thrust::pointer.808"* %f1, %"class.thrust::pointer.808"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.808"* %f2, %"class.thrust::pointer.808"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.808"* %1 to %"class.thrust::iterator_adaptor.809"*
  %3 = load %"class.thrust::pointer.808"*, %"class.thrust::pointer.808"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.808"* %3 to %"class.thrust::iterator_adaptor.809"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.809"* %2, %"class.thrust::iterator_adaptor.809"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.809"* %this, %"class.thrust::iterator_adaptor.809"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.809"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.809"*, align 8
  store %"class.thrust::iterator_adaptor.809"* %this, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.809"* %y, %"class.thrust::iterator_adaptor.809"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.809"*, %"class.thrust::iterator_adaptor.809"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.809"*, %"class.thrust::iterator_adaptor.809"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.809"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !464
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.487"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.487"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.807"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.805", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.805", align 8
  store %"class.thrust::iterator_facade.807"* %i, %"class.thrust::iterator_facade.807"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.805"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.807"* %1 to %"class.thrust::detail::normal_iterator.805"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.805"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.805"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.805"* %tmp to %"class.thrust::iterator_facade.807"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.807"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.805"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.805"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.805"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.805", %"class.thrust::detail::normal_iterator.805"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.808", %"class.thrust::pointer.808"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.809", %"class.thrust::iterator_adaptor.809"* %coerce.dive2, i32 0, i32 0
  %10 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.487"* %10
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.807"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.807"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.807"* %this, %"class.thrust::iterator_facade.807"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.807"*, %"class.thrust::iterator_facade.807"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.807"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.805"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.807"* %this1)
  ret %"class.thrust::detail::normal_iterator.805"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.805"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.805"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.805"* %f, %"class.thrust::detail::normal_iterator.805"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.805"*, %"class.thrust::detail::normal_iterator.805"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.805"* %0 to %"class.thrust::iterator_adaptor.806"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.806"* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.806"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.806"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.806"* %this, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.806"*, %"class.thrust::iterator_adaptor.806"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.806", %"class.thrust::iterator_adaptor.806"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.808"* %m_iterator to %"class.thrust::iterator_facade.810"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.808"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.810"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.502"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.790", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.502"*, align 8
  store %"class.thrust::detail::contiguous_storage.502"* %this, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.502"*, %"class.thrust::detail::contiguous_storage.502"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.502", %"class.thrust::detail::contiguous_storage.502"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE(%"class.thrust::detail::normal_iterator.790"* %retval, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.790", %"class.thrust::detail::normal_iterator.790"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.558", %"class.thrust::device_ptr.558"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.559", %"class.thrust::pointer.559"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.560", %"class.thrust::iterator_adaptor.560"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE(%"class.thrust::detail::normal_iterator.790"* %this, %"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.790"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.505"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.558", align 8
  store %"class.thrust::detail::normal_iterator.790"* %this, %"class.thrust::detail::normal_iterator.790"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.505"* %other, %"class.thrust::detail::normal_iterator.505"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.790"*, %"class.thrust::detail::normal_iterator.790"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.790"* %this1 to %"class.thrust::iterator_adaptor.791"*
  %2 = load %"class.thrust::detail::normal_iterator.505"*, %"class.thrust::detail::normal_iterator.505"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.505"* %2 to %"class.thrust::iterator_adaptor.506"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.508"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.506"* %3)
  call void @_ZN6thrust10device_ptrIKNS_4pairIssEEEC2IS2_EERKNS0_IT_EE(%"class.thrust::device_ptr.558"* %ref.tmp, %"class.thrust::device_ptr.508"* dereferenceable(8) %call)
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_(%"class.thrust::iterator_adaptor.791"* %1, %"class.thrust::device_ptr.558"* dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKNS_4pairIssEEEC2IS2_EERKNS0_IT_EE(%"class.thrust::device_ptr.558"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  store %"class.thrust::device_ptr.558"* %this, %"class.thrust::device_ptr.558"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %other, %"class.thrust::device_ptr.508"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.558"* %this1 to %"class.thrust::pointer.559"*
  %1 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %other.addr, align 8
  call void @_ZN6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE(%"class.thrust::pointer.559"* %0, %"class.thrust::device_ptr.508"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIssEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_(%"class.thrust::iterator_adaptor.791"* %this, %"class.thrust::device_ptr.558"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.791"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.558"*, align 8
  store %"class.thrust::iterator_adaptor.791"* %this, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.558"* %iter, %"class.thrust::device_ptr.558"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.791"*, %"class.thrust::iterator_adaptor.791"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.791"* %this1 to %"class.thrust::iterator_facade.792"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.791", %"class.thrust::iterator_adaptor.791"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.558"*, %"class.thrust::device_ptr.558"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.558"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.558"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKNS_4pairIssEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE(%"class.thrust::pointer.559"* %this, %"class.thrust::device_ptr.508"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.559"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.508"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.487"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.508", align 8
  store %"class.thrust::pointer.559"* %this, %"class.thrust::pointer.559"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.508"* %other, %"class.thrust::device_ptr.508"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.559"*, %"class.thrust::pointer.559"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.559"* %this1 to %"class.thrust::iterator_adaptor.560"*
  %2 = load %"class.thrust::device_ptr.508"*, %"class.thrust::device_ptr.508"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.508"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.508"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive2, i32 0, i32 0
  %5 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIssEEEEE3getES5_(%"struct.thrust::pair.487"* %5)
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.560"* %1, %"struct.thrust::pair.487"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE3endEv(%"class.thrust::detail::vector_base.501"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.505", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.501"*, align 8
  store %"class.thrust::detail::vector_base.501"* %this, %"class.thrust::detail::vector_base.501"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.501"*, %"class.thrust::detail::vector_base.501"** %this.addr, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.501"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  %call6 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.501"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.505"* dereferenceable(8) %retval, i64 %call6)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.505", %"class.thrust::detail::normal_iterator.505"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.506", %"class.thrust::iterator_adaptor.506"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.508", %"class.thrust::device_ptr.508"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.509", %"class.thrust::pointer.509"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.510", %"class.thrust::iterator_adaptor.510"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_(%"class.thrust::detail::contiguous_storage.480"* %this, %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.480"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %first.coerce, %"struct.thrust::pair.487"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.487"* %last.coerce, %"struct.thrust::pair.487"** %coerce.dive3, align 8
  store %"class.thrust::detail::contiguous_storage.480"* %this, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::contiguous_storage.480"*, %"class.thrust::detail::contiguous_storage.480"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.480", %"class.thrust::detail::contiguous_storage.480"* %this4, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.484"* %first to %"class.thrust::iterator_adaptor.485"*
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.485"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %2 = bitcast %"class.thrust::detail::normal_iterator.484"* %last to %"class.thrust::iterator_facade.486"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.484"* %first to %"class.thrust::iterator_facade.486"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.486"* dereferenceable(1) %2, %"class.thrust::iterator_facade.486"* dereferenceable(1) %3)
  call void @_ZN6thrust6detail13destroy_rangeISaINS_4pairIssEEEPS3_lEEvRT_T0_T1_(%"class.std::allocator.481"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.487"* %1, i64 %call5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.479"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.484", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.479"*, align 8
  store %"class.thrust::detail::vector_base.479"* %this, %"class.thrust::detail::vector_base.479"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.479"*, %"class.thrust::detail::vector_base.479"** %this.addr, align 8
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.479"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.487"* %call, %"struct.thrust::pair.487"** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIssEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.479"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.484", %"class.thrust::detail::normal_iterator.484"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.487"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeISaINS_4pairIssEEEPS3_lEEvRT_T0_T1_(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIssEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_(%"class.std::allocator.481"* dereferenceable(1) %0, %"struct.thrust::pair.487"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.486"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.486"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.486"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.486"*, align 8
  store %"class.thrust::iterator_facade.486"* %lhs, %"class.thrust::iterator_facade.486"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.486"* %rhs, %"class.thrust::iterator_facade.486"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.486"*, %"class.thrust::iterator_facade.486"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.486"* %0 to %"class.thrust::detail::normal_iterator.484"*
  %2 = load %"class.thrust::iterator_facade.486"*, %"class.thrust::iterator_facade.486"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.486"* %2 to %"class.thrust::detail::normal_iterator.484"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIssEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIssEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_(%"class.std::allocator.481"* dereferenceable(1) %a, %"struct.thrust::pair.487"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.481"*, align 8
  %p.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  store %"class.std::allocator.481"* %a, %"class.std::allocator.481"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %p, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.481"*, %"class.std::allocator.481"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaINS_4pairIssEEEE3getERS4_(%"class.std::allocator.481"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIssEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIssEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.487"* %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIssEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.487"* %2, i64 %3)
  ret %"struct.thrust::pair.487"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.487"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIssEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.487"* %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca %"struct.thrust::pair.487"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %i = alloca i64, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.487"* %first, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIssEEEEvRT_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::pair.487"* dereferenceable(4) %6)
  %7 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %7, i32 1
  store %"struct.thrust::pair.487"* %incdec.ptr, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add nsw i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  ret %"struct.thrust::pair.487"* %9
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIssEEEEvRT_(%"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::pair.487"* dereferenceable(4) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %x.addr = alloca %"struct.thrust::pair.487"*, align 8
  store %"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.487"* %x, %"struct.thrust::pair.487"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::wrapped_function.146"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %x.addr, align 8
  %call = call dereferenceable(4) %"struct.thrust::pair.487"* @_ZN6thrust18raw_reference_castINS_4pairIssEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair.487"* dereferenceable(4) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIssEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %m_f, %"struct.thrust::pair.487"* dereferenceable(4) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIssEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.484"* %f1, %"class.thrust::detail::normal_iterator.484"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.484"* %f2, %"class.thrust::detail::normal_iterator.484"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIssEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIssEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  store %"class.thrust::detail::normal_iterator.484"* %f1, %"class.thrust::detail::normal_iterator.484"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.484"* %f2, %"class.thrust::detail::normal_iterator.484"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.484"* %1 to %"class.thrust::iterator_adaptor.485"*
  %3 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.484"* %3 to %"class.thrust::iterator_adaptor.485"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.485"* %2, %"class.thrust::iterator_adaptor.485"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.485"* %this, %"class.thrust::iterator_adaptor.485"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.485"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.485"*, align 8
  store %"class.thrust::iterator_adaptor.485"* %this, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.485"* %y, %"class.thrust::iterator_adaptor.485"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.485"*, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.485"*, %"class.thrust::iterator_adaptor.485"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.487"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.485"* %0)
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !371
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.487"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.487"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.484"* %i, %"class.thrust::detail::normal_iterator.484"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.484"* %i, %"class.thrust::detail::normal_iterator.484"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.484"* %i, %"class.thrust::detail::normal_iterator.484"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.484"* %1 to %"class.thrust::iterator_facade.486"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl(%"class.thrust::iterator_facade.486"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl(%"class.thrust::iterator_facade.486"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.486"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.486"* %this, %"class.thrust::iterator_facade.486"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.486"*, %"class.thrust::iterator_facade.486"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.486"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEEEvRT_NS8_15difference_typeE(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.484"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIssEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.486"* %this1)
  ret %"class.thrust::detail::normal_iterator.484"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIssEEEEEEvRT_NS8_15difference_typeE(%"class.thrust::detail::normal_iterator.484"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.484"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.484"* %f, %"class.thrust::detail::normal_iterator.484"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.484"*, %"class.thrust::detail::normal_iterator.484"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.484"* %0 to %"class.thrust::iterator_adaptor.485"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl(%"class.thrust::iterator_adaptor.485"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl(%"class.thrust::iterator_adaptor.485"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.485"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.485"* %this, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.485"*, %"class.thrust::iterator_adaptor.485"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.485", %"class.thrust::iterator_adaptor.485"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.487"*, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !371
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.487", %"struct.thrust::pair.487"* %1, i64 %0
  store %"struct.thrust::pair.487"* %add.ptr, %"struct.thrust::pair.487"** %m_iterator, align 8, !tbaa !371
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN17TestPairScanByKeyIiEclEm(%struct.TestPairScanByKey.833* %this, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %struct.TestPairScanByKey.833*, align 8
  %n.addr = alloca i64, align 8
  %h_p1 = alloca %"class.thrust::host_vector.835", align 8
  %h_p2 = alloca %"class.thrust::host_vector.835", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %h_pairs = alloca %"class.thrust::host_vector.844", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp22 = alloca %struct.make_pair_functor, align 1
  %coerce = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %d_p1 = alloca %"class.thrust::device_vector.853", align 8
  %d_p2 = alloca %"class.thrust::device_vector.853", align 8
  %d_pairs = alloca %"class.thrust::device_vector.865", align 8
  %h_keys = alloca %"class.thrust::host_vector.835", align 8
  %ref.tmp = alloca %"class.thrust::host_vector.73", align 8
  %d_keys = alloca %"class.thrust::device_vector.853", align 8
  %init = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp49 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp55 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp60 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp65 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp70 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp71 = alloca %"struct.thrust::equal_to.877", align 1
  %agg.tmp72 = alloca %struct.add_pairs, align 1
  %coerce83 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp86 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp94 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp102 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp110 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp118 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp119 = alloca %"struct.thrust::equal_to.877", align 1
  %agg.tmp120 = alloca %struct.add_pairs, align 1
  %coerce143 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %ref.tmp149 = alloca %"class.std::basic_string", align 8
  %ref.tmp150 = alloca %"class.std::allocator", align 1
  store %struct.TestPairScanByKey.833* %this, %struct.TestPairScanByKey.833** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %struct.TestPairScanByKey.833*, %struct.TestPairScanByKey.833** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.835"* %h_p1 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %0) #5
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN8unittest15random_integersIiEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.835"* sret %h_p1, i64 %1)
  %2 = bitcast %"class.thrust::host_vector.835"* %h_p2 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN8unittest15random_integersIiEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.835"* sret %h_p2, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %4 = bitcast %"class.thrust::host_vector.844"* %h_pairs to i8*
  call void @llvm.lifetime.start(i64 32, i8* %4) #5
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust11host_vectorINS_4pairIiiEESaIS2_EEC2Em(%"class.thrust::host_vector.844"* %h_pairs, i64 %5)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %6 = bitcast %"class.thrust::host_vector.835"* %h_p1 to %"class.thrust::detail::vector_base.836"*
  %call = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %6)
          to label %invoke.cont5 unwind label %lpad4

invoke.cont5:                                     ; preds = %invoke.cont3
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive6, align 8
  %7 = bitcast %"class.thrust::host_vector.835"* %h_p1 to %"class.thrust::detail::vector_base.836"*
  %call9 = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE3endEv(%"class.thrust::detail::vector_base.836"* %7)
          to label %invoke.cont8 unwind label %lpad4

invoke.cont8:                                     ; preds = %invoke.cont5
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive10, i32 0, i32 0
  store i32* %call9, i32** %coerce.dive11, align 8
  %8 = bitcast %"class.thrust::host_vector.835"* %h_p2 to %"class.thrust::detail::vector_base.836"*
  %call14 = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %8)
          to label %invoke.cont13 unwind label %lpad4

invoke.cont13:                                    ; preds = %invoke.cont8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp12, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive15, i32 0, i32 0
  store i32* %call14, i32** %coerce.dive16, align 8
  %9 = bitcast %"class.thrust::host_vector.844"* %h_pairs to %"class.thrust::detail::vector_base.845"*
  %call19 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %9)
          to label %invoke.cont18 unwind label %lpad4

invoke.cont18:                                    ; preds = %invoke.cont13
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp17, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call19, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive23, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive24, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp7, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive25, i32 0, i32 0
  %11 = load i32*, i32** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp12, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive27, i32 0, i32 0
  %12 = load i32*, i32** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive29, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive30, align 8
  %call32 = invoke %"struct.thrust::pair.82"* @_ZN6thrust9transformINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_(i32* %10, i32* %11, i32* %12, %"struct.thrust::pair.82"* %13)
          to label %invoke.cont31 unwind label %lpad4

invoke.cont31:                                    ; preds = %invoke.cont18
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %coerce, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive33, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call32, %"struct.thrust::pair.82"** %coerce.dive34, align 8
  %14 = bitcast %"class.thrust::device_vector.853"* %d_p1 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %14) #5
  invoke void @_ZN6thrust13device_vectorIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.853"* %d_p1, %"class.thrust::host_vector.835"* dereferenceable(32) %h_p1)
          to label %invoke.cont35 unwind label %lpad4

invoke.cont35:                                    ; preds = %invoke.cont31
  %15 = bitcast %"class.thrust::device_vector.853"* %d_p2 to i8*
  call void @llvm.lifetime.start(i64 32, i8* %15) #5
  invoke void @_ZN6thrust13device_vectorIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.853"* %d_p2, %"class.thrust::host_vector.835"* dereferenceable(32) %h_p2)
          to label %invoke.cont37 unwind label %lpad36

invoke.cont37:                                    ; preds = %invoke.cont35
  %16 = bitcast %"class.thrust::device_vector.865"* %d_pairs to i8*
  call void @llvm.lifetime.start(i64 32, i8* %16) #5
  invoke void @_ZN6thrust13device_vectorINS_4pairIiiEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.865"* %d_pairs, %"class.thrust::host_vector.844"* dereferenceable(32) %h_pairs)
          to label %invoke.cont39 unwind label %lpad38

invoke.cont39:                                    ; preds = %invoke.cont37
  %17 = bitcast %"class.thrust::host_vector.835"* %h_keys to i8*
  call void @llvm.lifetime.start(i64 32, i8* %17) #5
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN8unittest15random_integersIbEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.73"* sret %ref.tmp, i64 %18)
          to label %invoke.cont41 unwind label %lpad40

invoke.cont41:                                    ; preds = %invoke.cont39
  invoke void @_ZN6thrust11host_vectorIiSaIiEEC2IbSaIbEEERKNS0_IT_T0_EE(%"class.thrust::host_vector.835"* %h_keys, %"class.thrust::host_vector.73"* dereferenceable(32) %ref.tmp)
          to label %invoke.cont43 unwind label %lpad42

invoke.cont43:                                    ; preds = %invoke.cont41
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %ref.tmp) #5
  %19 = bitcast %"class.thrust::device_vector.853"* %d_keys to i8*
  call void @llvm.lifetime.start(i64 32, i8* %19) #5
  invoke void @_ZN6thrust13device_vectorIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.853"* %d_keys, %"class.thrust::host_vector.835"* dereferenceable(32) %h_keys)
          to label %invoke.cont45 unwind label %lpad44

invoke.cont45:                                    ; preds = %invoke.cont43
  %20 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.lifetime.start(i64 8, i8* %20) #5
  %call48 = invoke i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 13, i32 13)
          to label %invoke.cont47 unwind label %lpad46

invoke.cont47:                                    ; preds = %invoke.cont45
  %21 = bitcast %"struct.thrust::pair.82"* %init to i64*
  store i64 %call48, i64* %21, align 4
  %22 = bitcast %"class.thrust::host_vector.835"* %h_keys to %"class.thrust::detail::vector_base.836"*
  %call52 = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %22)
          to label %invoke.cont51 unwind label %lpad50

invoke.cont51:                                    ; preds = %invoke.cont47
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp49, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive53, i32 0, i32 0
  store i32* %call52, i32** %coerce.dive54, align 8
  %23 = bitcast %"class.thrust::host_vector.835"* %h_keys to %"class.thrust::detail::vector_base.836"*
  %call57 = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE3endEv(%"class.thrust::detail::vector_base.836"* %23)
          to label %invoke.cont56 unwind label %lpad50

invoke.cont56:                                    ; preds = %invoke.cont51
  %coerce.dive58 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp55, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive58, i32 0, i32 0
  store i32* %call57, i32** %coerce.dive59, align 8
  %24 = bitcast %"class.thrust::host_vector.844"* %h_pairs to %"class.thrust::detail::vector_base.845"*
  %call62 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %24)
          to label %invoke.cont61 unwind label %lpad50

invoke.cont61:                                    ; preds = %invoke.cont56
  %coerce.dive63 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp60, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive63, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call62, %"struct.thrust::pair.82"** %coerce.dive64, align 8
  %25 = bitcast %"class.thrust::host_vector.844"* %h_pairs to %"class.thrust::detail::vector_base.845"*
  %call67 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %25)
          to label %invoke.cont66 unwind label %lpad50

invoke.cont66:                                    ; preds = %invoke.cont61
  %coerce.dive68 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp65, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive68, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call67, %"struct.thrust::pair.82"** %coerce.dive69, align 8
  %26 = bitcast %"struct.thrust::pair.82"* %agg.tmp70 to i8*
  %27 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %26, i8* %27, i64 8, i32 4, i1 false), !tbaa.struct !471
  %coerce.dive73 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp49, i32 0, i32 0
  %coerce.dive74 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive73, i32 0, i32 0
  %28 = load i32*, i32** %coerce.dive74, align 8
  %coerce.dive75 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp55, i32 0, i32 0
  %coerce.dive76 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive75, i32 0, i32 0
  %29 = load i32*, i32** %coerce.dive76, align 8
  %coerce.dive77 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp60, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive77, i32 0, i32 0
  %30 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive78, align 8
  %coerce.dive79 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp65, i32 0, i32 0
  %coerce.dive80 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive79, i32 0, i32 0
  %31 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive80, align 8
  %32 = bitcast %"struct.thrust::pair.82"* %agg.tmp70 to i64*
  %33 = load i64, i64* %32, align 4
  %call82 = invoke %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPiEENS2_IPNS_4pairIiiEEEES8_S6_NS_8equal_toIiEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_(i32* %28, i32* %29, %"struct.thrust::pair.82"* %30, %"struct.thrust::pair.82"* %31, i64 %33)
          to label %invoke.cont81 unwind label %lpad50

invoke.cont81:                                    ; preds = %invoke.cont66
  %coerce.dive84 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %coerce83, i32 0, i32 0
  %coerce.dive85 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive84, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call82, %"struct.thrust::pair.82"** %coerce.dive85, align 8
  %34 = bitcast %"class.thrust::device_vector.853"* %d_keys to %"class.thrust::detail::vector_base.854"*
  %call88 = invoke i32* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::vector_base.854"* %34)
          to label %invoke.cont87 unwind label %lpad50

invoke.cont87:                                    ; preds = %invoke.cont81
  %coerce.dive89 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp86, i32 0, i32 0
  %coerce.dive90 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive89, i32 0, i32 0
  %coerce.dive91 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive90, i32 0, i32 0
  %coerce.dive92 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive91, i32 0, i32 0
  %coerce.dive93 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive92, i32 0, i32 0
  store i32* %call88, i32** %coerce.dive93, align 8
  %35 = bitcast %"class.thrust::device_vector.853"* %d_keys to %"class.thrust::detail::vector_base.854"*
  %call96 = invoke i32* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE3endEv(%"class.thrust::detail::vector_base.854"* %35)
          to label %invoke.cont95 unwind label %lpad50

invoke.cont95:                                    ; preds = %invoke.cont87
  %coerce.dive97 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp94, i32 0, i32 0
  %coerce.dive98 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive97, i32 0, i32 0
  %coerce.dive99 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive98, i32 0, i32 0
  %coerce.dive100 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive99, i32 0, i32 0
  %coerce.dive101 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive100, i32 0, i32 0
  store i32* %call96, i32** %coerce.dive101, align 8
  %36 = bitcast %"class.thrust::device_vector.865"* %d_pairs to %"class.thrust::detail::vector_base.866"*
  %call104 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.866"* %36)
          to label %invoke.cont103 unwind label %lpad50

invoke.cont103:                                   ; preds = %invoke.cont95
  %coerce.dive105 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp102, i32 0, i32 0
  %coerce.dive106 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive105, i32 0, i32 0
  %coerce.dive107 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive106, i32 0, i32 0
  %coerce.dive108 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive107, i32 0, i32 0
  %coerce.dive109 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive108, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call104, %"struct.thrust::pair.82"** %coerce.dive109, align 8
  %37 = bitcast %"class.thrust::device_vector.865"* %d_pairs to %"class.thrust::detail::vector_base.866"*
  %call112 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.866"* %37)
          to label %invoke.cont111 unwind label %lpad50

invoke.cont111:                                   ; preds = %invoke.cont103
  %coerce.dive113 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp110, i32 0, i32 0
  %coerce.dive114 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive113, i32 0, i32 0
  %coerce.dive115 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive114, i32 0, i32 0
  %coerce.dive116 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive115, i32 0, i32 0
  %coerce.dive117 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive116, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call112, %"struct.thrust::pair.82"** %coerce.dive117, align 8
  %38 = bitcast %"struct.thrust::pair.82"* %agg.tmp118 to i8*
  %39 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %38, i8* %39, i64 8, i32 4, i1 false), !tbaa.struct !471
  %coerce.dive121 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp86, i32 0, i32 0
  %coerce.dive122 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive121, i32 0, i32 0
  %coerce.dive123 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive122, i32 0, i32 0
  %coerce.dive124 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive123, i32 0, i32 0
  %coerce.dive125 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive124, i32 0, i32 0
  %40 = load i32*, i32** %coerce.dive125, align 8
  %coerce.dive126 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp94, i32 0, i32 0
  %coerce.dive127 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive126, i32 0, i32 0
  %coerce.dive128 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive127, i32 0, i32 0
  %coerce.dive129 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive128, i32 0, i32 0
  %coerce.dive130 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive129, i32 0, i32 0
  %41 = load i32*, i32** %coerce.dive130, align 8
  %coerce.dive131 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp102, i32 0, i32 0
  %coerce.dive132 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive131, i32 0, i32 0
  %coerce.dive133 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive132, i32 0, i32 0
  %coerce.dive134 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive133, i32 0, i32 0
  %coerce.dive135 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive134, i32 0, i32 0
  %42 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive135, align 8
  %coerce.dive136 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp110, i32 0, i32 0
  %coerce.dive137 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive136, i32 0, i32 0
  %coerce.dive138 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive137, i32 0, i32 0
  %coerce.dive139 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive138, i32 0, i32 0
  %coerce.dive140 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive139, i32 0, i32 0
  %43 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive140, align 8
  %44 = bitcast %"struct.thrust::pair.82"* %agg.tmp118 to i64*
  %45 = load i64, i64* %44, align 4
  %call142 = invoke %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIiEEEENS2_INS3_INS_4pairIiiEEEEEES9_S7_NS_8equal_toIiEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_(i32* %40, i32* %41, %"struct.thrust::pair.82"* %42, %"struct.thrust::pair.82"* %43, i64 %45)
          to label %invoke.cont141 unwind label %lpad50

invoke.cont141:                                   ; preds = %invoke.cont111
  %coerce.dive144 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %coerce143, i32 0, i32 0
  %coerce.dive145 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive144, i32 0, i32 0
  %coerce.dive146 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive145, i32 0, i32 0
  %coerce.dive147 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive146, i32 0, i32 0
  %coerce.dive148 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive147, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call142, %"struct.thrust::pair.82"** %coerce.dive148, align 8
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp150) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp149, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.22, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp150)
          to label %invoke.cont152 unwind label %lpad151

invoke.cont152:                                   ; preds = %invoke.cont141
  invoke void @_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIiiEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi(%"class.thrust::host_vector.844"* dereferenceable(32) %h_pairs, %"class.thrust::device_vector.865"* dereferenceable(32) %d_pairs, %"class.std::basic_string"* dereferenceable(8) %ref.tmp149, i32 57)
          to label %invoke.cont154 unwind label %lpad153

invoke.cont154:                                   ; preds = %invoke.cont152
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp149) #5
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp150) #5
  %46 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.lifetime.end(i64 8, i8* %46) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.854"*)* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev to void (%"class.thrust::device_vector.853"*)*)(%"class.thrust::device_vector.853"* %d_keys) #5
  %47 = bitcast %"class.thrust::device_vector.853"* %d_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %47) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %h_keys) #5
  %48 = bitcast %"class.thrust::host_vector.835"* %h_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %48) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.866"*)* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev to void (%"class.thrust::device_vector.865"*)*)(%"class.thrust::device_vector.865"* %d_pairs) #5
  %49 = bitcast %"class.thrust::device_vector.865"* %d_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %49) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.854"*)* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev to void (%"class.thrust::device_vector.853"*)*)(%"class.thrust::device_vector.853"* %d_p2) #5
  %50 = bitcast %"class.thrust::device_vector.853"* %d_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %50) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.854"*)* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev to void (%"class.thrust::device_vector.853"*)*)(%"class.thrust::device_vector.853"* %d_p1) #5
  %51 = bitcast %"class.thrust::device_vector.853"* %d_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %51) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.845"*)* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EED2Ev to void (%"class.thrust::host_vector.844"*)*)(%"class.thrust::host_vector.844"* %h_pairs) #5
  %52 = bitcast %"class.thrust::host_vector.844"* %h_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %52) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %h_p2) #5
  %53 = bitcast %"class.thrust::host_vector.835"* %h_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %53) #5
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %h_p1) #5
  %54 = bitcast %"class.thrust::host_vector.835"* %h_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %54) #5
  ret void

lpad:                                             ; preds = %entry
  %55 = landingpad { i8*, i32 }
          cleanup
  %56 = extractvalue { i8*, i32 } %55, 0
  store i8* %56, i8** %exn.slot, align 8
  %57 = extractvalue { i8*, i32 } %55, 1
  store i32 %57, i32* %ehselector.slot, align 4
  br label %ehcleanup170

lpad2:                                            ; preds = %invoke.cont
  %58 = landingpad { i8*, i32 }
          cleanup
  %59 = extractvalue { i8*, i32 } %58, 0
  store i8* %59, i8** %exn.slot, align 8
  %60 = extractvalue { i8*, i32 } %58, 1
  store i32 %60, i32* %ehselector.slot, align 4
  br label %ehcleanup168

lpad4:                                            ; preds = %invoke.cont31, %invoke.cont18, %invoke.cont13, %invoke.cont8, %invoke.cont5, %invoke.cont3
  %61 = landingpad { i8*, i32 }
          cleanup
  %62 = extractvalue { i8*, i32 } %61, 0
  store i8* %62, i8** %exn.slot, align 8
  %63 = extractvalue { i8*, i32 } %61, 1
  store i32 %63, i32* %ehselector.slot, align 4
  br label %ehcleanup166

lpad36:                                           ; preds = %invoke.cont35
  %64 = landingpad { i8*, i32 }
          cleanup
  %65 = extractvalue { i8*, i32 } %64, 0
  store i8* %65, i8** %exn.slot, align 8
  %66 = extractvalue { i8*, i32 } %64, 1
  store i32 %66, i32* %ehselector.slot, align 4
  br label %ehcleanup164

lpad38:                                           ; preds = %invoke.cont37
  %67 = landingpad { i8*, i32 }
          cleanup
  %68 = extractvalue { i8*, i32 } %67, 0
  store i8* %68, i8** %exn.slot, align 8
  %69 = extractvalue { i8*, i32 } %67, 1
  store i32 %69, i32* %ehselector.slot, align 4
  br label %ehcleanup162

lpad40:                                           ; preds = %invoke.cont39
  %70 = landingpad { i8*, i32 }
          cleanup
  %71 = extractvalue { i8*, i32 } %70, 0
  store i8* %71, i8** %exn.slot, align 8
  %72 = extractvalue { i8*, i32 } %70, 1
  store i32 %72, i32* %ehselector.slot, align 4
  br label %ehcleanup160

lpad42:                                           ; preds = %invoke.cont41
  %73 = landingpad { i8*, i32 }
          cleanup
  %74 = extractvalue { i8*, i32 } %73, 0
  store i8* %74, i8** %exn.slot, align 8
  %75 = extractvalue { i8*, i32 } %73, 1
  store i32 %75, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::vector_base.74"*)* @_ZN6thrust6detail11vector_baseIbSaIbEED2Ev to void (%"class.thrust::host_vector.73"*)*)(%"class.thrust::host_vector.73"* %ref.tmp) #5
  br label %ehcleanup160

lpad44:                                           ; preds = %invoke.cont43
  %76 = landingpad { i8*, i32 }
          cleanup
  %77 = extractvalue { i8*, i32 } %76, 0
  store i8* %77, i8** %exn.slot, align 8
  %78 = extractvalue { i8*, i32 } %76, 1
  store i32 %78, i32* %ehselector.slot, align 4
  br label %ehcleanup158

lpad46:                                           ; preds = %invoke.cont45
  %79 = landingpad { i8*, i32 }
          cleanup
  %80 = extractvalue { i8*, i32 } %79, 0
  store i8* %80, i8** %exn.slot, align 8
  %81 = extractvalue { i8*, i32 } %79, 1
  store i32 %81, i32* %ehselector.slot, align 4
  br label %ehcleanup156

lpad50:                                           ; preds = %invoke.cont111, %invoke.cont103, %invoke.cont95, %invoke.cont87, %invoke.cont81, %invoke.cont66, %invoke.cont61, %invoke.cont56, %invoke.cont51, %invoke.cont47
  %82 = landingpad { i8*, i32 }
          cleanup
  %83 = extractvalue { i8*, i32 } %82, 0
  store i8* %83, i8** %exn.slot, align 8
  %84 = extractvalue { i8*, i32 } %82, 1
  store i32 %84, i32* %ehselector.slot, align 4
  br label %ehcleanup155

lpad151:                                          ; preds = %invoke.cont141
  %85 = landingpad { i8*, i32 }
          cleanup
  %86 = extractvalue { i8*, i32 } %85, 0
  store i8* %86, i8** %exn.slot, align 8
  %87 = extractvalue { i8*, i32 } %85, 1
  store i32 %87, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad153:                                          ; preds = %invoke.cont152
  %88 = landingpad { i8*, i32 }
          cleanup
  %89 = extractvalue { i8*, i32 } %88, 0
  store i8* %89, i8** %exn.slot, align 8
  %90 = extractvalue { i8*, i32 } %88, 1
  store i32 %90, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp149) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad153, %lpad151
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp150) #5
  br label %ehcleanup155

ehcleanup155:                                     ; preds = %ehcleanup, %lpad50
  %91 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.lifetime.end(i64 8, i8* %91) #5
  br label %ehcleanup156

ehcleanup156:                                     ; preds = %ehcleanup155, %lpad46
  call void bitcast (void (%"class.thrust::detail::vector_base.854"*)* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev to void (%"class.thrust::device_vector.853"*)*)(%"class.thrust::device_vector.853"* %d_keys) #5
  %92 = bitcast %"class.thrust::device_vector.853"* %d_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %92) #5
  br label %ehcleanup158

ehcleanup158:                                     ; preds = %ehcleanup156, %lpad44
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %h_keys) #5
  %93 = bitcast %"class.thrust::host_vector.835"* %h_keys to i8*
  call void @llvm.lifetime.end(i64 32, i8* %93) #5
  br label %ehcleanup160

ehcleanup160:                                     ; preds = %ehcleanup158, %lpad42, %lpad40
  call void bitcast (void (%"class.thrust::detail::vector_base.866"*)* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev to void (%"class.thrust::device_vector.865"*)*)(%"class.thrust::device_vector.865"* %d_pairs) #5
  %94 = bitcast %"class.thrust::device_vector.865"* %d_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %94) #5
  br label %ehcleanup162

ehcleanup162:                                     ; preds = %ehcleanup160, %lpad38
  call void bitcast (void (%"class.thrust::detail::vector_base.854"*)* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev to void (%"class.thrust::device_vector.853"*)*)(%"class.thrust::device_vector.853"* %d_p2) #5
  %95 = bitcast %"class.thrust::device_vector.853"* %d_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %95) #5
  br label %ehcleanup164

ehcleanup164:                                     ; preds = %ehcleanup162, %lpad36
  call void bitcast (void (%"class.thrust::detail::vector_base.854"*)* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev to void (%"class.thrust::device_vector.853"*)*)(%"class.thrust::device_vector.853"* %d_p1) #5
  %96 = bitcast %"class.thrust::device_vector.853"* %d_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %96) #5
  br label %ehcleanup166

ehcleanup166:                                     ; preds = %ehcleanup164, %lpad4
  call void bitcast (void (%"class.thrust::detail::vector_base.845"*)* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EED2Ev to void (%"class.thrust::host_vector.844"*)*)(%"class.thrust::host_vector.844"* %h_pairs) #5
  %97 = bitcast %"class.thrust::host_vector.844"* %h_pairs to i8*
  call void @llvm.lifetime.end(i64 32, i8* %97) #5
  br label %ehcleanup168

ehcleanup168:                                     ; preds = %ehcleanup166, %lpad2
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %h_p2) #5
  %98 = bitcast %"class.thrust::host_vector.835"* %h_p2 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %98) #5
  br label %ehcleanup170

ehcleanup170:                                     ; preds = %ehcleanup168, %lpad
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %h_p1) #5
  %99 = bitcast %"class.thrust::host_vector.835"* %h_p1 to i8*
  call void @llvm.lifetime.end(i64 32, i8* %99) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup170
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val172 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val172
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN8unittest13for_each_typeINS_9type_listIasiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_S2_EE17TestPairScanByKeyS2_Lj3EEclImEEvT_(%"struct.unittest::for_each_type.834"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::for_each_type.834"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.unittest::for_each_type.834"* %this, %"struct.unittest::for_each_type.834"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"struct.unittest::for_each_type.834"*, %"struct.unittest::for_each_type.834"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest15random_integersIiEEN6thrust11host_vectorIT_SaIS3_EEEm(%"class.thrust::host_vector.835"* noalias sret %agg.result, i64 %N) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %N.addr = alloca i64, align 8
  %nrvo = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp1 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp6 = alloca %"struct.unittest::random_integer.878", align 1
  %coerce = alloca %"class.thrust::detail::normal_iterator.841", align 8
  store i64 %N, i64* %N.addr, align 8, !tbaa !13
  store i1 false, i1* %nrvo, align 1
  %0 = load i64, i64* %N.addr, align 8, !tbaa !13
  call void @_ZN6thrust11host_vectorIiSaIiEEC2Em(%"class.thrust::host_vector.835"* %agg.result, i64 %0)
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp, i64 0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %1 = load i64, i64* %N.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2Em(%"class.thrust::counting_iterator"* %agg.tmp1, i64 %1)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %2 = bitcast %"class.thrust::host_vector.835"* %agg.result to %"class.thrust::detail::vector_base.836"*
  %call = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive5, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive7, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive8, align 8
  %call10 = invoke i32* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp1, i32* %3)
          to label %invoke.cont9 unwind label %lpad

invoke.cont9:                                     ; preds = %invoke.cont4
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %coerce, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive11, i32 0, i32 0
  store i32* %call10, i32** %coerce.dive12, align 8
  store i1 true, i1* %nrvo, align 1
  %nrvo.val = load i1, i1* %nrvo, align 1
  br i1 %nrvo.val, label %nrvo.skipdtor, label %nrvo.unused

lpad:                                             ; preds = %invoke.cont4, %invoke.cont2, %invoke.cont, %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %agg.result) #5
  br label %eh.resume

nrvo.unused:                                      ; preds = %invoke.cont9
  call void bitcast (void (%"class.thrust::detail::vector_base.836"*)* @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev to void (%"class.thrust::host_vector.835"*)*)(%"class.thrust::host_vector.835"* %agg.result) #5
  br label %nrvo.skipdtor

nrvo.skipdtor:                                    ; preds = %nrvo.unused, %invoke.cont9
  ret void

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorINS_4pairIiiEESaIS2_EEC2Em(%"class.thrust::host_vector.844"* %this, i64 %n) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.844"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::host_vector.844"* %this, %"class.thrust::host_vector.844"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::host_vector.844"*, %"class.thrust::host_vector.844"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.844"* %this1 to %"class.thrust::detail::vector_base.845"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEC2Em(%"class.thrust::detail::vector_base.845"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust9transformINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEE17make_pair_functorEET1_T_SB_T0_SA_T2_(i32* %first1.coerce, i32* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp11 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive2, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive4, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %3, %"struct.thrust::execution_policy.88"* dereferenceable(1) %4, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %7 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp8 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.841"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp9 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.841"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"class.thrust::detail::normal_iterator.850"* %agg.tmp10 to i8*
  %14 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive12, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive14, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive16, i32 0, i32 0
  %17 = load i32*, i32** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive18, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair.82"* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPiEES8_NS6_IPNS_4pairIiiEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6, i32* %15, i32* %16, i32* %17, %"struct.thrust::pair.82"* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive21, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call20, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %19 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %19) #5
  %20 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %20) #5
  %21 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %21) #5
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive23, i32 0, i32 0
  %22 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive24, align 8
  ret %"struct.thrust::pair.82"* %22
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  %call = call i32* @_ZN6thrust6detail18contiguous_storageIiSaIiEE5beginEv(%"class.thrust::detail::contiguous_storage.837"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive3, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive4, align 8
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail11vector_baseIiSaIiEE3endEv(%"class.thrust::detail::vector_base.836"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %call = call i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE4sizeEv(%"class.thrust::detail::vector_base.836"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive4, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.846"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive3, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust13device_vectorIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.853"* %this, %"class.thrust::host_vector.835"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_vector.853"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.835"*, align 8
  store %"class.thrust::device_vector.853"* %this, %"class.thrust::device_vector.853"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.835"* %v, %"class.thrust::host_vector.835"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_vector.853"*, %"class.thrust::device_vector.853"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_vector.853"* %this1 to %"class.thrust::detail::vector_base.854"*
  %1 = load %"class.thrust::host_vector.835"*, %"class.thrust::host_vector.835"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.835"* %1 to %"class.thrust::detail::vector_base.836"*
  call void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.854"* %0, %"class.thrust::detail::vector_base.836"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust13device_vectorINS_4pairIiiEENS_23device_malloc_allocatorIS2_EEEC2IS2_SaIS2_EEERKNS_11host_vectorIT_T0_EE(%"class.thrust::device_vector.865"* %this, %"class.thrust::host_vector.844"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_vector.865"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.844"*, align 8
  store %"class.thrust::device_vector.865"* %this, %"class.thrust::device_vector.865"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.844"* %v, %"class.thrust::host_vector.844"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_vector.865"*, %"class.thrust::device_vector.865"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_vector.865"* %this1 to %"class.thrust::detail::vector_base.866"*
  %1 = load %"class.thrust::host_vector.844"*, %"class.thrust::host_vector.844"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.844"* %1 to %"class.thrust::detail::vector_base.845"*
  call void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.866"* %0, %"class.thrust::detail::vector_base.845"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorIiSaIiEEC2IbSaIbEEERKNS0_IT_T0_EE(%"class.thrust::host_vector.835"* %this, %"class.thrust::host_vector.73"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.835"*, align 8
  %v.addr = alloca %"class.thrust::host_vector.73"*, align 8
  store %"class.thrust::host_vector.835"* %this, %"class.thrust::host_vector.835"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::host_vector.73"* %v, %"class.thrust::host_vector.73"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::host_vector.835"*, %"class.thrust::host_vector.835"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.835"* %this1 to %"class.thrust::detail::vector_base.836"*
  %1 = load %"class.thrust::host_vector.73"*, %"class.thrust::host_vector.73"** %v.addr, align 8
  %2 = bitcast %"class.thrust::host_vector.73"* %1 to %"class.thrust::detail::vector_base.74"*
  call void @_ZN6thrust6detail11vector_baseIiSaIiEEC2IbSaIbEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.836"* %0, %"class.thrust::detail::vector_base.74"* dereferenceable(32) %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorIPiEENS2_IPNS_4pairIiiEEEES8_S6_NS_8equal_toIiEE9add_pairsEET1_T_SD_T0_SC_T2_T3_T4_(i32* %first1.coerce, i32* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, i64 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %init = alloca %"struct.thrust::pair.82", align 4
  %binary_pred = alloca %"struct.thrust::equal_to.877", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp12 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp13 = alloca %"struct.thrust::equal_to.877", align 1
  %agg.tmp14 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive2, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::pair.82"* %init to i64*
  store i64 %init.coerce, i64* %0, align 4
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %4, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5, %"struct.thrust::execution_policy.88"* dereferenceable(1) %6)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp9 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.841"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.850"* %agg.tmp10 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.850"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.850"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::pair.82"* %agg.tmp12 to i8*
  %17 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 4, i1 false), !tbaa.struct !471
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive15, i32 0, i32 0
  %18 = load i32*, i32** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp9, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive17, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp10, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive19, i32 0, i32 0
  %20 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive20, align 8
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp11, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive21, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %22 = bitcast %"struct.thrust::pair.82"* %agg.tmp12 to i64*
  %23 = load i64, i64* %22, align 4
  %call23 = call %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPiEENS6_IPNS_4pairIiiEEEESC_SA_NS_8equal_toIiEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %7, i32* %18, i32* %19, %"struct.thrust::pair.82"* %20, %"struct.thrust::pair.82"* %21, i64 %23)
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive24, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call23, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  %24 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %24) #5
  %25 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %25) #5
  %26 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %26) #5
  %coerce.dive26 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive26, i32 0, i32 0
  %27 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  ret %"struct.thrust::pair.82"* %27
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6detail15normal_iteratorINS_10device_ptrIiEEEENS2_INS3_INS_4pairIiiEEEEEES9_S7_NS_8equal_toIiEE9add_pairsEET1_T_SE_T0_SD_T2_T3_T4_(i32* %first1.coerce, i32* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, i64 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %init = alloca %"struct.thrust::pair.82", align 4
  %binary_pred = alloca %"struct.thrust::equal_to.877", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %system1 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %system3 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp23 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp24 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp25 = alloca %"struct.thrust::equal_to.877", align 1
  %agg.tmp26 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair.82"* %init to i64*
  store i64 %init.coerce, i64* %0, align 4
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %2) #5
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %4 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to %"struct.thrust::execution_policy.120"*
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to %"struct.thrust::execution_policy.120"*
  %6 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to %"struct.thrust::execution_policy.120"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_4cuda6detail3tagES6_S6_EERNS_6detail15lazy_disable_ifIXsr21select_system3_existsIT_T0_T1_EE5valueENS7_14minimum_systemIS9_SA_SB_NS7_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyIS9_EERNSJ_ISA_EERNSJ_ISB_EE(%"struct.thrust::execution_policy.120"* dereferenceable(1) %4, %"struct.thrust::execution_policy.120"* dereferenceable(1) %5, %"struct.thrust::execution_policy.120"* dereferenceable(1) %6)
  %7 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.858"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp21 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.858"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp22 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.870"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp23 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::pair.82"* %agg.tmp24 to i8*
  %17 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 4, i1 false), !tbaa.struct !471
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive30, i32 0, i32 0
  %18 = load i32*, i32** %coerce.dive31, align 8
  %coerce.dive32 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp21, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive35, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp22, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive40, i32 0, i32 0
  %20 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive41, align 8
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp23, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive45, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive46, align 8
  %22 = bitcast %"struct.thrust::pair.82"* %agg.tmp24 to i64*
  %23 = load i64, i64* %22, align 4
  %call47 = call %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS6_INS7_INS_4pairIiiEEEEEESD_SB_NS_8equal_toIiEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %7, i32* %18, i32* %19, %"struct.thrust::pair.82"* %20, %"struct.thrust::pair.82"* %21, i64 %23)
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive50, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive51, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call47, %"struct.thrust::pair.82"** %coerce.dive52, align 8
  %24 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system3 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %24) #5
  %25 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %25) #5
  %26 = bitcast %"struct.thrust::system::cuda::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %26) #5
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive56, i32 0, i32 0
  %27 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive57, align 8
  ret %"struct.thrust::pair.82"* %27
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::vector_base.854"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 0
  %call = call i32* @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::contiguous_storage.855"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  store i32* %call, i32** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive9, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive10, align 8
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE3endEv(%"class.thrust::detail::vector_base.854"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %call = call i32* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::vector_base.854"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  store i32* %call, i32** %coerce.dive5, align 8
  %call6 = call i64 @_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE4sizeEv(%"class.thrust::detail::vector_base.854"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %retval, i64 %call6)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive10, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive11, align 8
  ret i32* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.866"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.867"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive9, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest18assert_equal_quietIN6thrust11host_vectorINS1_4pairIiiEESaIS4_EEENS1_13device_vectorIS4_NS1_23device_malloc_allocatorIS4_EEEEEEvRKT_RKT0_RKSsi(%"class.thrust::host_vector.844"* dereferenceable(32) %a, %"class.thrust::device_vector.865"* dereferenceable(32) %b, %"class.std::basic_string"* dereferenceable(8) %filename, i32 %lineno) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %a.addr = alloca %"class.thrust::host_vector.844"*, align 8
  %b.addr = alloca %"class.thrust::device_vector.865"*, align 8
  %filename.addr = alloca %"class.std::basic_string"*, align 8
  %lineno.addr = alloca i32, align 4
  %f = alloca %"class.unittest::UnitTestFailure", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %ref.tmp = alloca %"class.std::basic_string", align 8
  store %"class.thrust::host_vector.844"* %a, %"class.thrust::host_vector.844"** %a.addr, align 8, !tbaa !7
  store %"class.thrust::device_vector.865"* %b, %"class.thrust::device_vector.865"** %b.addr, align 8, !tbaa !7
  store %"class.std::basic_string"* %filename, %"class.std::basic_string"** %filename.addr, align 8, !tbaa !7
  store i32 %lineno, i32* %lineno.addr, align 4, !tbaa !11
  %0 = load %"class.thrust::host_vector.844"*, %"class.thrust::host_vector.844"** %a.addr, align 8
  %1 = bitcast %"class.thrust::host_vector.844"* %0 to %"class.thrust::detail::vector_base.845"*
  %2 = load %"class.thrust::device_vector.865"*, %"class.thrust::device_vector.865"** %b.addr, align 8
  %3 = bitcast %"class.thrust::device_vector.865"* %2 to %"class.thrust::detail::vector_base.866"*
  %call = call zeroext i1 @_ZN6thrusteqINS_4pairIiiEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE(%"class.thrust::detail::vector_base.845"* dereferenceable(32) %1, %"class.thrust::detail::vector_base.866"* dereferenceable(32) %3)
  br i1 %call, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  %4 = bitcast %"class.unittest::UnitTestFailure"* %f to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  call void @_ZN8unittest15UnitTestFailureC2Ev(%"class.unittest::UnitTestFailure"* %f)
  %5 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call1 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_(%"class.unittest::UnitTestException"* %5, [2 x i8]* dereferenceable(2) @.str.45)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %6 = load %"class.std::basic_string"*, %"class.std::basic_string"** %filename.addr, align 8
  %call3 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_(%"class.unittest::UnitTestException"* %call1, %"class.std::basic_string"* dereferenceable(8) %6)
          to label %invoke.cont2 unwind label %lpad

invoke.cont2:                                     ; preds = %invoke.cont
  %call5 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA2_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call3, [2 x i8]* dereferenceable(2) @.str.46)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont2
  %call7 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIiEERS0_RKT_(%"class.unittest::UnitTestException"* %call5, i32* dereferenceable(4) %lineno.addr)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont4
  %call9 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call7, [3 x i8]* dereferenceable(3) @.str.47)
          to label %invoke.cont8 unwind label %lpad

invoke.cont8:                                     ; preds = %invoke.cont6
  %7 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call11 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA22_cEERS0_RKT_(%"class.unittest::UnitTestException"* %7, [22 x i8]* dereferenceable(22) @.str.48)
          to label %invoke.cont10 unwind label %lpad

invoke.cont10:                                    ; preds = %invoke.cont8
  %8 = bitcast %"class.unittest::UnitTestFailure"* %f to %"class.unittest::UnitTestException"*
  %call13 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA9_cEERS0_RKT_(%"class.unittest::UnitTestException"* %8, [9 x i8]* dereferenceable(9) @.str.49)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont10
  invoke void @_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIiiEESaIS4_EEEEESsv(%"class.std::basic_string"* sret %ref.tmp)
          to label %invoke.cont14 unwind label %lpad

invoke.cont14:                                    ; preds = %invoke.cont12
  %call17 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsISsEERS0_RKT_(%"class.unittest::UnitTestException"* %call13, %"class.std::basic_string"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont16 unwind label %lpad15

invoke.cont16:                                    ; preds = %invoke.cont14
  %call19 = invoke dereferenceable(8) %"class.unittest::UnitTestException"* @_ZN8unittest17UnitTestExceptionlsIA3_cEERS0_RKT_(%"class.unittest::UnitTestException"* %call17, [3 x i8]* dereferenceable(3) @.str.50)
          to label %invoke.cont18 unwind label %lpad15

invoke.cont18:                                    ; preds = %invoke.cont16
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %9 = bitcast i8* %exception to %"class.unittest::UnitTestFailure"*
  call void @_ZN8unittest15UnitTestFailureC2EOS0_(%"class.unittest::UnitTestFailure"* %9, %"class.unittest::UnitTestFailure"* dereferenceable(8) %f) #5
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN8unittest15UnitTestFailureE to i8*), i8* bitcast (void (%"class.unittest::UnitTestException"*)* @_ZN8unittest17UnitTestExceptionD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad

lpad:                                             ; preds = %invoke.cont18, %invoke.cont12, %invoke.cont10, %invoke.cont8, %invoke.cont6, %invoke.cont4, %invoke.cont2, %invoke.cont, %if.then
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad15:                                           ; preds = %invoke.cont16, %invoke.cont14
  %13 = landingpad { i8*, i32 }
          cleanup
  %14 = extractvalue { i8*, i32 } %13, 0
  store i8* %14, i8** %exn.slot, align 8
  %15 = extractvalue { i8*, i32 } %13, 1
  store i32 %15, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad15, %lpad
  call void bitcast (void (%"class.unittest::UnitTestException"*)* @_ZN8unittest17UnitTestExceptionD2Ev to void (%"class.unittest::UnitTestFailure"*)*)(%"class.unittest::UnitTestFailure"* %f) #5
  %16 = bitcast %"class.unittest::UnitTestFailure"* %f to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  ret void

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val21 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val21

unreachable:                                      ; preds = %invoke.cont18
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEED2Ev(%"class.thrust::detail::vector_base.854"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp6 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 0
  %call = invoke i32* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::vector_base.854"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  store i32* %call, i32** %coerce.dive5, align 8
  %call8 = invoke i32* @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE3endEv(%"class.thrust::detail::vector_base.854"* %this1)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %invoke.cont
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp6, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive12, i32 0, i32 0
  store i32* %call8, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive17, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp6, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive22, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive23, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE7destroyENS0_15normal_iteratorINS_10device_ptrIiEEEES8_(%"class.thrust::detail::contiguous_storage.855"* %m_storage, i32* %0, i32* %1)
          to label %invoke.cont24 unwind label %lpad

invoke.cont24:                                    ; preds = %invoke.cont7
  %m_storage25 = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEED2Ev(%"class.thrust::detail::contiguous_storage.855"* %m_storage25) #5
  ret void

lpad:                                             ; preds = %invoke.cont7, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage26 = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEED2Ev(%"class.thrust::detail::contiguous_storage.855"* %m_storage26) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiSaIiEED2Ev(%"class.thrust::detail::vector_base.836"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  %call = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %call5 = invoke i32* @_ZN6thrust6detail11vector_baseIiSaIiEE3endEv(%"class.thrust::detail::vector_base.836"* %this1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp3, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive6, i32 0, i32 0
  store i32* %call5, i32** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive8, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp3, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive10, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive11, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiSaIiEE7destroyENS0_15normal_iteratorIPiEES6_(%"class.thrust::detail::contiguous_storage.837"* %m_storage, i32* %0, i32* %1)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont4
  %m_storage13 = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEED2Ev(%"class.thrust::detail::contiguous_storage.837"* %m_storage13) #5
  ret void

lpad:                                             ; preds = %invoke.cont4, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage14 = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEED2Ev(%"class.thrust::detail::contiguous_storage.837"* %m_storage14) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::vector_base.866"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp6 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  %call = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.866"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %call8 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE3endEv(%"class.thrust::detail::vector_base.866"* %this1)
          to label %invoke.cont7 unwind label %lpad

invoke.cont7:                                     ; preds = %invoke.cont
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp6, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call8, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive17, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp6, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive22, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.867"* %m_storage, %"struct.thrust::pair.82"* %0, %"struct.thrust::pair.82"* %1)
          to label %invoke.cont24 unwind label %lpad

invoke.cont24:                                    ; preds = %invoke.cont7
  %m_storage25 = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.867"* %m_storage25) #5
  ret void

lpad:                                             ; preds = %invoke.cont7, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          catch i8* null
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage26 = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.867"* %m_storage26) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EED2Ev(%"class.thrust::detail::vector_base.845"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  %call = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %call5 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.845"* %this1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp3, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call5, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive8, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp3, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive10, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_(%"class.thrust::detail::contiguous_storage.846"* %m_storage, %"struct.thrust::pair.82"* %0, %"struct.thrust::pair.82"* %1)
          to label %invoke.cont12 unwind label %lpad

invoke.cont12:                                    ; preds = %invoke.cont4
  %m_storage13 = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.846"* %m_storage13) #5
  ret void

lpad:                                             ; preds = %invoke.cont4, %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  %m_storage14 = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.846"* %m_storage14) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust11host_vectorIiSaIiEEC2Em(%"class.thrust::host_vector.835"* %this, i64 %n) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::host_vector.835"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::host_vector.835"* %this, %"class.thrust::host_vector.835"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::host_vector.835"*, %"class.thrust::host_vector.835"** %this.addr, align 8
  %0 = bitcast %"class.thrust::host_vector.835"* %this1 to %"class.thrust::detail::vector_base.836"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail11vector_baseIiSaIiEEC2Em(%"class.thrust::detail::vector_base.836"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust9transformINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET0_T_SC_SB_T1_(%"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %op = alloca %"struct.unittest::random_integer.878", align 1
  %system1 = alloca %"struct.thrust::any_system_tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp2 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp4 = alloca %"struct.unittest::random_integer.878", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  %0 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::any_system_tag"* %system1 to %"struct.thrust::execution_policy.89"*
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS_14any_system_tagENS0_3cpp6detail3tagEEERNS_6detail17enable_if_definedINS8_14minimum_systemIT_T0_NS8_19minimum_type_detail14any_conversionESE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_SE_EEE4typeERNS_16execution_policyISB_EERNSJ_ISC_EE(%"struct.thrust::execution_policy.89"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %5 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.841"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp3, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive5, i32 0, i32 0
  %7 = load i32*, i32** %coerce.dive6, align 8
  %call7 = call i32* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp2, i32* %7)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive8, i32 0, i32 0
  store i32* %call7, i32** %coerce.dive9, align 8
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %8) #5
  %9 = bitcast %"struct.thrust::any_system_tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %9) #5
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive10, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive11, align 8
  ret i32* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiSaIiEEC2Em(%"class.thrust::detail::vector_base.836"* %this, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.std::allocator.838", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  call void @_ZNSaIiEC2Ev(%"class.std::allocator.838"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageIiSaIiEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.837"* %m_storage, %"class.std::allocator.838"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.839"*)* @_ZN9__gnu_cxx13new_allocatorIiED2Ev to void (%"class.std::allocator.838"*)*)(%"class.std::allocator.838"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !472
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail11vector_baseIiSaIiEE12default_initEm(%"class.thrust::detail::vector_base.836"* %this1, i64 %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.839"*)* @_ZN9__gnu_cxx13new_allocatorIiED2Ev to void (%"class.std::allocator.838"*)*)(%"class.std::allocator.838"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEED2Ev(%"class.thrust::detail::contiguous_storage.837"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIiEC2Ev(%"class.std::allocator.838"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.838"*, align 8
  store %"class.std::allocator.838"* %this, %"class.std::allocator.838"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.838"* %this1 to %"class.__gnu_cxx::new_allocator.839"*
  call void @_ZN9__gnu_cxx13new_allocatorIiEC2Ev(%"class.__gnu_cxx::new_allocator.839"* %0) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiSaIiEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.837"* %this, %"class.std::allocator.838"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %alloc.addr = alloca %"class.std::allocator.838"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.838"* %alloc, %"class.std::allocator.838"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %alloc.addr, align 8
  call void @_ZNSaIiEC2ERKS_(%"class.std::allocator.838"* %m_allocator, %"class.std::allocator.838"* dereferenceable(1) %0) #5
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust6detail15normal_iteratorIPiEC2ES2_(%"class.thrust::detail::normal_iterator.841"* %m_begin, i32* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !477
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.839"*)* @_ZN9__gnu_cxx13new_allocatorIiED2Ev to void (%"class.std::allocator.838"*)*)(%"class.std::allocator.838"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIiED2Ev(%"class.__gnu_cxx::new_allocator.839"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.839"*, align 8
  store %"class.__gnu_cxx::new_allocator.839"* %this, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.839"*, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiSaIiEE12default_initEm(%"class.thrust::detail::vector_base.836"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEE8allocateEm(%"class.thrust::detail::contiguous_storage.837"* %m_storage, i64 %1)
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 1
  store i64 %2, i64* %m_size, align 8, !tbaa !472
  %m_storage2 = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  %call = call i32* @_ZN6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive3, align 8
  %call4 = call i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE4sizeEv(%"class.thrust::detail::vector_base.836"* %this1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive5, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive6, align 8
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEE19default_construct_nENS0_15normal_iteratorIPiEEm(%"class.thrust::detail::contiguous_storage.837"* %m_storage2, i32* %3, i64 %call4)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiSaIiEED2Ev(%"class.thrust::detail::contiguous_storage.837"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiSaIiEE10deallocateEv(%"class.thrust::detail::contiguous_storage.837"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.839"*)* @_ZN9__gnu_cxx13new_allocatorIiED2Ev to void (%"class.std::allocator.838"*)*)(%"class.std::allocator.838"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.839"*)* @_ZN9__gnu_cxx13new_allocatorIiED2Ev to void (%"class.std::allocator.838"*)*)(%"class.std::allocator.838"* %m_allocator2) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIiEC2Ev(%"class.__gnu_cxx::new_allocator.839"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.839"*, align 8
  store %"class.__gnu_cxx::new_allocator.839"* %this, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.839"*, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIiEC2ERKS_(%"class.std::allocator.838"* %this, %"class.std::allocator.838"* dereferenceable(1) %__a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.838"*, align 8
  %__a.addr = alloca %"class.std::allocator.838"*, align 8
  store %"class.std::allocator.838"* %this, %"class.std::allocator.838"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.838"* %__a, %"class.std::allocator.838"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.838"* %this1 to %"class.__gnu_cxx::new_allocator.839"*
  %1 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator.838"* %1 to %"class.__gnu_cxx::new_allocator.839"*
  call void @_ZN9__gnu_cxx13new_allocatorIiEC2ERKS1_(%"class.__gnu_cxx::new_allocator.839"* %0, %"class.__gnu_cxx::new_allocator.839"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPiEC2ES2_(%"class.thrust::detail::normal_iterator.841"* %this, i32* %p) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %p.addr = alloca i32*, align 8
  store %"class.thrust::detail::normal_iterator.841"* %this, %"class.thrust::detail::normal_iterator.841"** %this.addr, align 8, !tbaa !1
  store i32* %p, i32** %p.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.841"* %this1 to %"class.thrust::iterator_adaptor.842"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor.842"* %0, i32** dereferenceable(8) %p.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIiEC2ERKS1_(%"class.__gnu_cxx::new_allocator.839"* %this, %"class.__gnu_cxx::new_allocator.839"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.839"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator.839"*, align 8
  store %"class.__gnu_cxx::new_allocator.839"* %this, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator.839"* %0, %"class.__gnu_cxx::new_allocator.839"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator.839"*, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_EC2ERKS3_(%"class.thrust::iterator_adaptor.842"* %this, i32** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  %iter.addr = alloca i32**, align 8
  store %"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8, !tbaa !1
  store i32** %iter, i32*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.842"* %this1 to %"class.thrust::iterator_facade.843"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %this1, i32 0, i32 0
  %1 = load i32**, i32*** %iter.addr, align 8
  %2 = load i32*, i32** %1, align 8, !tbaa !1
  store i32* %2, i32** %m_iterator, align 8, !tbaa !478
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiSaIiEE8allocateEm(%"class.thrust::detail::contiguous_storage.837"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %ref.tmp3 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZN6thrust6detail16allocator_traitsISaIiEE8allocateERS2_m(%"class.std::allocator.838"* dereferenceable(1) %m_allocator, i64 %1)
  call void @_ZN6thrust6detail15normal_iteratorIPiEC2ES2_(%"class.thrust::detail::normal_iterator.841"* %ref.tmp, i32* %call)
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %m_begin to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 2
  store i64 %4, i64* %m_size, align 8, !tbaa !477
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPiEC2ES2_(%"class.thrust::detail::normal_iterator.841"* %ref.tmp3, i32* null)
  %5 = bitcast %"class.thrust::detail::normal_iterator.841"* %m_begin2 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.841"* %ref.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size4, align 8, !tbaa !477
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiSaIiEE19default_construct_nENS0_15normal_iteratorIPiEEm(%"class.thrust::detail::contiguous_storage.837"* %this, i32* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %n.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this2, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.841"* %first to %"class.thrust::iterator_adaptor.842"*
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23default_construct_rangeISaIiEPimEEvRT_T0_T1_(%"class.std::allocator.838"* dereferenceable(1) %m_allocator, i32* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE4sizeEv(%"class.thrust::detail::vector_base.836"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !472
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust6detail16allocator_traitsISaIiEE8allocateERS2_m(%"class.std::allocator.838"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZZN6thrust6detail16allocator_traitsISaIiEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.838"* dereferenceable(1) %0, i64 %1)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZZN6thrust6detail16allocator_traitsISaIiEE8allocateERS2_mEN19workaround_warnings8allocateES4_m(%"class.std::allocator.838"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.838"* %0 to %"class.__gnu_cxx::new_allocator.839"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.839"* %1, i64 %2, i8* null)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.839"* %this, i64 %__n, i8*) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.839"*, align 8
  %__n.addr = alloca i64, align 8
  %.addr = alloca i8*, align 8
  store %"class.__gnu_cxx::new_allocator.839"* %this, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.839"*, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8
  %1 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEv(%"class.__gnu_cxx::new_allocator.839"* %this1) #5
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZSt17__throw_bad_allocv() #15
  unreachable

if.end:                                           ; preds = %entry
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %mul = mul i64 %2, 4
  %call2 = call i8* @_Znwm(i64 %mul)
  %3 = bitcast i8* %call2 to i32*
  ret i32* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK9__gnu_cxx13new_allocatorIiE8max_sizeEv(%"class.__gnu_cxx::new_allocator.839"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.839"*, align 8
  store %"class.__gnu_cxx::new_allocator.839"* %this, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.839"*, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8
  ret i64 4611686018427387903
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23default_construct_rangeISaIiEPimEEvRT_T0_T1_(%"class.std::allocator.838"* dereferenceable(1) %a, i32* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %p.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i32* %p, i32** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %1 = load i32*, i32** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIiEPimEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.838"* dereferenceable(1) %0, i32* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  store %"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %this1, i32 0, i32 0
  ret i32** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaIiEPimEENS0_10disable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS6_S8_T1_(%"class.std::allocator.838"* dereferenceable(1) %a, i32* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %p.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %ref.tmp1 = alloca i32, align 4
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i32* %p, i32** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaIiEE3getERS2_(%"class.std::allocator.838"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i32*, i32** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  store i32 0, i32* %ref.tmp1, align 4, !tbaa !11
  %call = call i32* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPimiEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i32* %2, i64 %3, i32* dereferenceable(4) %ref.tmp1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust20uninitialized_fill_nINS_6system3cpp6detail3tagEPimiEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i32* %first, i64 %n, i32* dereferenceable(4) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i32*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i32*, i32** %x.addr, align 8
  %call2 = call i32* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i32* %2, i64 %3, i32* dereferenceable(4) %4)
  ret i32* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemISaIiEE3getERS2_(%"class.std::allocator.838"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemISaIiEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.838"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic20uninitialized_fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i32* %first, i64 %n, i32* dereferenceable(4) %x) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  %ref.tmp = alloca %"struct.thrust::detail::has_trivial_copy_constructor.879", align 1
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %3 = load i32*, i32** %x.addr, align 8
  %4 = bitcast %"struct.thrust::detail::has_trivial_copy_constructor.879"* %ref.tmp to %"struct.thrust::detail::integral_constant"*
  %call = call i32* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, i32* %1, i64 %2, i32* dereferenceable(4) %3)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic6detail20uninitialized_fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES9_T1_RKT2_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i32* %first, i64 %n, i32* dereferenceable(4) %x) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %x.addr = alloca i32*, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %5 = load i32*, i32** %x.addr, align 8
  %call = call i32* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPimiEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i32* %3, i64 %4, i32* dereferenceable(4) %5)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6fill_nINS_6system3cpp6detail3tagEPimiEET0_RKNS_6detail21execution_policy_baseIT_EES6_T1_RKT2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i32* %first, i64 %n, i32* dereferenceable(4) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i32*, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i32* %value, i32** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i32*, i32** %value.addr, align 8
  %call2 = call i32* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i32* %2, i64 %3, i32* dereferenceable(4) %4)
  ret i32* %call2
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic6fill_nINS0_3cpp6detail3tagEPimiEET0_RNS_16execution_policyIT_EES8_T1_RKT2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i32* %first, i64 %n, i32* dereferenceable(4) %value) #0 comdat {
entry:
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %value.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor.880", align 4
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store i32* %value, i32** %value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load i32*, i32** %value.addr, align 8
  call void @_ZN6thrust6detail12fill_functorIiEC2ERKi(%"struct.thrust::detail::fill_functor.880"* %agg.tmp, i32* dereferenceable(4) %4)
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive, align 4
  %call = call i32* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPimNS_6detail12fill_functorIiEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i32* %2, i64 %3, i32 %5)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust10generate_nINS_6system3cpp6detail3tagEPimNS_6detail12fill_functorIiEEEET0_RKNS6_21execution_policy_baseIT_EES9_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i32* %first, i64 %n, i32 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor.880", align 4
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::fill_functor.880", align 4
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %gen, i32 0, i32 0
  store i32 %gen.coerce, i32* %coerce.dive, align 4
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor.880"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor.880"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 4, i32 4, i1 false), !tbaa.struct !151
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %agg.tmp, i32 0, i32 0
  %6 = load i32, i32* %coerce.dive2, align 4
  %call3 = call i32* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPimNS_6detail12fill_functorIiEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i32* %2, i64 %3, i32 %6)
  ret i32* %call3
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail12fill_functorIiEC2ERKi(%"struct.thrust::detail::fill_functor.880"* %this, i32* dereferenceable(4) %_exemplar) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor.880"*, align 8
  %_exemplar.addr = alloca i32*, align 8
  store %"struct.thrust::detail::fill_functor.880"* %this, %"struct.thrust::detail::fill_functor.880"** %this.addr, align 8, !tbaa !1
  store i32* %_exemplar, i32** %_exemplar.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::fill_functor.880"*, %"struct.thrust::detail::fill_functor.880"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %_exemplar.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  store i32 %1, i32* %exemplar, align 4, !tbaa !480
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic10generate_nINS0_3cpp6detail3tagEPimNS_6detail12fill_functorIiEEEET0_RNS_16execution_policyIT_EESB_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i32* %first, i64 %n, i32 %gen.coerce) #0 comdat {
entry:
  %gen = alloca %"struct.thrust::detail::fill_functor.880", align 4
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor.881", align 4
  %agg.tmp1 = alloca %"struct.thrust::detail::fill_functor.880", align 4
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %gen, i32 0, i32 0
  store i32 %gen.coerce, i32* %coerce.dive, align 4
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::fill_functor.880"* %agg.tmp1 to i8*
  %5 = bitcast %"struct.thrust::detail::fill_functor.880"* %gen to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 4, i32 4, i1 false), !tbaa.struct !151
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %agg.tmp1, i32 0, i32 0
  %6 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIiEEEC2ES3_(%"struct.thrust::detail::host_generate_functor.881"* %agg.tmp, i32 %6)
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.881", %"struct.thrust::detail::host_generate_functor.881"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %coerce.dive3, i32 0, i32 0
  %7 = load i32, i32* %coerce.dive4, align 4
  %call = call i32* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPimNS_6detail21host_generate_functorINS6_12fill_functorIiEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i32* %2, i64 %3, i32 %7)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPimNS_6detail21host_generate_functorINS6_12fill_functorIiEEEEEET0_RKNS6_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i32* %first, i64 %n, i32 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor.881", align 4
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::host_generate_functor.881", align 4
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.881", %"struct.thrust::detail::host_generate_functor.881"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %coerce.dive, i32 0, i32 0
  store i32 %f.coerce, i32* %coerce.dive1, align 4
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::host_generate_functor.881"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::host_generate_functor.881"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 4, i32 4, i1 false), !tbaa.struct !151
  %coerce.dive3 = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.881", %"struct.thrust::detail::host_generate_functor.881"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %coerce.dive3, i32 0, i32 0
  %6 = load i32, i32* %coerce.dive4, align 4
  %call5 = call i32* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPimNS_6detail21host_generate_functorINS8_12fill_functorIiEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, i32* %2, i64 %3, i32 %6)
  ret i32* %call5
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIiEEEC2ES3_(%"struct.thrust::detail::host_generate_functor.881"* %this, i32 %g.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %g = alloca %"struct.thrust::detail::fill_functor.880", align 4
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor.881"*, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %g, i32 0, i32 0
  store i32 %g.coerce, i32* %coerce.dive, align 4
  store %"struct.thrust::detail::host_generate_functor.881"* %this, %"struct.thrust::detail::host_generate_functor.881"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::host_generate_functor.881"*, %"struct.thrust::detail::host_generate_functor.881"** %this.addr, align 8
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.881", %"struct.thrust::detail::host_generate_functor.881"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::fill_functor.880"* %gen to i8*
  %1 = bitcast %"struct.thrust::detail::fill_functor.880"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 4, i32 4, i1 false), !tbaa.struct !151
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPimNS_6detail21host_generate_functorINS8_12fill_functorIiEEEEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i32* %first, i64 %n, i32 %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::host_generate_functor.881", align 4
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.882", align 4
  %i = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.881", %"struct.thrust::detail::host_generate_functor.881"* %f, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %coerce.dive, i32 0, i32 0
  store i32 %f.coerce, i32* %coerce.dive1, align 4
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i32* %first, i32** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.882"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIiEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function.882"* %wrapped_f, %"struct.thrust::detail::host_generate_functor.881"* dereferenceable(4) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load i32*, i32** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIiEEEEvEclIiEEvRT_(%"struct.thrust::detail::wrapped_function.882"* %wrapped_f, i32* dereferenceable(4) %6)
  %7 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds i32, i32* %7, i32 1
  store i32* %incdec.ptr, i32** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load i32*, i32** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.882"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 4, i8* %10) #5
  ret i32* %9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIiEEEEvEC2ERKS5_(%"struct.thrust::detail::wrapped_function.882"* %this, %"struct.thrust::detail::host_generate_functor.881"* dereferenceable(4) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.882"*, align 8
  %f.addr = alloca %"struct.thrust::detail::host_generate_functor.881"*, align 8
  store %"struct.thrust::detail::wrapped_function.882"* %this, %"struct.thrust::detail::wrapped_function.882"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::host_generate_functor.881"* %f, %"struct.thrust::detail::host_generate_functor.881"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.882"*, %"struct.thrust::detail::wrapped_function.882"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.882", %"struct.thrust::detail::wrapped_function.882"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::host_generate_functor.881"*, %"struct.thrust::detail::host_generate_functor.881"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::host_generate_functor.881"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::host_generate_functor.881"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_21host_generate_functorINS0_12fill_functorIiEEEEvEclIiEEvRT_(%"struct.thrust::detail::wrapped_function.882"* %this, i32* dereferenceable(4) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.882"*, align 8
  %x.addr = alloca i32*, align 8
  store %"struct.thrust::detail::wrapped_function.882"* %this, %"struct.thrust::detail::wrapped_function.882"** %this.addr, align 8, !tbaa !1
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.882"*, %"struct.thrust::detail::wrapped_function.882"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.882", %"struct.thrust::detail::wrapped_function.882"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %x.addr, align 8
  %call = call dereferenceable(4) i32* @_ZN6thrust18raw_reference_castIiEENS_6detail13raw_referenceIT_E4typeERS3_(i32* dereferenceable(4) %0)
  call void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIiEEEclIiEEvRKT_(%"struct.thrust::detail::host_generate_functor.881"* %m_f, i32* dereferenceable(4) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail21host_generate_functorINS0_12fill_functorIiEEEclIiEEvRKT_(%"struct.thrust::detail::host_generate_functor.881"* %this, i32* dereferenceable(4) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::host_generate_functor.881"*, align 8
  %x.addr = alloca i32*, align 8
  %lvalue = alloca i32*, align 8
  store %"struct.thrust::detail::host_generate_functor.881"* %this, %"struct.thrust::detail::host_generate_functor.881"** %this.addr, align 8, !tbaa !1
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::host_generate_functor.881"*, %"struct.thrust::detail::host_generate_functor.881"** %this.addr, align 8
  %0 = bitcast i32** %lvalue to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load i32*, i32** %x.addr, align 8
  store i32* %1, i32** %lvalue, align 8, !tbaa !7
  %gen = getelementptr inbounds %"struct.thrust::detail::host_generate_functor.881", %"struct.thrust::detail::host_generate_functor.881"* %this1, i32 0, i32 0
  %call = call i32 @_ZNK6thrust6detail12fill_functorIiEclEv(%"struct.thrust::detail::fill_functor.880"* %gen)
  %2 = load i32*, i32** %lvalue, align 8
  store i32 %call, i32* %2, align 4, !tbaa !11
  %3 = bitcast i32** %lvalue to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust18raw_reference_castIiEENS_6detail13raw_referenceIT_E4typeERS3_(i32* dereferenceable(4) %ref) #8 comdat {
entry:
  %ref.addr = alloca i32*, align 8
  %ref.tmp = alloca i32*, align 8
  store i32* %ref, i32** %ref.addr, align 8, !tbaa !7
  %0 = load i32*, i32** %ref.addr, align 8
  store i32* %0, i32** %ref.tmp, align 8, !tbaa !1
  %call = call i32* @_ZN6thrust16raw_pointer_castIPiEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i32** dereferenceable(8) %ref.tmp)
  ret i32* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6detail12fill_functorIiEclEv(%"struct.thrust::detail::fill_functor.880"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::fill_functor.880"*, align 8
  store %"struct.thrust::detail::fill_functor.880"* %this, %"struct.thrust::detail::fill_functor.880"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::fill_functor.880"*, %"struct.thrust::detail::fill_functor.880"** %this.addr, align 8
  %exemplar = getelementptr inbounds %"struct.thrust::detail::fill_functor.880", %"struct.thrust::detail::fill_functor.880"* %this1, i32 0, i32 0
  %0 = load i32, i32* %exemplar, align 4, !tbaa !480
  ret i32 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust16raw_pointer_castIPiEENS_6detail14pointer_traitsIT_E11raw_pointerERKS4_(i32** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i32**, align 8
  store i32** %ptr, i32*** %ptr.addr, align 8, !tbaa !7
  %0 = load i32**, i32*** %ptr.addr, align 8
  %1 = load i32*, i32** %0, align 8, !tbaa !1
  %call = call i32* @_ZN6thrust6detail14pointer_traitsIPiE3getES2_(i32* %1)
  ret i32* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32* @_ZN6thrust6detail14pointer_traitsIPiE3getES2_(i32* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i32*, align 8
  store i32* %ptr, i32** %ptr.addr, align 8, !tbaa !1
  %0 = load i32*, i32** %ptr.addr, align 8, !tbaa !1
  ret i32* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemISaIiEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS5_E4typeEE4typeERS5_(%"class.std::allocator.838"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiSaIiEE10deallocateEv(%"class.thrust::detail::contiguous_storage.837"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIiSaIiEE4sizeEv(%"class.thrust::detail::contiguous_storage.837"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.841"* %m_begin to %"class.thrust::iterator_adaptor.842"*
  %call2 = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %0)
  %1 = load i32*, i32** %call2, align 8, !tbaa !1
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIiSaIiEE4sizeEv(%"class.thrust::detail::contiguous_storage.837"* %this1)
  call void @_ZN6thrust6detail16allocator_traitsISaIiEE10deallocateERS2_Pim(%"class.std::allocator.838"* dereferenceable(1) %m_allocator, i32* %1, i64 %call3)
  %m_begin4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPiEC2ES2_(%"class.thrust::detail::normal_iterator.841"* %ref.tmp, i32* null)
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %m_begin4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !477
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIiSaIiEE4sizeEv(%"class.thrust::detail::contiguous_storage.837"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !477
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaIiEE10deallocateERS2_Pim(%"class.std::allocator.838"* dereferenceable(1) %a, i32* %p, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %p.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i32* %p, i32** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %1 = load i32*, i32** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZZN6thrust6detail16allocator_traitsISaIiEE10deallocateERS2_PimEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.838"* dereferenceable(1) %0, i32* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsISaIiEE10deallocateERS2_PimEN19workaround_warnings10deallocateES4_S5_m(%"class.std::allocator.838"* dereferenceable(1) %a, i32* %p, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %p.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i32* %p, i32** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.838"* %0 to %"class.__gnu_cxx::new_allocator.839"*
  %2 = load i32*, i32** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPim(%"class.__gnu_cxx::new_allocator.839"* %1, i32* %2, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIiE10deallocateEPim(%"class.__gnu_cxx::new_allocator.839"* %this, i32* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.839"*, align 8
  %__p.addr = alloca i32*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.839"* %this, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8, !tbaa !1
  store i32* %__p, i32** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.839"*, %"class.__gnu_cxx::new_allocator.839"** %this.addr, align 8
  %1 = load i32*, i32** %__p.addr, align 8, !tbaa !1
  %2 = bitcast i32* %1 to i8*
  call void @_ZdlPv(i8* %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES6_S6_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET1_RKNS8_21execution_policy_baseIT_EET0_SL_SF_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %op = alloca %"struct.unittest::random_integer.878", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp3 = alloca %"class.thrust::counting_iterator", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp5 = alloca %"struct.unittest::random_integer.878", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::execution_policy.88"*
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* dereferenceable(8) %first)
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %agg.tmp3, %"class.thrust::counting_iterator"* dereferenceable(8) %last)
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp4, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive6, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive7, align 8
  %call8 = call i32* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::counting_iterator"* %agg.tmp, %"class.thrust::counting_iterator"* %agg.tmp3, i32* %4)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive9, i32 0, i32 0
  store i32* %call8, i32** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive11, i32 0, i32 0
  %5 = load i32*, i32** %coerce.dive12, align 8
  ret i32* %5
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPiEEN8unittest14random_integerIiLb0EEEEET1_RNS_16execution_policyIT_EET0_SM_SH_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"class.thrust::counting_iterator"* %first, %"class.thrust::counting_iterator"* %last, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %op = alloca %"struct.unittest::random_integer.878", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.883", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.883", align 8
  %agg.tmp2 = alloca %"class.thrust::tuple.885", align 8
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.883", align 8
  %agg.tmp4 = alloca %"class.thrust::tuple.885", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::unary_transform_functor.888", align 1
  %agg.tmp6 = alloca %"struct.unittest::random_integer.878", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.883"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.885"* sret %agg.tmp2, %"class.thrust::counting_iterator"* dereferenceable(8) %first, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.883"* sret %agg.tmp, %"class.thrust::tuple.885"* %agg.tmp2)
  call void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.885"* sret %agg.tmp4, %"class.thrust::counting_iterator"* dereferenceable(8) %last, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.883"* sret %agg.tmp3, %"class.thrust::tuple.885"* %agg.tmp4)
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIiLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor.888"* %agg.tmp5)
  call void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPiEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator.883"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, %"class.thrust::zip_iterator.883"* %agg.tmp, %"class.thrust::zip_iterator.883"* %agg.tmp3)
  %call = call dereferenceable(16) %"class.thrust::tuple.885"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.883"* %zipped_result)
  %3 = bitcast %"class.thrust::tuple.885"* %call to %"struct.thrust::detail::cons.886"*
  %call7 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.886"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.841"* %retval to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.841"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.883"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %6) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive8, i32 0, i32 0
  %7 = load i32*, i32** %coerce.dive9, align 8
  ret i32* %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES8_S8_EENS_6detail15normal_iteratorIPiEENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEENSA_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEEET0_RKNSA_21execution_policy_baseIT_EESM_SM_T1_(%"class.thrust::zip_iterator.883"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.883"* %first, %"class.thrust::zip_iterator.883"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor.888", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.883", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.883", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::unary_transform_functor.888", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.883"* %agg.tmp, %"class.thrust::zip_iterator.883"* dereferenceable(16) %first)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.883"* %agg.tmp2, %"class.thrust::zip_iterator.883"* dereferenceable(16) %last)
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor.888"* %agg.tmp3 to i8*
  %3 = bitcast %"struct.thrust::detail::unary_transform_functor.888"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPiEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator.883"* sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"class.thrust::zip_iterator.883"* %agg.tmp, %"class.thrust::zip_iterator.883"* %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS_12zip_iteratorIT_EESC_(%"class.thrust::zip_iterator.883"* noalias sret %agg.result, %"class.thrust::tuple.885"* %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.885", align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.885"* %agg.tmp, %"class.thrust::tuple.885"* dereferenceable(16) %t)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator.883"* %agg.result, %"class.thrust::tuple.885"* %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEEEENS4_17make_tuple_mapperIT_T0_NS_9null_typeESB_SB_SB_SB_SB_SB_SB_E4typeERKS9_RKSA_(%"class.thrust::tuple.885"* noalias sret %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t1) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %t1, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple.885"* %agg.result, %"class.thrust::counting_iterator"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIiLb0EEEEC2ES4_(%"struct.thrust::detail::unary_transform_functor.888"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.unittest::random_integer.878", align 1
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor.888"*, align 8
  store %"struct.thrust::detail::unary_transform_functor.888"* %this, %"struct.thrust::detail::unary_transform_functor.888"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor.888"*, %"struct.thrust::detail::unary_transform_functor.888"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor.888", %"struct.thrust::detail::unary_transform_functor.888"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.886"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  store %"struct.thrust::detail::cons.886"* %c, %"struct.thrust::detail::cons.886"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPiEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.886"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.841"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.885"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.883"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.883", %"class.thrust::zip_iterator.883"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.885"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultESA_SA_EENS_6detail15normal_iteratorIPiEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENSC_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEEET0_RNS2_16execution_policyIT_EESO_SO_T1_(%"class.thrust::zip_iterator.883"* noalias sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"class.thrust::zip_iterator.883"* %first, %"class.thrust::zip_iterator.883"* %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::unary_transform_functor.888", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.889", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.890", align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %1 = bitcast %"struct.thrust::detail::wrapped_function.889"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.889"* %wrapped_f, %"struct.thrust::detail::unary_transform_functor.888"* dereferenceable(1) %f)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = bitcast %"class.thrust::zip_iterator.883"* %first to %"class.thrust::iterator_facade.884"*
  %3 = bitcast %"class.thrust::zip_iterator.883"* %last to %"class.thrust::iterator_facade.884"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.884"* dereferenceable(1) %2, %"class.thrust::iterator_facade.884"* dereferenceable(1) %3)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"class.thrust::zip_iterator.883"* %first to %"class.thrust::iterator_facade.884"*
  %call1 = call { i64, i32* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.884"* %4)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.890", %"class.thrust::detail::tuple_of_iterator_references.890"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %coerce.dive, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive2 to { i64, i32* }*
  %6 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i64, i32* } %call1, 0
  store i64 %7, i64* %6, align 8
  %8 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i64, i32* } %call1, 1
  store i32* %9, i32** %8, align 8
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRiNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.889"* %wrapped_f, %"class.thrust::detail::tuple_of_iterator_references.890"* dereferenceable(16) %ref.tmp)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %10 = bitcast %"class.thrust::zip_iterator.883"* %first to %"class.thrust::iterator_facade.884"*
  %call3 = call dereferenceable(16) %"class.thrust::zip_iterator.883"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.884"* %10)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator.883"* %agg.result, %"class.thrust::zip_iterator.883"* dereferenceable(16) %first)
  %11 = bitcast %"struct.thrust::detail::wrapped_function.889"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %11) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ERKSB_(%"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.883"* %0, %"class.thrust::zip_iterator.883"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.883"* %this1 to %"class.thrust::iterator_facade.884"*
  %2 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.883"* %2 to %"class.thrust::iterator_facade.884"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.883", %"class.thrust::zip_iterator.883"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator.883", %"class.thrust::zip_iterator.883"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.885"* %m_iterator_tuple, %"class.thrust::tuple.885"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEvEC2ERKS6_(%"struct.thrust::detail::wrapped_function.889"* %this, %"struct.thrust::detail::unary_transform_functor.888"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.889"*, align 8
  %f.addr = alloca %"struct.thrust::detail::unary_transform_functor.888"*, align 8
  store %"struct.thrust::detail::wrapped_function.889"* %this, %"struct.thrust::detail::wrapped_function.889"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::unary_transform_functor.888"* %f, %"struct.thrust::detail::unary_transform_functor.888"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.889"*, %"struct.thrust::detail::wrapped_function.889"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.889", %"struct.thrust::detail::wrapped_function.889"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::unary_transform_functor.888"*, %"struct.thrust::detail::unary_transform_functor.888"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::unary_transform_functor.888"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::unary_transform_functor.888"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExSC_SD_SH_SI_SL_xEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSM_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.884"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.884"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.884"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.884"*, align 8
  store %"class.thrust::iterator_facade.884"* %lhs, %"class.thrust::iterator_facade.884"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.884"* %rhs, %"class.thrust::iterator_facade.884"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.884"*, %"class.thrust::iterator_facade.884"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.884"* %0 to %"class.thrust::zip_iterator.883"*
  %2 = load %"class.thrust::iterator_facade.884"*, %"class.thrust::iterator_facade.884"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.884"* %2 to %"class.thrust::zip_iterator.883"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator.883"* dereferenceable(16) %1, %"class.thrust::zip_iterator.883"* dereferenceable(16) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23unary_transform_functorIN8unittest14random_integerIiLb0EEEEEvEclINS0_28tuple_of_iterator_referencesImRiNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.889"* %this, %"class.thrust::detail::tuple_of_iterator_references.890"* dereferenceable(16) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.889"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.890"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.890", align 8
  store %"struct.thrust::detail::wrapped_function.889"* %this, %"struct.thrust::detail::wrapped_function.889"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.890"* %x, %"class.thrust::detail::tuple_of_iterator_references.890"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.889"*, %"struct.thrust::detail::wrapped_function.889"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.889", %"struct.thrust::detail::wrapped_function.889"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.890"*, %"class.thrust::detail::tuple_of_iterator_references.890"** %x.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references.890"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references.890"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.890"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.890"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.890"* %agg.tmp to { i64, i32* }*
  %4 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %3, i32 0, i32 0
  %5 = load i64, i64* %4, align 8
  %6 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %3, i32 0, i32 1
  %7 = load i32*, i32** %6, align 8
  call void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIiLb0EEEEclINS0_28tuple_of_iterator_referencesImRiNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor.888"* %m_f, i64 %5, i32* %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExEdeEv(%"class.thrust::iterator_facade.884"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.890", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.884"*, align 8
  store %"class.thrust::iterator_facade.884"* %this, %"class.thrust::iterator_facade.884"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.884"*, %"class.thrust::iterator_facade.884"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.883"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.884"* %this1)
  %call2 = call { i64, i32* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator.883"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.890", %"class.thrust::detail::tuple_of_iterator_references.890"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %coerce.dive, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive3 to { i64, i32* }*
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i32* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i32* } %call2, 1
  store i32* %4, i32** %3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.890", %"class.thrust::detail::tuple_of_iterator_references.890"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %coerce.dive4, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive5 to { i64, i32* }*
  %6 = load { i64, i32* }, { i64, i32* }* %5, align 8
  ret { i64, i32* } %6
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.883"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExEppEv(%"class.thrust::iterator_facade.884"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.884"*, align 8
  store %"class.thrust::iterator_facade.884"* %this, %"class.thrust::iterator_facade.884"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.884"*, %"class.thrust::iterator_facade.884"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.883"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.884"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator.883"* dereferenceable(16) %call)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.883"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.884"* %this1)
  ret %"class.thrust::zip_iterator.883"* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2EOSB_(%"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  %.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.883"* %0, %"class.thrust::zip_iterator.883"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %this.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.883"* %this1 to %"class.thrust::iterator_facade.884"*
  %2 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.883"* %2 to %"class.thrust::iterator_facade.884"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.883", %"class.thrust::zip_iterator.883"* %this1, i32 0, i32 0
  %4 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %.addr, align 8
  %m_iterator_tuple2 = getelementptr inbounds %"class.thrust::zip_iterator.883", %"class.thrust::zip_iterator.883"* %4, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple.885"* %m_iterator_tuple, %"class.thrust::tuple.885"* dereferenceable(16) %m_iterator_tuple2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEESD_EEbRKT_RKT0_(%"class.thrust::zip_iterator.883"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.883"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %f1, %"class.thrust::zip_iterator.883"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.883"* %f2, %"class.thrust::zip_iterator.883"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.883"* %0, %"class.thrust::zip_iterator.883"* dereferenceable(16) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE5equalISA_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.883"* %other, %"class.thrust::zip_iterator.883"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.885"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.883"* %this1)
  %0 = bitcast %"class.thrust::tuple.885"* %call to %"struct.thrust::detail::cons.886"*
  %call2 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.886"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::counting_iterator"* %call2 to %"class.thrust::iterator_facade.84"*
  %2 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %other.addr, align 8
  %call3 = call dereferenceable(16) %"class.thrust::tuple.885"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.883"* %2)
  %3 = bitcast %"class.thrust::tuple.885"* %call3 to %"struct.thrust::detail::cons.886"*
  %call4 = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.886"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::counting_iterator"* %call4 to %"class.thrust::iterator_facade.84"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmNS_14any_system_tagENS_27random_access_traversal_tagEmxS3_mS4_S5_mxEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNS6_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.84"* dereferenceable(1) %1, %"class.thrust::iterator_facade.84"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.886"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  store %"struct.thrust::detail::cons.886"* %c, %"struct.thrust::detail::cons.886"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPiEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.886"* dereferenceable(16) %0)
  ret %"class.thrust::counting_iterator"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_17counting_iteratorImNS_11use_defaultES5_S5_EES6_NS0_4consINS0_15normal_iteratorIPiEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.886"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  store %"struct.thrust::detail::cons.886"* %t, %"struct.thrust::detail::cons.886"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %0, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23unary_transform_functorIN8unittest14random_integerIiLb0EEEEclINS0_28tuple_of_iterator_referencesImRiNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi1ET_E4typeEE4typeESD_(%"struct.thrust::detail::unary_transform_functor.888"* %this, i64 %t.coerce0, i32* %t.coerce1) #8 comdat align 2 {
entry:
  %t = alloca %"class.thrust::detail::tuple_of_iterator_references.890", align 8
  %this.addr = alloca %"struct.thrust::detail::unary_transform_functor.888"*, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.890"* %t to { i64, i32* }*
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %0, i32 0, i32 0
  store i64 %t.coerce0, i64* %1, align 8
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %0, i32 0, i32 1
  store i32* %t.coerce1, i32** %2, align 8
  store %"struct.thrust::detail::unary_transform_functor.888"* %this, %"struct.thrust::detail::unary_transform_functor.888"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::unary_transform_functor.888"*, %"struct.thrust::detail::unary_transform_functor.888"** %this.addr, align 8
  %f = getelementptr inbounds %"struct.thrust::detail::unary_transform_functor.888", %"struct.thrust::detail::unary_transform_functor.888"* %this1, i32 0, i32 0
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.890"* %t to %"struct.thrust::detail::cons.892"*
  %call = call dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRiNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.892"* dereferenceable(16) %3)
  %4 = load i64, i64* %call, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %call2 = call i32 @_ZNK8unittest14random_integerIiLb0EEclEj(%"struct.unittest::random_integer.878"* %f, i32 %conv)
  %5 = bitcast %"class.thrust::detail::tuple_of_iterator_references.890"* %t to %"struct.thrust::detail::cons.892"*
  %call3 = call dereferenceable(4) i32* @_ZN6thrust3getILi1EmNS_6detail4consIRiNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.892"* dereferenceable(16) %5)
  store i32 %call2, i32* %call3, align 4, !tbaa !11
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::detail::tuple_of_iterator_references.890"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_13raw_referenceIKT_E4typeERS8_(%"class.thrust::detail::tuple_of_iterator_references.890"* dereferenceable(16) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.890"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.890"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.890"* %ref, %"class.thrust::detail::tuple_of_iterator_references.890"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.890"*, %"class.thrust::detail::tuple_of_iterator_references.890"** %ref.addr, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.890"* %0, %"class.thrust::detail::tuple_of_iterator_references.890"** %ref.tmp, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.890"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references.890"** dereferenceable(8) %ref.tmp)
  ret %"class.thrust::detail::tuple_of_iterator_references.890"* %call
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZNK8unittest14random_integerIiLb0EEclEj(%"struct.unittest::random_integer.878"* %this, i32 %i) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.unittest::random_integer.878"*, align 8
  %i.addr = alloca i32, align 4
  %rng = alloca %"class.thrust::random::linear_congruential_engine", align 4
  %dist = alloca %"class.thrust::random::uniform_int_distribution.893", align 4
  store %"struct.unittest::random_integer.878"* %this, %"struct.unittest::random_integer.878"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"struct.unittest::random_integer.878"*, %"struct.unittest::random_integer.878"** %this.addr, align 8
  %0 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %i.addr, align 4, !tbaa !11
  %call = call i32 @_ZN8unittest4hashEj(i32 %1)
  call void @_ZN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEC2Ej(%"class.thrust::random::linear_congruential_engine"* %rng, i32 %call)
  %2 = bitcast %"class.thrust::random::uniform_int_distribution.893"* %dist to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  call void @_ZN6thrust6random24uniform_int_distributionIiEC2Eii(%"class.thrust::random::uniform_int_distribution.893"* %dist, i32 0, i32 2147483647)
  %call2 = call i32 @_ZN6thrust6random24uniform_int_distributionIiEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEiRT_(%"class.thrust::random::uniform_int_distribution.893"* %dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %rng)
  %3 = bitcast %"class.thrust::random::uniform_int_distribution.893"* %dist to i8*
  call void @llvm.lifetime.end(i64 8, i8* %3) #5
  %4 = bitcast %"class.thrust::random::linear_congruential_engine"* %rng to i8*
  call void @llvm.lifetime.end(i64 4, i8* %4) #5
  ret i32 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust3getILi0EmNS_6detail4consIRiNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.892"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.892"*, align 8
  store %"struct.thrust::detail::cons.892"* %c, %"struct.thrust::detail::cons.892"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.892"*, %"struct.thrust::detail::cons.892"** %c.addr, align 8
  %call = call dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRiNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.892"* dereferenceable(16) %0)
  ret i64* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust3getILi1EmNS_6detail4consIRiNS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS2_IT0_T1_EEE4typeEE14non_const_typeERSA_(%"struct.thrust::detail::cons.892"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.892"*, align 8
  store %"struct.thrust::detail::cons.892"* %c, %"struct.thrust::detail::cons.892"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.892"*, %"struct.thrust::detail::cons.892"** %c.addr, align 8
  %call = call dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi1EE3getIRimNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.892"* dereferenceable(16) %0)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6random24uniform_int_distributionIiEC2Eii(%"class.thrust::random::uniform_int_distribution.893"* %this, i32 %a, i32 %b) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.893"*, align 8
  %a.addr = alloca i32, align 4
  %b.addr = alloca i32, align 4
  store %"class.thrust::random::uniform_int_distribution.893"* %this, %"class.thrust::random::uniform_int_distribution.893"** %this.addr, align 8, !tbaa !1
  store i32 %a, i32* %a.addr, align 4, !tbaa !11
  store i32 %b, i32* %b.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::random::uniform_int_distribution.893"*, %"class.thrust::random::uniform_int_distribution.893"** %this.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution.893", %"class.thrust::random::uniform_int_distribution.893"* %this1, i32 0, i32 0
  call void @_ZN6thrust4pairIiiEC2ERKiS3_(%"struct.thrust::pair.82"* %m_param, i32* dereferenceable(4) %a.addr, i32* dereferenceable(4) %b.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6random24uniform_int_distributionIiEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEiRT_(%"class.thrust::random::uniform_int_distribution.893"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.893"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  store %"class.thrust::random::uniform_int_distribution.893"* %this, %"class.thrust::random::uniform_int_distribution.893"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution.893"*, %"class.thrust::random::uniform_int_distribution.893"** %this.addr, align 8
  %0 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %m_param = getelementptr inbounds %"class.thrust::random::uniform_int_distribution.893", %"class.thrust::random::uniform_int_distribution.893"* %this1, i32 0, i32 0
  %call = call i32 @_ZN6thrust6random24uniform_int_distributionIiEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEiRT_RKNS_4pairIiiEE(%"class.thrust::random::uniform_int_distribution.893"* %this1, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %0, %"struct.thrust::pair.82"* dereferenceable(8) %m_param)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6random24uniform_int_distributionIiEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEiRT_RKNS_4pairIiiEE(%"class.thrust::random::uniform_int_distribution.893"* %this, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %urng, %"struct.thrust::pair.82"* dereferenceable(8) %parm) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::random::uniform_int_distribution.893"*, align 8
  %urng.addr = alloca %"class.thrust::random::linear_congruential_engine"*, align 8
  %parm.addr = alloca %"struct.thrust::pair.82"*, align 8
  %real_min = alloca double, align 8
  %real_max = alloca double, align 8
  %real_dist = alloca %"class.thrust::random::uniform_real_distribution", align 8
  store %"class.thrust::random::uniform_int_distribution.893"* %this, %"class.thrust::random::uniform_int_distribution.893"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::random::linear_congruential_engine"* %urng, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %parm, %"struct.thrust::pair.82"** %parm.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::random::uniform_int_distribution.893"*, %"class.thrust::random::uniform_int_distribution.893"** %this.addr, align 8
  %0 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %parm.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %1, i32 0, i32 0
  %2 = load i32, i32* %first, align 4, !tbaa !24
  %conv = sitofp i32 %2 to double
  store double %conv, double* %real_min, align 8, !tbaa !44
  %3 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %parm.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %4, i32 0, i32 1
  %5 = load i32, i32* %second, align 4, !tbaa !28
  %conv2 = sitofp i32 %5 to double
  store double %conv2, double* %real_max, align 8, !tbaa !44
  %6 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.start(i64 16, i8* %6) #5
  %7 = load double, double* %real_min, align 8, !tbaa !44
  %8 = load double, double* %real_max, align 8, !tbaa !44
  %add = fadd double %8, 1.000000e+00
  call void @_ZN6thrust6random25uniform_real_distributionIdEC2Edd(%"class.thrust::random::uniform_real_distribution"* %real_dist, double %7, double %add)
  %9 = load %"class.thrust::random::linear_congruential_engine"*, %"class.thrust::random::linear_congruential_engine"** %urng.addr, align 8
  %call = call double @_ZN6thrust6random25uniform_real_distributionIdEclINS0_26linear_congruential_engineIjLj48271ELj0ELj2147483647EEEEEdRT_(%"class.thrust::random::uniform_real_distribution"* %real_dist, %"class.thrust::random::linear_congruential_engine"* dereferenceable(4) %9)
  %conv3 = fptosi double %call to i32
  %10 = bitcast %"class.thrust::random::uniform_real_distribution"* %real_dist to i8*
  call void @llvm.lifetime.end(i64 16, i8* %10) #5
  %11 = bitcast double* %real_max to i8*
  call void @llvm.lifetime.end(i64 8, i8* %11) #5
  %12 = bitcast double* %real_min to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret i32 %conv3
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) i64* @_ZN6thrust6detail9get_classILi0EE3getIRmmNS0_4consIRiNS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.892"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.892"*, align 8
  store %"struct.thrust::detail::cons.892"* %t, %"struct.thrust::detail::cons.892"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.892"*, %"struct.thrust::detail::cons.892"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.892", %"struct.thrust::detail::cons.892"* %0, i32 0, i32 0
  ret i64* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi1EE3getIRimNS0_4consIS4_NS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.892"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.892"*, align 8
  store %"struct.thrust::detail::cons.892"* %t, %"struct.thrust::detail::cons.892"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.892"*, %"struct.thrust::detail::cons.892"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.892", %"struct.thrust::detail::cons.892"* %0, i32 0, i32 1
  %call = call dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.175"* dereferenceable(8) %tail)
  ret i32* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.175"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.175"*, align 8
  store %"struct.thrust::detail::cons.175"* %t, %"struct.thrust::detail::cons.175"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.175"*, %"struct.thrust::detail::cons.175"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.175", %"struct.thrust::detail::cons.175"* %0, i32 0, i32 0
  %ref = load i32*, i32** %head, align 8, !tbaa !7
  ret i32* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.890"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEEENS1_14pointer_traitsIT_E11raw_pointerERKS9_(%"class.thrust::detail::tuple_of_iterator_references.890"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.890"**, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.890"** %ptr, %"class.thrust::detail::tuple_of_iterator_references.890"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.890"**, %"class.thrust::detail::tuple_of_iterator_references.890"*** %ptr.addr, align 8
  %1 = load %"class.thrust::detail::tuple_of_iterator_references.890"*, %"class.thrust::detail::tuple_of_iterator_references.890"** %0, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.890"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references.890"* %1)
  ret %"class.thrust::detail::tuple_of_iterator_references.890"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.890"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesImRiNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EEE3getES7_(%"class.thrust::detail::tuple_of_iterator_references.890"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.890"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.890"* %ptr, %"class.thrust::detail::tuple_of_iterator_references.890"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.890"*, %"class.thrust::detail::tuple_of_iterator_references.890"** %ptr.addr, align 8, !tbaa !1
  ret %"class.thrust::detail::tuple_of_iterator_references.890"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEENT_9referenceERKSE_(%"class.thrust::zip_iterator.883"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.890", align 8
  %f.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %f, %"class.thrust::zip_iterator.883"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %f.addr, align 8
  %call = call { i64, i32* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator.883"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.890", %"class.thrust::detail::tuple_of_iterator_references.890"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %coerce.dive, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive1 to { i64, i32* }*
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i32* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i32* } %call, 1
  store i32* %5, i32** %4, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.890", %"class.thrust::detail::tuple_of_iterator_references.890"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %coerce.dive2, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive3 to { i64, i32* }*
  %7 = load { i64, i32* }, { i64, i32* }* %6, align 8
  ret { i64, i32* } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.883"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.884"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.884"*, align 8
  store %"class.thrust::iterator_facade.884"* %this, %"class.thrust::iterator_facade.884"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.884"*, %"class.thrust::iterator_facade.884"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.884"* %this1 to %"class.thrust::zip_iterator.883"*
  ret %"class.thrust::zip_iterator.883"* %0
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE11dereferenceEv(%"class.thrust::zip_iterator.883"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.890", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.891", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.885"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.883"* %this1)
  %call2 = call { i64, i32* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple.885"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %ref.tmp, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive to { i64, i32* }*
  %1 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %0, i32 0, i32 0
  %2 = extractvalue { i64, i32* } %call2, 0
  store i64 %2, i64* %1, align 8
  %3 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %0, i32 0, i32 1
  %4 = extractvalue { i64, i32* } %call2, 1
  store i32* %4, i32** %3, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesImRiNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references.890"* %retval, %"class.thrust::tuple.891"* dereferenceable(16) %ref.tmp)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.890", %"class.thrust::detail::tuple_of_iterator_references.890"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %coerce.dive3, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive4 to { i64, i32* }*
  %6 = load { i64, i32* }, { i64, i32* }* %5, align 8
  ret { i64, i32* } %6
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS_17counting_iteratorImNS_11use_defaultES6_S6_EENS0_15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISE_EE5valueEE4typeERKSE_T1_(%"class.thrust::tuple.885"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.891", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.885"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.885"* %t, %"class.thrust::tuple.885"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %t.addr, align 8
  %call = call { i64, i32* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple.885"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive to { i64, i32* }*
  %2 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i32 0, i32 0
  %3 = extractvalue { i64, i32* } %call, 0
  store i64 %3, i64* %2, align 8
  %4 = getelementptr inbounds { i64, i32* }, { i64, i32* }* %1, i32 0, i32 1
  %5 = extractvalue { i64, i32* } %call, 1
  store i32* %5, i32** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive1 to { i64, i32* }*
  %7 = load { i64, i32* }, { i64, i32* }* %6, align 8
  ret { i64, i32* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesImRiNS_9null_typeES3_S3_S3_S3_S3_S3_S3_EC2ERKNS_5tupleImS2_S3_S3_S3_S3_S3_S3_S3_S3_EE(%"class.thrust::detail::tuple_of_iterator_references.890"* %this, %"class.thrust::tuple.891"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.890"*, align 8
  %other.addr = alloca %"class.thrust::tuple.891"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.890"* %this, %"class.thrust::detail::tuple_of_iterator_references.890"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.891"* %other, %"class.thrust::tuple.891"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.890"*, %"class.thrust::detail::tuple_of_iterator_references.890"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.890"* %this1 to %"class.thrust::tuple.891"*
  %1 = load %"class.thrust::tuple.891"*, %"class.thrust::tuple.891"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.891"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.891"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS0_15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EENS0_20dereference_iterator5applyESB_Lj2EE27do_it_on_the_host_or_deviceERKSA_SB_(%"class.thrust::tuple.885"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.891", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.885"*, align 8
  %ref.tmp = alloca i64, align 8
  store %"class.thrust::tuple.885"* %t, %"class.thrust::tuple.885"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.885"* %0 to %"struct.thrust::detail::cons.886"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust3getILi0ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.886"* dereferenceable(16) %1)
  %call1 = call i64 @_ZN6thrust6detail20dereference_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  store i64 %call1, i64* %ref.tmp, align 8, !tbaa !13
  %2 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.885"* %2 to %"struct.thrust::detail::cons.886"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi1ENS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail4consINS4_15normal_iteratorIPiEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSF_(%"struct.thrust::detail::cons.886"* dereferenceable(16) %3)
  %call3 = call dereferenceable(4) i32* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPiEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call2)
  call void @_ZN6thrust5tupleImRiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.891"* %retval, i64* dereferenceable(8) %ref.tmp, i32* dereferenceable(4) %call3)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.891", %"class.thrust::tuple.891"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.892"* %coerce.dive to { i64, i32* }*
  %5 = load { i64, i32* }, { i64, i32* }* %4, align 8
  ret { i64, i32* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPiEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.841"* %it, %"class.thrust::detail::normal_iterator.841"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to %"class.thrust::iterator_facade.843"*
  %call = call dereferenceable(4) i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEdeEv(%"class.thrust::iterator_facade.843"* %1)
  ret i32* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleImRiNS_9null_typeES2_S2_S2_S2_S2_S2_S2_EC2ERKmS1_(%"class.thrust::tuple.891"* %this, i64* dereferenceable(8) %t0, i32* dereferenceable(4) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.891"*, align 8
  %t0.addr = alloca i64*, align 8
  %t1.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.891"* %this, %"class.thrust::tuple.891"** %this.addr, align 8, !tbaa !1
  store i64* %t0, i64** %t0.addr, align 8, !tbaa !7
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.891"*, %"class.thrust::tuple.891"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.891"* %this1 to %"struct.thrust::detail::cons.892"*
  %1 = load i64*, i64** %t0.addr, align 8
  %2 = load i32*, i32** %t1.addr, align 8
  call void @_ZN6thrust6detail4consImNS1_IRiNS_9null_typeEEEEC2IKmiKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.892"* %0, i64* dereferenceable(8) %1, i32* dereferenceable(4) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEdeEv(%"class.thrust::iterator_facade.843"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  store %"class.thrust::iterator_facade.843"* %this, %"class.thrust::iterator_facade.843"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv(%"class.thrust::iterator_facade.843"* %this1)
  %call2 = call dereferenceable(4) i32* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPiEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call)
  ret i32* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPiEEEENT_9referenceERKS6_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  store %"class.thrust::detail::normal_iterator.841"* %f, %"class.thrust::detail::normal_iterator.841"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to %"class.thrust::iterator_adaptor.842"*
  %call = call dereferenceable(4) i32* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor.842"* %1)
  ret i32* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv(%"class.thrust::iterator_facade.843"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  store %"class.thrust::iterator_facade.843"* %this, %"class.thrust::iterator_facade.843"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.843"* %this1 to %"class.thrust::detail::normal_iterator.841"*
  ret %"class.thrust::detail::normal_iterator.841"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(4) i32* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E11dereferenceEv(%"class.thrust::iterator_adaptor.842"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  store %"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %m_iterator, align 8, !tbaa !478
  ret i32* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consImNS1_IRiNS_9null_typeEEEEC2IKmiKS3_S8_S8_S8_S8_S8_S8_S8_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.892"* %this, i64* dereferenceable(8) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.892"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.892"* %this, %"struct.thrust::detail::cons.892"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.892"*, %"struct.thrust::detail::cons.892"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.892", %"struct.thrust::detail::cons.892"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !482
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.892", %"struct.thrust::detail::cons.892"* %this1, i32 0, i32 1
  %2 = load i32*, i32** %t2.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRiNS_9null_typeEEC2IiEERT_RKS3_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.175"* %tail, i32* dereferenceable(4) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS_6detail15normal_iteratorIPiEENS_9null_typeESB_SB_SB_SB_SB_SB_SB_EEEEEEvRT_(%"class.thrust::zip_iterator.883"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %f, %"class.thrust::zip_iterator.883"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator.883"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.883"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES4_S4_EENS_6detail15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EEEENS2_ImiSA_SA_SA_SA_SA_SA_SA_SA_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS6_28tuple_of_iterator_referencesImRiSA_SA_SA_SA_SA_SA_SA_SA_EExE7derivedEv(%"class.thrust::iterator_facade.884"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.884"*, align 8
  store %"class.thrust::iterator_facade.884"* %this, %"class.thrust::iterator_facade.884"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.884"*, %"class.thrust::iterator_facade.884"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.884"* %this1 to %"class.thrust::zip_iterator.883"*
  ret %"class.thrust::zip_iterator.883"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEE9incrementEv(%"class.thrust::zip_iterator.883"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.883", %"class.thrust::zip_iterator.883"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple.885"* dereferenceable(16) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS_17counting_iteratorImNS_11use_defaultES5_S5_EENS0_15normal_iteratorIPiEENS_9null_typeESA_SA_SA_SA_SA_SA_SA_EENS0_18increment_iteratorEEET0_RT_SD_(%"class.thrust::tuple.885"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.885"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.885"* %t, %"class.thrust::tuple.885"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.885"* %0 to %"struct.thrust::detail::cons.886"*
  %call = call dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.886"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS_17counting_iteratorImNS_11use_defaultES4_S4_EEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::counting_iterator"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.885"* %2 to %"struct.thrust::detail::cons.886"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.887"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.886"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPiEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.887"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::counting_iterator"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.886"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  store %"struct.thrust::detail::cons.886"* %this, %"struct.thrust::detail::cons.886"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %this1, i32 0, i32 0
  ret %"class.thrust::counting_iterator"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPiEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SA_(%"struct.thrust::detail::cons.887"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.887"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.887"* %t, %"struct.thrust::detail::cons.887"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.887"*, %"struct.thrust::detail::cons.887"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.887"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPiEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.887"*, %"struct.thrust::detail::cons.887"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.887"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.887"* @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.886"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  store %"struct.thrust::detail::cons.886"* %this, %"struct.thrust::detail::cons.886"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.887"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPiEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.841"* %it, %"class.thrust::detail::normal_iterator.841"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to %"class.thrust::iterator_facade.843"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEppEv(%"class.thrust::iterator_facade.843"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.887"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.887"*, align 8
  store %"struct.thrust::detail::cons.887"* %this, %"struct.thrust::detail::cons.887"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.887"*, %"struct.thrust::detail::cons.887"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.887", %"struct.thrust::detail::cons.887"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.841"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.887"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.887"*, align 8
  store %"struct.thrust::detail::cons.887"* %this, %"struct.thrust::detail::cons.887"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.887"*, %"struct.thrust::detail::cons.887"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEppEv(%"class.thrust::iterator_facade.843"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  store %"class.thrust::iterator_facade.843"* %this, %"class.thrust::iterator_facade.843"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv(%"class.thrust::iterator_facade.843"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPiEEEEvRT_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv(%"class.thrust::iterator_facade.843"* %this1)
  ret %"class.thrust::detail::normal_iterator.841"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPiEEEEvRT_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  store %"class.thrust::detail::normal_iterator.841"* %f, %"class.thrust::detail::normal_iterator.841"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to %"class.thrust::iterator_adaptor.842"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor.842"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv(%"class.thrust::iterator_facade.843"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  store %"class.thrust::iterator_facade.843"* %this, %"class.thrust::iterator_facade.843"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.843"* %this1 to %"class.thrust::detail::normal_iterator.841"*
  ret %"class.thrust::detail::normal_iterator.841"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E9incrementEv(%"class.thrust::iterator_adaptor.842"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  store %"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %m_iterator, align 8, !tbaa !478
  %incdec.ptr = getelementptr inbounds i32, i32* %0, i32 1
  store i32* %incdec.ptr, i32** %m_iterator, align 8, !tbaa !478
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2EOS9_(%"class.thrust::tuple.885"* %this, %"class.thrust::tuple.885"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.885"*, align 8
  %.addr = alloca %"class.thrust::tuple.885"*, align 8
  store %"class.thrust::tuple.885"* %this, %"class.thrust::tuple.885"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.885"* %0, %"class.thrust::tuple.885"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple.885"* %this1 to %"struct.thrust::detail::cons.886"*
  %2 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple.885"* %2 to %"struct.thrust::detail::cons.886"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.886"* %1, %"struct.thrust::detail::cons.886"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.886"* %this, %"struct.thrust::detail::cons.886"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  %.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  store %"struct.thrust::detail::cons.886"* %this, %"struct.thrust::detail::cons.886"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::cons.886"* %0, %"struct.thrust::detail::cons.886"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %.addr, align 8
  %head2 = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %1, i32 0, i32 0
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %head2)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %this1, i32 0, i32 1
  %2 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %.addr, align 8
  %tail3 = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %2, i32 0, i32 1
  %3 = bitcast %"struct.thrust::detail::cons.887"* %tail to i8*
  %4 = bitcast %"struct.thrust::detail::cons.887"* %tail3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.885"* %this, %"class.thrust::tuple.885"* dereferenceable(16)) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.885"*, align 8
  %.addr = alloca %"class.thrust::tuple.885"*, align 8
  store %"class.thrust::tuple.885"* %this, %"class.thrust::tuple.885"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.885"* %0, %"class.thrust::tuple.885"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %this.addr, align 8
  %1 = bitcast %"class.thrust::tuple.885"* %this1 to %"struct.thrust::detail::cons.886"*
  %2 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %.addr, align 8
  %3 = bitcast %"class.thrust::tuple.885"* %2 to %"struct.thrust::detail::cons.886"*
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEEC2ERKSA_(%"struct.thrust::detail::cons.886"* %1, %"struct.thrust::detail::cons.886"* dereferenceable(16) %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS_6detail15normal_iteratorIPiEENS_9null_typeES9_S9_S9_S9_S9_S9_S9_EEEC2ESA_(%"class.thrust::zip_iterator.883"* %this, %"class.thrust::tuple.885"* %iterator_tuple) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.883"*, align 8
  store %"class.thrust::zip_iterator.883"* %this, %"class.thrust::zip_iterator.883"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.883"*, %"class.thrust::zip_iterator.883"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.883"* %this1 to %"class.thrust::iterator_facade.884"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.883", %"class.thrust::zip_iterator.883"* %this1, i32 0, i32 0
  call void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS9_(%"class.thrust::tuple.885"* %m_iterator_tuple, %"class.thrust::tuple.885"* dereferenceable(16) %iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_17counting_iteratorImNS_11use_defaultES2_S2_EENS_6detail15normal_iteratorIPiEENS_9null_typeES8_S8_S8_S8_S8_S8_S8_EC2ERKS3_RKS7_(%"class.thrust::tuple.885"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.885"*, align 8
  %t0.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.885"* %this, %"class.thrust::tuple.885"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t0, %"class.thrust::counting_iterator"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %t1, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.885"*, %"class.thrust::tuple.885"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.885"* %this1 to %"struct.thrust::detail::cons.886"*
  %1 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.886"* %0, %"class.thrust::counting_iterator"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_17counting_iteratorImNS_11use_defaultES3_S3_EENS1_INS0_15normal_iteratorIPiEENS_9null_typeEEEEC2IKS4_KS7_KS8_SE_SE_SE_SE_SE_SE_SE_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.886"* %this, %"class.thrust::counting_iterator"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  %t1.addr = alloca %"class.thrust::counting_iterator"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.886"* %this, %"struct.thrust::detail::cons.886"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::counting_iterator"* %t1, %"class.thrust::counting_iterator"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %t2, %"class.thrust::detail::normal_iterator.841"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::counting_iterator"*, %"class.thrust::counting_iterator"** %t1.addr, align 8
  call void @_ZN6thrust17counting_iteratorImNS_11use_defaultES1_S1_EC2ERKS2_(%"class.thrust::counting_iterator"* %head, %"class.thrust::counting_iterator"* dereferenceable(8) %0)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.887"* %tail, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS_9null_typeEEC2IKS4_EERT_RKS5_SC_SC_SC_SC_SC_SC_SC_SC_(%"struct.thrust::detail::cons.887"* %this, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.887"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.887"* %this, %"struct.thrust::detail::cons.887"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.841"* %t1, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.887"*, %"struct.thrust::detail::cons.887"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.887", %"struct.thrust::detail::cons.887"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.841"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.841"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPiEENS_17counting_iteratorImNS_11use_defaultESA_SA_EENS0_4consIS6_NS_9null_typeEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.886"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.886"*, align 8
  store %"struct.thrust::detail::cons.886"* %t, %"struct.thrust::detail::cons.886"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.886"*, %"struct.thrust::detail::cons.886"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.886", %"struct.thrust::detail::cons.886"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.887"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.841"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.887"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.887"*, align 8
  store %"struct.thrust::detail::cons.887"* %t, %"struct.thrust::detail::cons.887"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.887"*, %"struct.thrust::detail::cons.887"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.887", %"struct.thrust::detail::cons.887"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.841"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEC2Em(%"class.thrust::detail::vector_base.845"* %this, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.std::allocator.847", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  call void @_ZNSaIN6thrust4pairIiiEEEC2Ev(%"class.std::allocator.847"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EEC2ERKS4_(%"class.thrust::detail::contiguous_storage.846"* %m_storage, %"class.std::allocator.847"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.848"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEED2Ev to void (%"class.std::allocator.847"*)*)(%"class.std::allocator.847"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !485
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE12default_initEm(%"class.thrust::detail::vector_base.845"* %this1, i64 %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.848"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEED2Ev to void (%"class.std::allocator.847"*)*)(%"class.std::allocator.847"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.846"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIN6thrust4pairIiiEEEC2Ev(%"class.std::allocator.847"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.847"*, align 8
  store %"class.std::allocator.847"* %this, %"class.std::allocator.847"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.847"* %this1 to %"class.__gnu_cxx::new_allocator.848"*
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEEC2Ev(%"class.__gnu_cxx::new_allocator.848"* %0) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EEC2ERKS4_(%"class.thrust::detail::contiguous_storage.846"* %this, %"class.std::allocator.847"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  %alloc.addr = alloca %"class.std::allocator.847"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.847"* %alloc, %"class.std::allocator.847"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %alloc.addr, align 8
  call void @_ZNSaIN6thrust4pairIiiEEEC2ERKS2_(%"class.std::allocator.847"* %m_allocator, %"class.std::allocator.847"* dereferenceable(1) %0) #5
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIiiEEEC2ES4_(%"class.thrust::detail::normal_iterator.850"* %m_begin, %"struct.thrust::pair.82"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !490
  ret void

lpad:                                             ; preds = %entry
  %1 = landingpad { i8*, i32 }
          cleanup
  %2 = extractvalue { i8*, i32 } %1, 0
  store i8* %2, i8** %exn.slot, align 8
  %3 = extractvalue { i8*, i32 } %1, 1
  store i32 %3, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.848"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEED2Ev to void (%"class.std::allocator.847"*)*)(%"class.std::allocator.847"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEED2Ev(%"class.__gnu_cxx::new_allocator.848"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  store %"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.848"*, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE12default_initEm(%"class.thrust::detail::vector_base.845"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.850", align 8
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE8allocateEm(%"class.thrust::detail::contiguous_storage.846"* %m_storage, i64 %1)
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 1
  store i64 %2, i64* %m_size, align 8, !tbaa !485
  %m_storage2 = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %call4 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.845"* %this1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive5, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm(%"class.thrust::detail::contiguous_storage.846"* %m_storage2, %"struct.thrust::pair.82"* %3, i64 %call4)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EED2Ev(%"class.thrust::detail::contiguous_storage.846"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE10deallocateEv(%"class.thrust::detail::contiguous_storage.846"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.848"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEED2Ev to void (%"class.std::allocator.847"*)*)(%"class.std::allocator.847"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.848"*)* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEED2Ev to void (%"class.std::allocator.847"*)*)(%"class.std::allocator.847"* %m_allocator2) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEEC2Ev(%"class.__gnu_cxx::new_allocator.848"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  store %"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.848"*, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSaIN6thrust4pairIiiEEEC2ERKS2_(%"class.std::allocator.847"* %this, %"class.std::allocator.847"* dereferenceable(1) %__a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.std::allocator.847"*, align 8
  %__a.addr = alloca %"class.std::allocator.847"*, align 8
  store %"class.std::allocator.847"* %this, %"class.std::allocator.847"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.847"* %__a, %"class.std::allocator.847"** %__a.addr, align 8, !tbaa !7
  %this1 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %this.addr, align 8
  %0 = bitcast %"class.std::allocator.847"* %this1 to %"class.__gnu_cxx::new_allocator.848"*
  %1 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %__a.addr, align 8
  %2 = bitcast %"class.std::allocator.847"* %1 to %"class.__gnu_cxx::new_allocator.848"*
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEEC2ERKS4_(%"class.__gnu_cxx::new_allocator.848"* %0, %"class.__gnu_cxx::new_allocator.848"* dereferenceable(1) %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIiiEEEC2ES4_(%"class.thrust::detail::normal_iterator.850"* %this, %"struct.thrust::pair.82"* %p) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::detail::normal_iterator.850"* %this, %"class.thrust::detail::normal_iterator.850"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.850"* %this1 to %"class.thrust::iterator_adaptor.851"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_(%"class.thrust::iterator_adaptor.851"* %0, %"struct.thrust::pair.82"** dereferenceable(8) %p.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEEC2ERKS4_(%"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"* dereferenceable(1)) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  %.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  store %"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8, !tbaa !1
  store %"class.__gnu_cxx::new_allocator.848"* %0, %"class.__gnu_cxx::new_allocator.848"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.__gnu_cxx::new_allocator.848"*, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_EC2ERKS5_(%"class.thrust::iterator_adaptor.851"* %this, %"struct.thrust::pair.82"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.851"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"class.thrust::iterator_adaptor.851"* %this, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"** %iter, %"struct.thrust::pair.82"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.851"*, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.851"* %this1 to %"class.thrust::iterator_facade.852"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !491
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE8allocateEm(%"class.thrust::detail::contiguous_storage.846"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %ref.tmp3 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE8allocateERS4_m(%"class.std::allocator.847"* dereferenceable(1) %m_allocator, i64 %1)
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIiiEEEC2ES4_(%"class.thrust::detail::normal_iterator.850"* %ref.tmp, %"struct.thrust::pair.82"* %call)
  %2 = bitcast %"class.thrust::detail::normal_iterator.850"* %m_begin to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.850"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 2
  store i64 %4, i64* %m_size, align 8, !tbaa !490
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIiiEEEC2ES4_(%"class.thrust::detail::normal_iterator.850"* %ref.tmp3, %"struct.thrust::pair.82"* null)
  %5 = bitcast %"class.thrust::detail::normal_iterator.850"* %m_begin2 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.850"* %ref.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size4, align 8, !tbaa !490
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE19default_construct_nENS0_15normal_iteratorIPS3_EEm(%"class.thrust::detail::contiguous_storage.846"* %this, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  %n.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this2, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.850"* %first to %"class.thrust::iterator_adaptor.851"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.851"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23default_construct_rangeISaINS_4pairIiiEEEPS3_mEEvRT_T0_T1_(%"class.std::allocator.847"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.82"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.845"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !485
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE8allocateERS4_m(%"class.std::allocator.847"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m(%"class.std::allocator.847"* dereferenceable(1) %0, i64 %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE8allocateERS4_mEN19workaround_warnings8allocateES6_m(%"class.std::allocator.847"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.847"* %0 to %"class.__gnu_cxx::new_allocator.848"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.848"* %1, i64 %2, i8* null)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE8allocateEmPKv(%"class.__gnu_cxx::new_allocator.848"* %this, i64 %__n, i8*) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  %__n.addr = alloca i64, align 8
  %.addr = alloca i8*, align 8
  store %"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.848"*, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8
  %1 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.848"* %this1) #5
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  call void @_ZSt17__throw_bad_allocv() #15
  unreachable

if.end:                                           ; preds = %entry
  %2 = load i64, i64* %__n.addr, align 8, !tbaa !13
  %mul = mul i64 %2, 8
  %call2 = call i8* @_Znwm(i64 %mul)
  %3 = bitcast i8* %call2 to %"struct.thrust::pair.82"*
  ret %"struct.thrust::pair.82"* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE8max_sizeEv(%"class.__gnu_cxx::new_allocator.848"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  store %"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.848"*, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8
  ret i64 2305843009213693951
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23default_construct_rangeISaINS_4pairIiiEEEPS3_mEEvRT_T0_T1_(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIiiEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_(%"class.std::allocator.847"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.851"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.851"*, align 8
  store %"class.thrust::iterator_adaptor.851"* %this, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.851"*, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.82"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail23default_construct_rangeISaINS_4pairIiiEEEPS4_mEENS0_9enable_ifIXsr37needs_default_construct_via_allocatorIT_NS0_15pointer_elementIT0_E4typeEEE5valueEvE4typeERS8_SA_T1_(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaINS_4pairIiiEEEE3getERS4_(%"class.std::allocator.847"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEC2ERS5_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %agg.tmp, %"class.std::allocator.847"* dereferenceable(1) %4)
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %agg.tmp, i32 0, i32 0
  %5 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %coerce.dive, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIiiEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %2, i64 %3, %"class.std::allocator.847"* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIiiEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS6_EEEEET0_RKNS8_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first, i64 %n, %"class.std::allocator.847"* %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %f, i32 0, i32 0
  store %"class.std::allocator.847"* %f.coerce, %"class.std::allocator.847"** %coerce.dive, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %agg.tmp to i8*
  %5 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !62
  %coerce.dive2 = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %agg.tmp, i32 0, i32 0
  %6 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %coerce.dive2, align 8
  %call3 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIiiEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %2, i64 %3, %"class.std::allocator.847"* %6)
  ret %"struct.thrust::pair.82"* %call3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemISaINS_4pairIiiEEEE3getERS4_(%"class.std::allocator.847"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIiiEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_(%"class.std::allocator.847"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEC2ERS5_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %this, %"class.std::allocator.847"* dereferenceable(1) %a) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"*, align 8
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"** %this.addr, align 8, !tbaa !1
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"** %this.addr, align 8
  %a2 = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %this1, i32 0, i32 0
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  store %"class.std::allocator.847"* %0, %"class.std::allocator.847"** %a2, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIiiEEmNS_6detail23allocator_traits_detail24construct1_via_allocatorISaIS8_EEEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.82"* %first, i64 %n, %"class.std::allocator.847"* %f.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.895", align 8
  %i = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %f, i32 0, i32 0
  store %"class.std::allocator.847"* %f.coerce, %"class.std::allocator.847"** %coerce.dive, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.895"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.895"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* dereferenceable(8) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEEvEclIS5_EEvRT_(%"struct.thrust::detail::wrapped_function.895"* %wrapped_f, %"struct.thrust::pair.82"* dereferenceable(8) %6)
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %7, i32 1
  store %"struct.thrust::pair.82"* %incdec.ptr, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.895"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 8, i8* %10) #5
  ret %"struct.thrust::pair.82"* %9
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.895"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* dereferenceable(8) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.895"*, align 8
  %f.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"*, align 8
  store %"struct.thrust::detail::wrapped_function.895"* %this, %"struct.thrust::detail::wrapped_function.895"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %f, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.895"*, %"struct.thrust::detail::wrapped_function.895"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.895", %"struct.thrust::detail::wrapped_function.895"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false), !tbaa.struct !62
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEEvEclIS5_EEvRT_(%"struct.thrust::detail::wrapped_function.895"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.895"*, align 8
  %x.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::detail::wrapped_function.895"* %this, %"struct.thrust::detail::wrapped_function.895"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %x, %"struct.thrust::pair.82"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.895"*, %"struct.thrust::detail::wrapped_function.895"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.895", %"struct.thrust::detail::wrapped_function.895"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_4pairIiiEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair.82"* dereferenceable(8) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEclIS4_EEvRT_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %m_f, %"struct.thrust::pair.82"* dereferenceable(8) %call)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail24construct1_via_allocatorISaINS_4pairIiiEEEEclIS4_EEvRT_(%"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"*, align 8
  %x.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %this, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %x, %"struct.thrust::pair.82"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"*, %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"** %this.addr, align 8
  %a = getelementptr inbounds %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894", %"struct.thrust::detail::allocator_traits_detail::construct1_via_allocator.894"* %this1, i32 0, i32 0
  %ref = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  call void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE9constructIS3_EEvRS4_PT_(%"class.std::allocator.847"* dereferenceable(1) %ref, %"struct.thrust::pair.82"* %0)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_4pairIiiEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair.82"* dereferenceable(8) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair.82"* %ref, %"struct.thrust::pair.82"** %ref.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %ref.addr, align 8
  store %"struct.thrust::pair.82"* %0, %"struct.thrust::pair.82"** %ref.tmp, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castIPNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_(%"struct.thrust::pair.82"** dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE9constructIS3_EEvRS4_PT_(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  call void @_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIiiEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_(%"class.std::allocator.847"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail9constructISaINS_4pairIiiEEES4_EENS0_9enable_ifIXsr21has_member_construct1IT_T0_EE5valueEvE4typeERS7_PS8_(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p) #8 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.847"* %0 to %"class.__gnu_cxx::new_allocator.848"*
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE9constructIS3_JEEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.848"* %1, %"struct.thrust::pair.82"* %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE9constructIS3_JEEEvPT_DpOT0_(%"class.__gnu_cxx::new_allocator.848"* %this, %"struct.thrust::pair.82"* %__p) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  %__p.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %__p, %"struct.thrust::pair.82"** %__p.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.848"*, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %__p.addr, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::pair.82"* %0 to i8*
  %2 = bitcast i8* %1 to %"struct.thrust::pair.82"*
  call void @_ZN6thrust4pairIiiEC2Ev(%"struct.thrust::pair.82"* %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairIiiEC2Ev(%"struct.thrust::pair.82"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair.82"* %this, %"struct.thrust::pair.82"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %this1, i32 0, i32 0
  store i32 0, i32* %first, align 4, !tbaa !24
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %this1, i32 0, i32 1
  store i32 0, i32* %second, align 4, !tbaa !28
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castIPNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS6_(%"struct.thrust::pair.82"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"struct.thrust::pair.82"** %ptr, %"struct.thrust::pair.82"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %ptr.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %0, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsIPNS_4pairIiiEEE3getES4_(%"struct.thrust::pair.82"* %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsIPNS_4pairIiiEEE3getES4_(%"struct.thrust::pair.82"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair.82"* %ptr, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemISaINS_4pairIiiEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS7_E4typeEE4typeERS7_(%"class.std::allocator.847"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE10deallocateEv(%"class.thrust::detail::contiguous_storage.846"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.850", align 8
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.846"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.850"* %m_begin to %"class.thrust::iterator_adaptor.851"*
  %call2 = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.851"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call2, align 8, !tbaa !1
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.846"* %this1)
  call void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE10deallocateERS4_PS3_m(%"class.std::allocator.847"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.82"* %1, i64 %call3)
  %m_begin4 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPNS_4pairIiiEEEC2ES4_(%"class.thrust::detail::normal_iterator.850"* %ref.tmp, %"struct.thrust::pair.82"* null)
  %2 = bitcast %"class.thrust::detail::normal_iterator.850"* %m_begin4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.850"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !490
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::contiguous_storage.846"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !490
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE10deallocateERS4_PS3_m(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p, i64 %n) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m(%"class.std::allocator.847"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsISaINS_4pairIiiEEEE10deallocateERS4_PS3_mEN19workaround_warnings10deallocateES6_S7_m(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p, i64 %n) #0 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = bitcast %"class.std::allocator.847"* %0 to %"class.__gnu_cxx::new_allocator.848"*
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE10deallocateEPS3_m(%"class.__gnu_cxx::new_allocator.848"* %1, %"struct.thrust::pair.82"* %2, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorIN6thrust4pairIiiEEE10deallocateEPS3_m(%"class.__gnu_cxx::new_allocator.848"* %this, %"struct.thrust::pair.82"* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.848"*, align 8
  %__p.addr = alloca %"struct.thrust::pair.82"*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.848"* %this, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %__p, %"struct.thrust::pair.82"** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.848"*, %"class.__gnu_cxx::new_allocator.848"** %this.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %__p.addr, align 8, !tbaa !1
  %2 = bitcast %"struct.thrust::pair.82"* %1 to i8*
  call void @_ZdlPv(i8* %2) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust9transformINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPiEES8_NS6_IPNS_4pairIiiEEEE17make_pair_functorEET2_RKNS5_21execution_policy_baseIT_EET0_SK_T1_SE_T3_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i32* %first1.coerce, i32* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp12 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive2, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive4, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call8 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call8 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp9 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.841"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp10 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.841"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.850"* %agg.tmp11 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive13, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp9, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive15, i32 0, i32 0
  %11 = load i32*, i32** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp10, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive17, i32 0, i32 0
  %12 = load i32*, i32** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp11, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive19, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive20, align 8
  %call21 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPiEESA_NS8_IPNS_4pairIiiEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i32* %10, i32* %11, i32* %12, %"struct.thrust::pair.82"* %13)
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call21, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive24, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  ret %"struct.thrust::pair.82"* %14
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic9transformINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPiEESA_NS8_IPNS_4pairIiiEEEE17make_pair_functorEET2_RNS_16execution_policyIT_EET0_SL_T1_SG_T3_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i32* %first1.coerce, i32* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %op = alloca %struct.make_pair_functor, align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.896", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.896", align 8
  %agg.tmp8 = alloca %"class.thrust::tuple.898", align 8
  %agg.tmp9 = alloca %"class.thrust::zip_iterator.896", align 8
  %agg.tmp10 = alloca %"class.thrust::tuple.898", align 8
  %agg.tmp11 = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %agg.tmp12 = alloca %struct.make_pair_functor, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive2, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive4, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.896"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.898"* sret %agg.tmp8, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.896"* sret %agg.tmp, %"class.thrust::tuple.898"* byval align 8 %agg.tmp8)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.898"* sret %agg.tmp10, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.896"* sret %agg.tmp9, %"class.thrust::tuple.898"* byval align 8 %agg.tmp10)
  call void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEC2ES2_(%"struct.thrust::detail::binary_transform_functor"* %agg.tmp11)
  call void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEESA_NS8_IPNS_4pairIiiEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_(%"class.thrust::zip_iterator.896"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, %"class.thrust::zip_iterator.896"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.896"* byval align 8 %agg.tmp9)
  %call = call dereferenceable(24) %"class.thrust::tuple.898"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.896"* %zipped_result)
  %3 = bitcast %"class.thrust::tuple.898"* %call to %"struct.thrust::detail::cons.899"*
  %call13 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.850"* %retval to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.850"* %call13 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::zip_iterator.896"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %6) #5
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive14, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  ret %"struct.thrust::pair.82"* %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEESA_NS8_IPNS_4pairIiiEEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS7_24binary_transform_functorI17make_pair_functorEEEET0_RKNS7_21execution_policy_baseIT_EESL_SL_T1_(%"class.thrust::zip_iterator.896"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.896"* byval align 8 %first, %"class.thrust::zip_iterator.896"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.896", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.896", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::zip_iterator.896"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::zip_iterator.896"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %4 = bitcast %"class.thrust::zip_iterator.896"* %agg.tmp2 to i8*
  %5 = bitcast %"class.thrust::zip_iterator.896"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor"* %agg.tmp3 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEESC_NSA_IPNS_4pairIiiEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_(%"class.thrust::zip_iterator.896"* sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"class.thrust::zip_iterator.896"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.896"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS_12zip_iteratorIT_EESD_(%"class.thrust::zip_iterator.896"* noalias sret %agg.result, %"class.thrust::tuple.898"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.898", align 8
  %0 = bitcast %"class.thrust::tuple.898"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.898"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_(%"class.thrust::zip_iterator.896"* %agg.result, %"class.thrust::tuple.898"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESD_SD_SD_SD_SD_SD_E4typeERKSA_RKSB_RKSC_(%"class.thrust::tuple.898"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  store %"class.thrust::detail::normal_iterator.841"* %t0, %"class.thrust::detail::normal_iterator.841"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %t1, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.850"* %t2, %"class.thrust::detail::normal_iterator.850"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_(%"class.thrust::tuple.898"* %agg.result, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %c, %"struct.thrust::detail::cons.899"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEENS4_IPiEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.899"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.850"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.898"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.896"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  store %"class.thrust::zip_iterator.896"* %this, %"class.thrust::zip_iterator.896"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.896", %"class.thrust::zip_iterator.896"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.898"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential8for_eachINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEESC_NSA_IPNS_4pairIiiEEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEENS9_24binary_transform_functorI17make_pair_functorEEEET0_RNS2_16execution_policyIT_EESN_SN_T1_(%"class.thrust::zip_iterator.896"* noalias sret %agg.result, %"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"class.thrust::zip_iterator.896"* byval align 8 %first, %"class.thrust::zip_iterator.896"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.106", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.902", align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %1 = bitcast %"struct.thrust::detail::wrapped_function.106"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEC2ERKS4_(%"struct.thrust::detail::wrapped_function.106"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor"* dereferenceable(1) %f)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %2 = bitcast %"class.thrust::zip_iterator.896"* %first to %"class.thrust::iterator_facade.897"*
  %3 = bitcast %"class.thrust::zip_iterator.896"* %last to %"class.thrust::iterator_facade.897"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.897"* dereferenceable(1) %2, %"class.thrust::iterator_facade.897"* dereferenceable(1) %3)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %4 = bitcast %"class.thrust::zip_iterator.896"* %first to %"class.thrust::iterator_facade.897"*
  call void @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv(%"class.thrust::detail::tuple_of_iterator_references.902"* sret %ref.tmp, %"class.thrust::iterator_facade.897"* %4)
  call void @_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRiS8_RNS_4pairIiiEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.106"* %wrapped_f, %"class.thrust::detail::tuple_of_iterator_references.902"* dereferenceable(24) %ref.tmp)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %5 = bitcast %"class.thrust::zip_iterator.896"* %first to %"class.thrust::iterator_facade.897"*
  %call1 = call dereferenceable(24) %"class.thrust::zip_iterator.896"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv(%"class.thrust::iterator_facade.897"* %5)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %6 = bitcast %"class.thrust::zip_iterator.896"* %agg.result to i8*
  %7 = bitcast %"class.thrust::zip_iterator.896"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 24, i32 8, i1 false)
  %8 = bitcast %"struct.thrust::detail::wrapped_function.106"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %8) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElSD_SE_SI_SJ_SN_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSO_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.897"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.897"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.897"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.897"*, align 8
  store %"class.thrust::iterator_facade.897"* %lhs, %"class.thrust::iterator_facade.897"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.897"* %rhs, %"class.thrust::iterator_facade.897"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.897"*, %"class.thrust::iterator_facade.897"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.897"* %0 to %"class.thrust::zip_iterator.896"*
  %2 = load %"class.thrust::iterator_facade.897"*, %"class.thrust::iterator_facade.897"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.897"* %2 to %"class.thrust::zip_iterator.896"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_(%"class.thrust::zip_iterator.896"* dereferenceable(24) %1, %"class.thrust::zip_iterator.896"* dereferenceable(24) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_24binary_transform_functorI17make_pair_functorEEvEclINS0_28tuple_of_iterator_referencesIRiS8_RNS_4pairIiiEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.106"* %this, %"class.thrust::detail::tuple_of_iterator_references.902"* dereferenceable(24) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.106"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.902"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.902", align 8
  store %"struct.thrust::detail::wrapped_function.106"* %this, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.902"* %x, %"class.thrust::detail::tuple_of_iterator_references.902"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.106"*, %"struct.thrust::detail::wrapped_function.106"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.106", %"struct.thrust::detail::wrapped_function.106"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.902"*, %"class.thrust::detail::tuple_of_iterator_references.902"** %x.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::detail::tuple_of_iterator_references.902"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_(%"class.thrust::detail::tuple_of_iterator_references.902"* dereferenceable(24) %0)
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.902"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.902"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  call void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRiS6_RNS_4pairIiiEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_(%"struct.thrust::detail::binary_transform_functor"* %m_f, %"class.thrust::detail::tuple_of_iterator_references.902"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEdeEv(%"class.thrust::detail::tuple_of_iterator_references.902"* noalias sret %agg.result, %"class.thrust::iterator_facade.897"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.897"*, align 8
  store %"class.thrust::iterator_facade.897"* %this, %"class.thrust::iterator_facade.897"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.897"*, %"class.thrust::iterator_facade.897"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.896"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.897"* %this1)
  call void @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_(%"class.thrust::detail::tuple_of_iterator_references.902"* sret %agg.result, %"class.thrust::zip_iterator.896"* dereferenceable(24) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.896"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElEppEv(%"class.thrust::iterator_facade.897"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.897"*, align 8
  store %"class.thrust::iterator_facade.897"* %this, %"class.thrust::iterator_facade.897"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.897"*, %"class.thrust::iterator_facade.897"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.896"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.897"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_(%"class.thrust::zip_iterator.896"* dereferenceable(24) %call)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.896"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.897"* %this1)
  ret %"class.thrust::zip_iterator.896"* %call2
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEESE_EEbRKT_RKT0_(%"class.thrust::zip_iterator.896"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.896"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  store %"class.thrust::zip_iterator.896"* %f1, %"class.thrust::zip_iterator.896"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.896"* %f2, %"class.thrust::zip_iterator.896"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.896"* %0, %"class.thrust::zip_iterator.896"* dereferenceable(24) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE5equalISB_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.896"* %this, %"class.thrust::zip_iterator.896"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  store %"class.thrust::zip_iterator.896"* %this, %"class.thrust::zip_iterator.896"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.896"* %other, %"class.thrust::zip_iterator.896"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.898"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.896"* %this1)
  %0 = bitcast %"class.thrust::tuple.898"* %call to %"struct.thrust::detail::cons.899"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %0)
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %call2 to %"class.thrust::iterator_facade.843"*
  %2 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %other.addr, align 8
  %call3 = call dereferenceable(24) %"class.thrust::tuple.898"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.896"* %2)
  %3 = bitcast %"class.thrust::tuple.898"* %call3 to %"struct.thrust::detail::cons.899"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.841"* %call4 to %"class.thrust::iterator_facade.843"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.843"* dereferenceable(1) %1, %"class.thrust::iterator_facade.843"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.843"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.843"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  store %"class.thrust::iterator_facade.843"* %lhs, %"class.thrust::iterator_facade.843"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.843"* %rhs, %"class.thrust::iterator_facade.843"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.843"* %0 to %"class.thrust::detail::normal_iterator.841"*
  %2 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.843"* %2 to %"class.thrust::detail::normal_iterator.841"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPiEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %c, %"struct.thrust::detail::cons.899"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.899"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.841"* %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPiEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  store %"class.thrust::detail::normal_iterator.841"* %f1, %"class.thrust::detail::normal_iterator.841"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %f2, %"class.thrust::detail::normal_iterator.841"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to %"class.thrust::iterator_adaptor.842"*
  %2 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %2 to %"class.thrust::iterator_adaptor.842"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.842"* %1, %"class.thrust::iterator_adaptor.842"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E5equalIS4_S3_S5_S5_S5_S5_S5_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"* dereferenceable(8) %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  store %"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.842"* %x, %"class.thrust::iterator_adaptor.842"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %m_iterator, align 8, !tbaa !478
  %1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %x.addr, align 8
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %1)
  %2 = load i32*, i32** %call, align 8, !tbaa !1
  %cmp = icmp eq i32* %0, %2
  ret i1 %cmp
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.899"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %t, %"struct.thrust::detail::cons.899"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.899", %"struct.thrust::detail::cons.899"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.841"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorI17make_pair_functorEclINS0_28tuple_of_iterator_referencesIRiS6_RNS_4pairIiiEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEENS0_61enable_if_non_const_reference_or_tuple_of_iterator_referencesINS_13tuple_elementILi2ET_E4typeEE4typeESE_(%"struct.thrust::detail::binary_transform_functor"* %this, %"class.thrust::detail::tuple_of_iterator_references.902"* byval align 8 %t) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::detail::binary_transform_functor"* %this, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor"*, %"struct.thrust::detail::binary_transform_functor"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.902"* %t to %"struct.thrust::detail::cons.904"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi2ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.904"* dereferenceable(24) %0)
  %f = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor", %"struct.thrust::detail::binary_transform_functor"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.902"* %t to %"struct.thrust::detail::cons.904"*
  %call2 = call dereferenceable(4) i32* @_ZN6thrust3getILi0ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.904"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.902"* %t to %"struct.thrust::detail::cons.904"*
  %call3 = call dereferenceable(4) i32* @_ZN6thrust3getILi1ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.904"* dereferenceable(24) %2)
  %call4 = call i64 @_ZN17make_pair_functorclIiiEEN6thrust4pairIT_T0_EERKS3_RKS4_(%struct.make_pair_functor* %f, i32* dereferenceable(4) %call2, i32* dereferenceable(4) %call3)
  %3 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %3, align 4
  %4 = bitcast %"struct.thrust::pair.82"* %call to i8*
  %5 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 4, i1 false), !tbaa.struct !471
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::detail::tuple_of_iterator_references.902"* @_ZN6thrust18raw_reference_castINS_6detail28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_13raw_referenceIKT_E4typeERSB_(%"class.thrust::detail::tuple_of_iterator_references.902"* dereferenceable(24) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.902"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.902"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.902"* %ref, %"class.thrust::detail::tuple_of_iterator_references.902"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.902"*, %"class.thrust::detail::tuple_of_iterator_references.902"** %ref.addr, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.902"* %0, %"class.thrust::detail::tuple_of_iterator_references.902"** %ref.tmp, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.902"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::detail::tuple_of_iterator_references.902"** dereferenceable(8) %ref.tmp)
  ret %"class.thrust::detail::tuple_of_iterator_references.902"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi2ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.904"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.904"*, align 8
  store %"struct.thrust::detail::cons.904"* %c, %"struct.thrust::detail::cons.904"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.904"*, %"struct.thrust::detail::cons.904"** %c.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIiiEERiNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.904"* dereferenceable(24) %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN17make_pair_functorclIiiEEN6thrust4pairIT_T0_EERKS3_RKS4_(%struct.make_pair_functor* %this, i32* dereferenceable(4) %x, i32* dereferenceable(4) %y) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %struct.make_pair_functor*, align 8
  %x.addr = alloca i32*, align 8
  %y.addr = alloca i32*, align 8
  store %struct.make_pair_functor* %this, %struct.make_pair_functor** %this.addr, align 8, !tbaa !1
  store i32* %x, i32** %x.addr, align 8, !tbaa !7
  store i32* %y, i32** %y.addr, align 8, !tbaa !7
  %this1 = load %struct.make_pair_functor*, %struct.make_pair_functor** %this.addr, align 8
  %0 = load i32*, i32** %x.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  %2 = load i32*, i32** %y.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  %call = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %1, i32 %3)
  %4 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %4, align 4
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %6 = load i64, i64* %5, align 4
  ret i64 %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust3getILi0ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.904"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.904"*, align 8
  store %"struct.thrust::detail::cons.904"* %c, %"struct.thrust::detail::cons.904"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.904"*, %"struct.thrust::detail::cons.904"** %c.addr, align 8
  %call = call dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS0_4consIS4_NS5_IRNS_4pairIiiEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.904"* dereferenceable(24) %0)
  ret i32* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust3getILi1ERiNS_6detail4consIS1_NS3_IRNS_4pairIiiEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS3_IT0_T1_EEE4typeEE14non_const_typeERSE_(%"struct.thrust::detail::cons.904"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.904"*, align 8
  store %"struct.thrust::detail::cons.904"* %c, %"struct.thrust::detail::cons.904"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.904"*, %"struct.thrust::detail::cons.904"** %c.addr, align 8
  %call = call dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi1EE3getIRiS4_NS0_4consIS4_NS5_IRNS_4pairIiiEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.904"* dereferenceable(24) %0)
  ret i32* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi2EE3getIRNS_4pairIiiEERiNS0_4consIS7_NS8_IS6_NS_9null_typeEEEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.904"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.904"*, align 8
  store %"struct.thrust::detail::cons.904"* %t, %"struct.thrust::detail::cons.904"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.904"*, %"struct.thrust::detail::cons.904"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.904", %"struct.thrust::detail::cons.904"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIiiEERiNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.905"* dereferenceable(16) %tail)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIiiEERiNS0_4consIS6_NS_9null_typeEEEEET_RNS8_IT0_T1_EE(%"struct.thrust::detail::cons.905"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.905"*, align 8
  store %"struct.thrust::detail::cons.905"* %t, %"struct.thrust::detail::cons.905"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.905"*, %"struct.thrust::detail::cons.905"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.905", %"struct.thrust::detail::cons.905"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIiiEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.906"* dereferenceable(8) %tail)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIiiEES6_NS_9null_typeEEET_RNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.906"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.906"*, align 8
  store %"struct.thrust::detail::cons.906"* %t, %"struct.thrust::detail::cons.906"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.906"*, %"struct.thrust::detail::cons.906"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.906", %"struct.thrust::detail::cons.906"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.82"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS0_4consIS4_NS5_IRNS_4pairIiiEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.904"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.904"*, align 8
  store %"struct.thrust::detail::cons.904"* %t, %"struct.thrust::detail::cons.904"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.904"*, %"struct.thrust::detail::cons.904"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.904", %"struct.thrust::detail::cons.904"* %0, i32 0, i32 0
  %ref = load i32*, i32** %head, align 8, !tbaa !7
  ret i32* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi1EE3getIRiS4_NS0_4consIS4_NS5_IRNS_4pairIiiEENS_9null_typeEEEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.904"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.904"*, align 8
  store %"struct.thrust::detail::cons.904"* %t, %"struct.thrust::detail::cons.904"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.904"*, %"struct.thrust::detail::cons.904"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.904", %"struct.thrust::detail::cons.904"* %0, i32 0, i32 1
  %call = call dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS0_4consIRNS_4pairIiiEENS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.905"* dereferenceable(16) %tail)
  ret i32* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust6detail9get_classILi0EE3getIRiS4_NS0_4consIRNS_4pairIiiEENS_9null_typeEEEEET_RNS5_IT0_T1_EE(%"struct.thrust::detail::cons.905"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.905"*, align 8
  store %"struct.thrust::detail::cons.905"* %t, %"struct.thrust::detail::cons.905"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.905"*, %"struct.thrust::detail::cons.905"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.905", %"struct.thrust::detail::cons.905"* %0, i32 0, i32 0
  %ref = load i32*, i32** %head, align 8, !tbaa !7
  ret i32* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.902"* @_ZN6thrust16raw_pointer_castIPKNS_6detail28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEEENS1_14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::detail::tuple_of_iterator_references.902"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.902"**, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.902"** %ptr, %"class.thrust::detail::tuple_of_iterator_references.902"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.902"**, %"class.thrust::detail::tuple_of_iterator_references.902"*** %ptr.addr, align 8
  %1 = load %"class.thrust::detail::tuple_of_iterator_references.902"*, %"class.thrust::detail::tuple_of_iterator_references.902"** %0, align 8, !tbaa !1
  %call = call %"class.thrust::detail::tuple_of_iterator_references.902"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_(%"class.thrust::detail::tuple_of_iterator_references.902"* %1)
  ret %"class.thrust::detail::tuple_of_iterator_references.902"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"class.thrust::detail::tuple_of_iterator_references.902"* @_ZN6thrust6detail14pointer_traitsIPKNS0_28tuple_of_iterator_referencesIRiS3_RNS_4pairIiiEENS_9null_typeES7_S7_S7_S7_S7_S7_EEE3getESA_(%"class.thrust::detail::tuple_of_iterator_references.902"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.902"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.902"* %ptr, %"class.thrust::detail::tuple_of_iterator_references.902"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.902"*, %"class.thrust::detail::tuple_of_iterator_references.902"** %ptr.addr, align 8, !tbaa !1
  ret %"class.thrust::detail::tuple_of_iterator_references.902"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEENT_9referenceERKSF_(%"class.thrust::detail::tuple_of_iterator_references.902"* noalias sret %agg.result, %"class.thrust::zip_iterator.896"* dereferenceable(24) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  store %"class.thrust::zip_iterator.896"* %f, %"class.thrust::zip_iterator.896"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %f.addr, align 8
  call void @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv(%"class.thrust::detail::tuple_of_iterator_references.902"* sret %agg.result, %"class.thrust::zip_iterator.896"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.896"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.897"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.897"*, align 8
  store %"class.thrust::iterator_facade.897"* %this, %"class.thrust::iterator_facade.897"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.897"*, %"class.thrust::iterator_facade.897"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.897"* %this1 to %"class.thrust::zip_iterator.896"*
  ret %"class.thrust::zip_iterator.896"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE11dereferenceEv(%"class.thrust::detail::tuple_of_iterator_references.902"* noalias sret %agg.result, %"class.thrust::zip_iterator.896"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.903", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.896"* %this, %"class.thrust::zip_iterator.896"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.898"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.896"* %this1)
  call void @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_(%"class.thrust::tuple.903"* sret %ref.tmp, %"class.thrust::tuple.898"* dereferenceable(24) %call)
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRiS2_RNS_4pairIiiEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE(%"class.thrust::detail::tuple_of_iterator_references.902"* %agg.result, %"class.thrust::tuple.903"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISF_EE5valueEE4typeERKSF_T1_(%"class.thrust::tuple.903"* noalias sret %agg.result, %"class.thrust::tuple.898"* dereferenceable(24) %t) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.898"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.898"* %t, %"class.thrust::tuple.898"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.898"*, %"class.thrust::tuple.898"** %t.addr, align 8
  call void @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_(%"class.thrust::tuple.903"* sret %agg.result, %"class.thrust::tuple.898"* dereferenceable(24) %0)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRiS2_RNS_4pairIiiEENS_9null_typeES6_S6_S6_S6_S6_S6_EC2ERKNS_5tupleIS2_S2_S5_S6_S6_S6_S6_S6_S6_S6_EE(%"class.thrust::detail::tuple_of_iterator_references.902"* %this, %"class.thrust::tuple.903"* dereferenceable(24) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.902"*, align 8
  %other.addr = alloca %"class.thrust::tuple.903"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.902"* %this, %"class.thrust::detail::tuple_of_iterator_references.902"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.903"* %other, %"class.thrust::tuple.903"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.902"*, %"class.thrust::detail::tuple_of_iterator_references.902"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.902"* %this1 to %"class.thrust::tuple.903"*
  %1 = load %"class.thrust::tuple.903"*, %"class.thrust::tuple.903"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.903"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.903"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EENS0_20dereference_iterator5applyESC_Lj3EE27do_it_on_the_host_or_deviceERKSB_SC_(%"class.thrust::tuple.903"* noalias sret %agg.result, %"class.thrust::tuple.898"* dereferenceable(24) %t) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.898"*, align 8
  store %"class.thrust::tuple.898"* %t, %"class.thrust::tuple.898"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.898"*, %"class.thrust::tuple.898"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.898"* %0 to %"struct.thrust::detail::cons.899"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %1)
  %call1 = call dereferenceable(4) i32* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPiEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.898"*, %"class.thrust::tuple.898"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.898"* %2 to %"struct.thrust::detail::cons.899"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %3)
  %call3 = call dereferenceable(4) i32* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPiEEEENS1_5applyIT_E4typeERKS7_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call2)
  %4 = load %"class.thrust::tuple.898"*, %"class.thrust::tuple.898"** %t.addr, align 8
  %5 = bitcast %"class.thrust::tuple.898"* %4 to %"struct.thrust::detail::cons.899"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %5)
  %call5 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIiiEEEEEENS1_5applyIT_E4typeERKS9_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %call4)
  call void @_ZN6thrust5tupleIRiS1_RNS_4pairIiiEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_(%"class.thrust::tuple.903"* %agg.result, i32* dereferenceable(4) %call1, i32* dereferenceable(4) %call3, %"struct.thrust::pair.82"* dereferenceable(8) %call5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust3getILi1ENS_6detail15normal_iteratorIPiEENS1_4consIS4_NS5_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS5_IT0_T1_EEE4typeEE10const_typeERKSH_(%"struct.thrust::detail::cons.899"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %c, %"struct.thrust::detail::cons.899"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.899"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.841"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorIPNS_4pairIiiEEEEEENS1_5applyIT_E4typeERKS9_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.850"* %it, %"class.thrust::detail::normal_iterator.850"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.850"* %0 to %"class.thrust::iterator_facade.852"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.852"* %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRiS1_RNS_4pairIiiEENS_9null_typeES5_S5_S5_S5_S5_S5_EC2ES1_S1_S4_(%"class.thrust::tuple.903"* %this, i32* dereferenceable(4) %t0, i32* dereferenceable(4) %t1, %"struct.thrust::pair.82"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.903"*, align 8
  %t0.addr = alloca i32*, align 8
  %t1.addr = alloca i32*, align 8
  %t2.addr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.903"* %this, %"class.thrust::tuple.903"** %this.addr, align 8, !tbaa !1
  store i32* %t0, i32** %t0.addr, align 8, !tbaa !7
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %t2, %"struct.thrust::pair.82"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.903"*, %"class.thrust::tuple.903"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.903"* %this1 to %"struct.thrust::detail::cons.904"*
  %1 = load i32*, i32** %t0.addr, align 8
  %2 = load i32*, i32** %t1.addr, align 8
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consIRiNS1_IS2_NS1_IRNS_4pairIiiEENS_9null_typeEEEEEEC2IiiS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.904"* %0, i32* dereferenceable(4) %1, i32* dereferenceable(4) %2, %"struct.thrust::pair.82"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consIS6_NS9_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.899"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %t, %"struct.thrust::detail::cons.899"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.899", %"struct.thrust::detail::cons.899"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consINS4_IPNS_4pairIiiEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.900"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.841"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPiEES6_NS0_4consINS4_IPNS_4pairIiiEEEENS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.900"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.900"*, align 8
  store %"struct.thrust::detail::cons.900"* %t, %"struct.thrust::detail::cons.900"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.900"*, %"struct.thrust::detail::cons.900"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.900", %"struct.thrust::detail::cons.900"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.841"* %head
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.852"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.852"*, align 8
  store %"class.thrust::iterator_facade.852"* %this, %"class.thrust::iterator_facade.852"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.852"*, %"class.thrust::iterator_facade.852"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.852"* %this1)
  %call2 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEENT_9referenceERKS8_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %call)
  ret %"struct.thrust::pair.82"* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEENT_9referenceERKS8_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  store %"class.thrust::detail::normal_iterator.850"* %f, %"class.thrust::detail::normal_iterator.850"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.850"* %0 to %"class.thrust::iterator_adaptor.851"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv(%"class.thrust::iterator_adaptor.851"* %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.852"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.852"*, align 8
  store %"class.thrust::iterator_facade.852"* %this, %"class.thrust::iterator_facade.852"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.852"*, %"class.thrust::iterator_facade.852"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.852"* %this1 to %"class.thrust::detail::normal_iterator.850"*
  ret %"class.thrust::detail::normal_iterator.850"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E11dereferenceEv(%"class.thrust::iterator_adaptor.851"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.851"*, align 8
  store %"class.thrust::iterator_adaptor.851"* %this, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.851"*, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !491
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRiNS1_IS2_NS1_IRNS_4pairIiiEENS_9null_typeEEEEEEC2IiiS4_KS6_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.904"* %this, i32* dereferenceable(4) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::pair.82"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.904"*, align 8
  %t1.addr = alloca i32*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::pair.82"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.904"* %this, %"struct.thrust::detail::cons.904"** %this.addr, align 8, !tbaa !1
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %t3, %"struct.thrust::pair.82"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.904"*, %"struct.thrust::detail::cons.904"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.904", %"struct.thrust::detail::cons.904"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %t1.addr, align 8
  store i32* %0, i32** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.904", %"struct.thrust::detail::cons.904"* %this1, i32 0, i32 1
  %1 = load i32*, i32** %t2.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRiNS1_IRNS_4pairIiiEENS_9null_typeEEEEC2IiS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.905"* %tail, i32* dereferenceable(4) %1, %"struct.thrust::pair.82"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRiNS1_IRNS_4pairIiiEENS_9null_typeEEEEC2IiS4_KS6_SA_SA_SA_SA_SA_SA_SA_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.905"* %this, i32* dereferenceable(4) %t1, %"struct.thrust::pair.82"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.905"*, align 8
  %t1.addr = alloca i32*, align 8
  %t2.addr = alloca %"struct.thrust::pair.82"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.905"* %this, %"struct.thrust::detail::cons.905"** %this.addr, align 8, !tbaa !1
  store i32* %t1, i32** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %t2, %"struct.thrust::pair.82"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.905"*, %"struct.thrust::detail::cons.905"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.905", %"struct.thrust::detail::cons.905"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %t1.addr, align 8
  store i32* %0, i32** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.905", %"struct.thrust::detail::cons.905"* %this1, i32 0, i32 1
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRNS_4pairIiiEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.906"* %tail, %"struct.thrust::pair.82"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRNS_4pairIiiEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.906"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.906"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.82"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.906"* %this, %"struct.thrust::detail::cons.906"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %t1, %"struct.thrust::pair.82"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.906"*, %"struct.thrust::detail::cons.906"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.906", %"struct.thrust::detail::cons.906"* %this9, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t1.addr, align 8
  store %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"** %head, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES7_NS5_IPNS_4pairIiiEEEENS_9null_typeESC_SC_SC_SC_SC_SC_EEEEEEvRT_(%"class.thrust::zip_iterator.896"* dereferenceable(24) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  store %"class.thrust::zip_iterator.896"* %f, %"class.thrust::zip_iterator.896"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv(%"class.thrust::zip_iterator.896"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.896"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EEEENS2_IiiS8_SB_SB_SB_SB_SB_SB_SB_EENS_6system3cpp6detail3tagENS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRiSL_RS8_SB_SB_SB_SB_SB_SB_SB_EElE7derivedEv(%"class.thrust::iterator_facade.897"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.897"*, align 8
  store %"class.thrust::iterator_facade.897"* %this, %"class.thrust::iterator_facade.897"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.897"*, %"class.thrust::iterator_facade.897"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.897"* %this1 to %"class.thrust::zip_iterator.896"*
  ret %"class.thrust::zip_iterator.896"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEE9incrementEv(%"class.thrust::zip_iterator.896"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.896"* %this, %"class.thrust::zip_iterator.896"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.896", %"class.thrust::zip_iterator.896"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_(%"class.thrust::tuple.898"* dereferenceable(24) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorIPiEES6_NS4_IPNS_4pairIiiEEEENS_9null_typeESB_SB_SB_SB_SB_SB_EENS0_18increment_iteratorEEET0_RT_SE_(%"class.thrust::tuple.898"* dereferenceable(24) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.898"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.898"* %t, %"class.thrust::tuple.898"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.898"*, %"class.thrust::tuple.898"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.898"* %0 to %"struct.thrust::detail::cons.899"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.899"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPiEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.898"*, %"class.thrust::tuple.898"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.898"* %2 to %"struct.thrust::detail::cons.899"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.900"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.899"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPiEENS3_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_(%"struct.thrust::detail::cons.900"* dereferenceable(16) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.899"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %this, %"struct.thrust::detail::cons.899"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.899", %"struct.thrust::detail::cons.899"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.841"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPiEENS3_INS4_IPNS_4pairIiiEEEENS_9null_typeEEEEENS0_18increment_iteratorEEET0_RT_SF_(%"struct.thrust::detail::cons.900"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.900"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.900"* %t, %"struct.thrust::detail::cons.900"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.900"*, %"struct.thrust::detail::cons.900"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.900"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPiEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.900"*, %"struct.thrust::detail::cons.900"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.901"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.900"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_(%"struct.thrust::detail::cons.901"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.900"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.899"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %this, %"struct.thrust::detail::cons.899"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.899", %"struct.thrust::detail::cons.899"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.900"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.900"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.900"*, align 8
  store %"struct.thrust::detail::cons.900"* %this, %"struct.thrust::detail::cons.900"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.900"*, %"struct.thrust::detail::cons.900"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.900", %"struct.thrust::detail::cons.900"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.841"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SC_(%"struct.thrust::detail::cons.901"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.901"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.901"* %t, %"struct.thrust::detail::cons.901"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.901"*, %"struct.thrust::detail::cons.901"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.901"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIiiEEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.901"*, %"struct.thrust::detail::cons.901"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.901"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.901"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.900"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.900"*, align 8
  store %"struct.thrust::detail::cons.900"* %this, %"struct.thrust::detail::cons.900"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.900"*, %"struct.thrust::detail::cons.900"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.900", %"struct.thrust::detail::cons.900"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.901"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorIPNS_4pairIiiEEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.850"* %it, %"class.thrust::detail::normal_iterator.850"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.850"* %0 to %"class.thrust::iterator_facade.852"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.852"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.901"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.901"*, align 8
  store %"struct.thrust::detail::cons.901"* %this, %"struct.thrust::detail::cons.901"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.901"*, %"struct.thrust::detail::cons.901"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.901", %"struct.thrust::detail::cons.901"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.850"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.901"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.901"*, align 8
  store %"struct.thrust::detail::cons.901"* %this, %"struct.thrust::detail::cons.901"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.901"*, %"struct.thrust::detail::cons.901"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.852"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.852"*, align 8
  store %"class.thrust::iterator_facade.852"* %this, %"class.thrust::iterator_facade.852"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.852"*, %"class.thrust::iterator_facade.852"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.852"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEEvRT_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.852"* %this1)
  ret %"class.thrust::detail::normal_iterator.850"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEEvRT_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  store %"class.thrust::detail::normal_iterator.850"* %f, %"class.thrust::detail::normal_iterator.850"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.850"* %0 to %"class.thrust::iterator_adaptor.851"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv(%"class.thrust::iterator_adaptor.851"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.852"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.852"*, align 8
  store %"class.thrust::iterator_facade.852"* %this, %"class.thrust::iterator_facade.852"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.852"*, %"class.thrust::iterator_facade.852"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.852"* %this1 to %"class.thrust::detail::normal_iterator.850"*
  ret %"class.thrust::detail::normal_iterator.850"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E9incrementEv(%"class.thrust::iterator_adaptor.851"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.851"*, align 8
  store %"class.thrust::iterator_adaptor.851"* %this, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.851"*, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !491
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 1
  store %"struct.thrust::pair.82"* %incdec.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !491
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorIPiEES5_NS3_IPNS_4pairIiiEEEENS_9null_typeESA_SA_SA_SA_SA_SA_EEEC2ESB_(%"class.thrust::zip_iterator.896"* %this, %"class.thrust::tuple.898"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.896"*, align 8
  store %"class.thrust::zip_iterator.896"* %this, %"class.thrust::zip_iterator.896"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.896"*, %"class.thrust::zip_iterator.896"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.896"* %this1 to %"class.thrust::iterator_facade.897"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.896", %"class.thrust::zip_iterator.896"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.898"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.898"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorIPiEES4_NS2_IPNS_4pairIiiEEEENS_9null_typeES9_S9_S9_S9_S9_S9_EC2ERKS4_SC_RKS8_(%"class.thrust::tuple.898"* %this, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.898"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.898"* %this, %"class.thrust::tuple.898"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.841"* %t0, %"class.thrust::detail::normal_iterator.841"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %t1, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.850"* %t2, %"class.thrust::detail::normal_iterator.850"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.898"*, %"class.thrust::tuple.898"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.898"* %this1 to %"struct.thrust::detail::cons.899"*
  %1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.899"* %0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_IS4_NS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEEEC2IKS4_SE_KS8_KS9_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.899"* %this, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.899"* %this, %"struct.thrust::detail::cons.899"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.841"* %t1, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %t2, %"class.thrust::detail::normal_iterator.841"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.850"* %t3, %"class.thrust::detail::normal_iterator.850"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.899", %"struct.thrust::detail::cons.899"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.899", %"struct.thrust::detail::cons.899"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.900"* %tail, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPiEENS1_INS2_IPNS_4pairIiiEEEENS_9null_typeEEEEC2IKS4_KS8_KS9_SF_SF_SF_SF_SF_SF_SF_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.900"* %this, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.900"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.900"* %this, %"struct.thrust::detail::cons.900"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.841"* %t1, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.850"* %t2, %"class.thrust::detail::normal_iterator.850"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.900"*, %"struct.thrust::detail::cons.900"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.900", %"struct.thrust::detail::cons.900"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.900", %"struct.thrust::detail::cons.900"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_(%"struct.thrust::detail::cons.901"* %tail, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorIPNS_4pairIiiEEEENS_9null_typeEEC2IKS6_EERT_RKS7_SE_SE_SE_SE_SE_SE_SE_SE_(%"struct.thrust::detail::cons.901"* %this, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.901"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.901"* %this, %"struct.thrust::detail::cons.901"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.850"* %t1, %"class.thrust::detail::normal_iterator.850"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.901"*, %"struct.thrust::detail::cons.901"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.901", %"struct.thrust::detail::cons.901"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.850"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.850"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEENS4_IPiEENS0_4consISC_NSD_IS8_NS_9null_typeEEEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.899"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.899"*, align 8
  store %"struct.thrust::detail::cons.899"* %t, %"struct.thrust::detail::cons.899"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.899"*, %"struct.thrust::detail::cons.899"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.899", %"struct.thrust::detail::cons.899"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEENS4_IPiEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.900"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.850"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEENS4_IPiEENS0_4consIS8_NS_9null_typeEEEEET_RKNSD_IT0_T1_EE(%"struct.thrust::detail::cons.900"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.900"*, align 8
  store %"struct.thrust::detail::cons.900"* %t, %"struct.thrust::detail::cons.900"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.900"*, %"struct.thrust::detail::cons.900"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.900", %"struct.thrust::detail::cons.900"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.901"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.850"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorIPNS_4pairIiiEEEES8_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.901"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.901"*, align 8
  store %"struct.thrust::detail::cons.901"* %t, %"struct.thrust::detail::cons.901"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.901"*, %"struct.thrust::detail::cons.901"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.901", %"struct.thrust::detail::cons.901"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.850"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32* @_ZN6thrust6detail18contiguous_storageIiSaIiEE5beginEv(%"class.thrust::detail::contiguous_storage.837"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.841"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive2, align 8
  ret i32* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.841"* %i, %"class.thrust::detail::normal_iterator.841"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.841"* %i, %"class.thrust::detail::normal_iterator.841"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.841"* %i, %"class.thrust::detail::normal_iterator.841"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %1 to %"class.thrust::iterator_facade.843"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEpLEl(%"class.thrust::iterator_facade.843"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEpLEl(%"class.thrust::iterator_facade.843"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.843"* %this, %"class.thrust::iterator_facade.843"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv(%"class.thrust::iterator_facade.843"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPiEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilE7derivedEv(%"class.thrust::iterator_facade.843"* %this1)
  ret %"class.thrust::detail::normal_iterator.841"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPiEEEEvRT_NS6_15difference_typeE(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.841"* %f, %"class.thrust::detail::normal_iterator.841"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.841"* %0 to %"class.thrust::iterator_adaptor.842"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor.842"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E7advanceEl(%"class.thrust::iterator_adaptor.842"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %this1, i32 0, i32 0
  %1 = load i32*, i32** %m_iterator, align 8, !tbaa !478
  %add.ptr = getelementptr inbounds i32, i32* %1, i64 %0
  store i32* %add.ptr, i32** %m_iterator, align 8, !tbaa !478
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.846"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.850"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.850"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEEC2IiSaIiEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.836"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %ref.tmp = alloca %"class.thrust::device_malloc_allocator.856", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.836"* %v, %"class.thrust::detail::vector_base.836"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIiEC2Ev(%"class.thrust::device_malloc_allocator.856"* %ref.tmp)
  invoke void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEEC2ERKS3_(%"class.thrust::detail::contiguous_storage.855"* %m_storage, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZN6thrust23device_malloc_allocatorIiED2Ev(%"class.thrust::device_malloc_allocator.856"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !493
  %0 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %v.addr, align 8
  %call = invoke i32* @_ZNK6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %v.addr, align 8
  %call7 = invoke i32* @_ZNK6thrust6detail11vector_baseIiSaIiEE3endEv(%"class.thrust::detail::vector_base.836"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive8, i32 0, i32 0
  store i32* %call7, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive10, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive12, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE10range_initINS0_15normal_iteratorIPKiEEEEvT_SA_(%"class.thrust::detail::vector_base.854"* %this1, i32* %2, i32* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorIiED2Ev(%"class.thrust::device_malloc_allocator.856"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEED2Ev(%"class.thrust::detail::contiguous_storage.855"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIiEC2Ev(%"class.thrust::device_malloc_allocator.856"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  store %"class.thrust::device_malloc_allocator.856"* %this, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEEC2ERKS3_(%"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  %alloc.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.856"* %alloc, %"class.thrust::device_malloc_allocator.856"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %alloc.addr, align 8
  call void @_ZN6thrust23device_malloc_allocatorIiEC2ERKS1_(%"class.thrust::device_malloc_allocator.856"* %m_allocator, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust10device_ptrIiEC2IiEEPT_(%"class.thrust::device_ptr.861"* %agg.tmp, i32* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive2, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive3, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEC2ES3_(%"class.thrust::detail::normal_iterator.858"* %m_begin, i32* %1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !498
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorIiED2Ev(%"class.thrust::device_malloc_allocator.856"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIiED2Ev(%"class.thrust::device_malloc_allocator.856"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  store %"class.thrust::device_malloc_allocator.856"* %this, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE10range_initINS0_15normal_iteratorIPKiEEEEvT_SA_(%"class.thrust::detail::vector_base.854"* %this, i32* %first.coerce, i32* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive7, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive9, i32 0, i32 0
  %5 = load i32*, i32** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE10range_initINS0_15normal_iteratorIPKiEEEEvT_SA_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.854"* %this4, i32* %4, i32* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  %call = call i32* @_ZNK6thrust6detail18contiguous_storageIiSaIiEE5beginEv(%"class.thrust::detail::contiguous_storage.837"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive3, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive4, align 8
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust6detail11vector_baseIiSaIiEE3endEv(%"class.thrust::detail::vector_base.836"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %call = call i32* @_ZNK6thrust6detail11vector_baseIiSaIiEE5beginEv(%"class.thrust::detail::vector_base.836"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE4sizeEv(%"class.thrust::detail::vector_base.836"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive4, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEED2Ev(%"class.thrust::detail::contiguous_storage.855"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.855"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIiED2Ev(%"class.thrust::device_malloc_allocator.856"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorIiED2Ev(%"class.thrust::device_malloc_allocator.856"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIiEC2ERKS1_(%"class.thrust::device_malloc_allocator.856"* %this, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  store %"class.thrust::device_malloc_allocator.856"* %this, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.856"* %0, %"class.thrust::device_malloc_allocator.856"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIiEC2IiEEPT_(%"class.thrust::device_ptr.861"* %this, i32* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  %ptr.addr = alloca i32*, align 8
  store %"class.thrust::device_ptr.861"* %this, %"class.thrust::device_ptr.861"** %this.addr, align 8, !tbaa !1
  store i32* %ptr, i32** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.861"* %this1 to %"class.thrust::pointer.862"*
  %1 = load i32*, i32** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEEC2IiEEPT_(%"class.thrust::pointer.862"* %0, i32* %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEC2ES3_(%"class.thrust::detail::normal_iterator.858"* %this, i32* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.861", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive2, align 8
  store %"class.thrust::detail::normal_iterator.858"* %this, %"class.thrust::detail::normal_iterator.858"** %this.addr, align 8, !tbaa !1
  %this3 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.858"* %this3 to %"class.thrust::iterator_adaptor.859"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.859"* %0, %"class.thrust::device_ptr.861"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEEC2IiEEPT_(%"class.thrust::pointer.862"* %this, i32* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.862"*, align 8
  %other.addr = alloca i32*, align 8
  store %"class.thrust::pointer.862"* %this, %"class.thrust::pointer.862"** %this.addr, align 8, !tbaa !1
  store i32* %other, i32** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.862"*, %"class.thrust::pointer.862"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.862"* %this1 to %"class.thrust::iterator_adaptor.863"*
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEC2ERKS3_(%"class.thrust::iterator_adaptor.863"* %0, i32** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEC2ERKS3_(%"class.thrust::iterator_adaptor.863"* %this, i32** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.863"*, align 8
  %iter.addr = alloca i32**, align 8
  store %"class.thrust::iterator_adaptor.863"* %this, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8, !tbaa !1
  store i32** %iter, i32*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.863"*, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.863"* %this1 to %"class.thrust::iterator_facade.864"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %this1, i32 0, i32 0
  %1 = load i32**, i32*** %iter.addr, align 8
  %2 = load i32*, i32** %1, align 8, !tbaa !1
  store i32* %2, i32** %m_iterator, align 8, !tbaa !499
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.859"* %this, %"class.thrust::device_ptr.861"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.859"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  store %"class.thrust::iterator_adaptor.859"* %this, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.861"* %iter, %"class.thrust::device_ptr.861"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.859"*, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.859"* %this1 to %"class.thrust::iterator_facade.860"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.861"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.861"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE10range_initINS0_15normal_iteratorIPKiEEEEvT_SA_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.854"* %this, i32* %first.coerce, i32* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive6, i32 0, i32 0
  %6 = load i32*, i32** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive8, i32 0, i32 0
  %7 = load i32*, i32** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i32* %6, i32* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive12, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive14, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE17allocate_and_copyINS0_15normal_iteratorIPKiEEEEvmT_SA_RNS0_18contiguous_storageIiS3_EE(%"class.thrust::detail::vector_base.854"* %this4, i64 %8, i32* %13, i32* %14, %"class.thrust::detail::contiguous_storage.855"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !493
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i32* %first.coerce, i32* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive5, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive7, i32 0, i32 0
  %5 = load i32*, i32** %coerce.dive8, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i32* %4, i32* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE17allocate_and_copyINS0_15normal_iteratorIPKiEEEEvmT_SA_RNS0_18contiguous_storageIiS3_EE(%"class.thrust::detail::vector_base.854"* %this, i64 %requested_size, i32* %first.coerce, i32* %last.coerce, %"class.thrust::detail::contiguous_storage.855"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp54 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.855"* %new_storage, %"class.thrust::detail::contiguous_storage.855"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.855"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE8capacityEv(%"class.thrust::detail::vector_base.854"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE8max_sizeEv(%"class.thrust::detail::vector_base.854"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup78

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE8allocateEm(%"class.thrust::detail::contiguous_storage.855"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %new_storage.addr, align 8
  %call21 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::contiguous_storage.855"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive25, i32 0, i32 0
  store i32* %call21, i32** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive27, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive29, i32 0, i32 0
  %20 = load i32*, i32** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp18, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive34, i32 0, i32 0
  %21 = load i32*, i32** %coerce.dive35, align 8
  %call37 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE18uninitialized_copyINS0_15normal_iteratorIPKiEEEENS6_INS_10device_ptrIiEEEET_SD_SC_(%"class.thrust::detail::contiguous_storage.855"* %m_storage, i32* %19, i32* %20, i32* %21)
          to label %invoke.cont36 unwind label %lpad19

invoke.cont36:                                    ; preds = %invoke.cont20
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %coerce, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive41, i32 0, i32 0
  store i32* %call37, i32** %coerce.dive42, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.858"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %new_storage.addr, align 8
  %call45 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::contiguous_storage.855"* %27)
          to label %invoke.cont44 unwind label %lpad43

invoke.cont44:                                    ; preds = %catch
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %new_storage_end, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive49, i32 0, i32 0
  store i32* %call45, i32** %coerce.dive50, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont52 unwind label %lpad51

invoke.cont52:                                    ; preds = %invoke.cont44
  %m_storage53 = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %new_storage.addr, align 8
  %call56 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::contiguous_storage.855"* %29)
          to label %invoke.cont55 unwind label %lpad51

invoke.cont55:                                    ; preds = %invoke.cont52
  %coerce.dive57 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp54, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive60, i32 0, i32 0
  store i32* %call56, i32** %coerce.dive61, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp62 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.858"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive63 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp54, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive64, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive66, i32 0, i32 0
  %32 = load i32*, i32** %coerce.dive67, align 8
  %coerce.dive68 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp62, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive68, i32 0, i32 0
  %coerce.dive70 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive69, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive71, i32 0, i32 0
  %33 = load i32*, i32** %coerce.dive72, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE7destroyENS0_15normal_iteratorINS_10device_ptrIiEEEES8_(%"class.thrust::detail::contiguous_storage.855"* %m_storage53, i32* %32, i32* %33)
          to label %invoke.cont73 unwind label %lpad51

invoke.cont73:                                    ; preds = %invoke.cont55
  %34 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.855"* %34)
          to label %invoke.cont74 unwind label %lpad51

invoke.cont74:                                    ; preds = %invoke.cont73
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad51

lpad43:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup76

lpad51:                                           ; preds = %invoke.cont74, %invoke.cont73, %invoke.cont55, %invoke.cont52, %invoke.cont44
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.858"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup76

ehcleanup76:                                      ; preds = %lpad51, %lpad43
  invoke void @__cxa_end_catch()
          to label %invoke.cont77 unwind label %terminate.lpad

invoke.cont77:                                    ; preds = %ehcleanup76
  br label %ehcleanup78

try.cont:                                         ; preds = %invoke.cont36
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup78:                                      ; preds = %invoke.cont77, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup78
  %exn79 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn79, 0
  %lpad.val80 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val80

terminate.lpad:                                   ; preds = %ehcleanup76
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont74, %invoke.cont14
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(i32* %first.coerce, i32* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive6, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive8, i32 0, i32 0
  %5 = load i32*, i32** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i32* %4, i32* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKiEEEENS_15iterator_traitsIT_E15difference_typeESB_SB_NS_27random_access_traversal_tagE(i32* %first.coerce, i32* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to %"class.thrust::iterator_facade.909"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to %"class.thrust::iterator_facade.909"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_iS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.909"* dereferenceable(1) %1, %"class.thrust::iterator_facade.909"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_iS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.909"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.909"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.909"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.909"*, align 8
  store %"class.thrust::iterator_facade.909"* %lhs, %"class.thrust::iterator_facade.909"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.909"* %rhs, %"class.thrust::iterator_facade.909"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.909"*, %"class.thrust::iterator_facade.909"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.909"* %0 to %"class.thrust::detail::normal_iterator.907"*
  %2 = load %"class.thrust::iterator_facade.909"*, %"class.thrust::iterator_facade.909"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.909"* %2 to %"class.thrust::detail::normal_iterator.907"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKiEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKiEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.907"* %f1, %"class.thrust::detail::normal_iterator.907"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.907"* %f2, %"class.thrust::detail::normal_iterator.907"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKiEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKiEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  store %"class.thrust::detail::normal_iterator.907"* %f1, %"class.thrust::detail::normal_iterator.907"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.907"* %f2, %"class.thrust::detail::normal_iterator.907"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %1 to %"class.thrust::iterator_adaptor.908"*
  %3 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.907"* %3 to %"class.thrust::iterator_adaptor.908"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.908"* %2, %"class.thrust::iterator_adaptor.908"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.908"* %this, %"class.thrust::iterator_adaptor.908"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.908"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.908"*, align 8
  store %"class.thrust::iterator_adaptor.908"* %this, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.908"* %y, %"class.thrust::iterator_adaptor.908"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.908"*, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.908"*, %"class.thrust::iterator_adaptor.908"** %y.addr, align 8
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.908"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %this1, i32 0, i32 0
  %2 = load i32*, i32** %m_iterator, align 8, !tbaa !501
  %sub.ptr.lhs.cast = ptrtoint i32* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i32* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.908"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.908"*, align 8
  store %"class.thrust::iterator_adaptor.908"* %this, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.908"*, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %this1, i32 0, i32 0
  ret i32** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.855"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp7 = alloca %"class.thrust::device_ptr.861", align 8
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE4sizeEv(%"class.thrust::detail::contiguous_storage.855"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.858"* %m_begin to %"class.thrust::iterator_adaptor.859"*
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.859"* %0)
  %1 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.861"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE4sizeEv(%"class.thrust::detail::contiguous_storage.855"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive5, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE10deallocateERS3_NS_10device_ptrIiEEm(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %m_allocator, i32* %3, i64 %call3)
  %m_begin6 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrIiEC2IiEEPT_(%"class.thrust::device_ptr.861"* %agg.tmp7, i32* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive9, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEC2ES3_(%"class.thrust::detail::normal_iterator.858"* %ref.tmp, i32* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.858"* %m_begin6 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.858"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !498
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE8capacityEv(%"class.thrust::detail::vector_base.854"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE4sizeEv(%"class.thrust::detail::contiguous_storage.855"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE8max_sizeEv(%"class.thrust::detail::vector_base.854"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.855"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE8allocateEm(%"class.thrust::detail::contiguous_storage.855"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %ref.tmp8 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.861", align 8
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8allocateERS3_m(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive2, i32 0, i32 0
  store i32* %call, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive6, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEC2ES3_(%"class.thrust::detail::normal_iterator.858"* %ref.tmp, i32* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.858"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.858"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !498
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin7 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrIiEC2IiEEPT_(%"class.thrust::device_ptr.861"* %agg.tmp9, i32* null)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive11, i32 0, i32 0
  %6 = load i32*, i32** %coerce.dive12, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEC2ES3_(%"class.thrust::detail::normal_iterator.858"* %ref.tmp8, i32* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.858"* %m_begin7 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.858"* %ref.tmp8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size13 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size13, align 8, !tbaa !498
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE18uninitialized_copyINS0_15normal_iteratorIPKiEEEENS6_INS_10device_ptrIiEEEET_SD_SC_(%"class.thrust::detail::contiguous_storage.855"* %this, i32* %first.coerce, i32* %last.coerce, i32* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive7, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive8, align 8
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  %this9 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this9, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp11 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.858"* %result to %"class.thrust::iterator_adaptor.859"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.859"* %6)
  %7 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::device_ptr.861"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp10, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive13, i32 0, i32 0
  %9 = load i32*, i32** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive15, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive18, i32 0, i32 0
  %11 = load i32*, i32** %coerce.dive19, align 8
  %call20 = call i32* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIiEENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %m_allocator, i32* %9, i32* %10, i32* %11)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive22, i32 0, i32 0
  store i32* %call20, i32** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive25, i32 0, i32 0
  %12 = load i32*, i32** %coerce.dive26, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEC2ES3_(%"class.thrust::detail::normal_iterator.858"* %retval, i32* %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %13) #5
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive30, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive31, align 8
  ret i32* %14
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32* @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE5beginEv(%"class.thrust::detail::contiguous_storage.855"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.858"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.858"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.858"* %i, %"class.thrust::detail::normal_iterator.858"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE7destroyENS0_15normal_iteratorINS_10device_ptrIiEEEES8_(%"class.thrust::detail::contiguous_storage.855"* %this, i32* %first.coerce, i32* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive9, align 8
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  %this10 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this10, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.858"* %first to %"class.thrust::iterator_adaptor.859"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.859"* %0)
  %1 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.861"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.858"* %last to %"class.thrust::iterator_facade.860"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.858"* %first to %"class.thrust::iterator_facade.860"*
  %call11 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS5_iS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.860"* dereferenceable(1) %3, %"class.thrust::iterator_facade.860"* dereferenceable(1) %4)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive13, i32 0, i32 0
  %5 = load i32*, i32** %coerce.dive14, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIiEENS_10device_ptrIiEElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %m_allocator, i32* %5, i64 %call11)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE4sizeEv(%"class.thrust::detail::contiguous_storage.855"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !498
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE10deallocateERS3_NS_10device_ptrIiEEm(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a, i32* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.861", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.861"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive5, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE10deallocateERS3_NS_10device_ptrIiEEmEN19workaround_warnings10deallocateES5_S7_m(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %0, i32* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.859"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.859"*, align 8
  store %"class.thrust::iterator_adaptor.859"* %this, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.859"*, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.861"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE10deallocateERS3_NS_10device_ptrIiEEmEN19workaround_warnings10deallocateES5_S7_m(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a, i32* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.861", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.861"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive5, align 8
  call void @_ZN6thrust23device_malloc_allocatorIiE10deallocateENS_10device_ptrIiEEm(%"class.thrust::device_malloc_allocator.856"* %0, i32* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorIiE10deallocateENS_10device_ptrIiEEm(%"class.thrust::device_malloc_allocator.856"* %this, i32* %p.coerce, i64 %cnt) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.861", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %cnt.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.856"* %this, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8
  call void @_ZN6thrust10device_ptrIvEC2IiEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %agg.tmp, %"class.thrust::device_ptr.861"* dereferenceable(8) %p)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive5, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust11device_freeENS_10device_ptrIvEE(i8* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIvEC2IiEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.861"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.115"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  store %"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.115"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.861"* %other, %"class.thrust::device_ptr.861"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.115"*, %"class.thrust::device_ptr.115"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.115"* %this1 to %"class.thrust::pointer.116"*
  %1 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %other.addr, align 8
  call void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IiEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE(%"class.thrust::pointer.116"* %0, %"class.thrust::device_ptr.861"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_IiEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISC_S9_vE4typeE(%"class.thrust::pointer.116"* %this, %"class.thrust::device_ptr.861"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.116"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  store %"class.thrust::pointer.116"* %this, %"class.thrust::pointer.116"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.861"* %other, %"class.thrust::device_ptr.861"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.116"*, %"class.thrust::pointer.116"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.116"* %this1 to %"class.thrust::iterator_adaptor.117"*
  %2 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.861"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive2, i32 0, i32 0
  %5 = load i32*, i32** %coerce.dive3, align 8
  %call = call i32* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIiEEE3getES3_(i32* %5)
  %6 = bitcast i32* %call to i8*
  store i8* %6, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_(%"class.thrust::iterator_adaptor.117"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIiEEE3getES3_(i32* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %ptr.coerce, i32** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.861"* %ptr to %"class.thrust::pointer.862"*
  %call = call i32* @_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEE3getEv(%"class.thrust::pointer.862"* %0)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEE3getEv(%"class.thrust::pointer.862"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.862"*, align 8
  store %"class.thrust::pointer.862"* %this, %"class.thrust::pointer.862"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.862"*, %"class.thrust::pointer.862"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.862"* %this1 to %"class.thrust::iterator_adaptor.863"*
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE4baseEv(%"class.thrust::iterator_adaptor.863"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  ret i32* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE4baseEv(%"class.thrust::iterator_adaptor.863"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.863"*, align 8
  store %"class.thrust::iterator_adaptor.863"* %this, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.863"*, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %this1, i32 0, i32 0
  ret i32** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.855"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.855"*, align 8
  store %"class.thrust::detail::contiguous_storage.855"* %this, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.855"*, %"class.thrust::detail::contiguous_storage.855"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.855", %"class.thrust::detail::contiguous_storage.855"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8max_sizeERKS3_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8max_sizeERKS3_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIiEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorIiEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS6_E9size_typeEE4typeERKS6_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8allocateERS3_m(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %call, i32** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %2
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorIiEEE8allocateERS3_mEN19workaround_warnings8allocateES5_m(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.910", align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust10device_ptrIKiEC2IiEEPT_(%"class.thrust::device_ptr.910"* %agg.tmp, i32* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.910", %"class.thrust::device_ptr.910"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.911", %"class.thrust::pointer.911"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.912", %"class.thrust::iterator_adaptor.912"* %coerce.dive1, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive2, align 8
  %call = call i32* @_ZN6thrust23device_malloc_allocatorIiE8allocateEmNS_10device_ptrIKiEE(%"class.thrust::device_malloc_allocator.856"* %0, i64 %1, i32* %2)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  store i32* %call, i32** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive7, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive8, align 8
  ret i32* %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust23device_malloc_allocatorIiE8allocateEmNS_10device_ptrIKiEE(%"class.thrust::device_malloc_allocator.856"* %this, i64 %cnt, i32* %.coerce) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %0 = alloca %"class.thrust::device_ptr.910", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %cnt.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.910", %"class.thrust::device_ptr.910"* %0, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.911", %"class.thrust::pointer.911"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.912", %"class.thrust::iterator_adaptor.912"* %coerce.dive1, i32 0, i32 0
  store i32* %.coerce, i32** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.856"* %this, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8
  %1 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK6thrust23device_malloc_allocatorIiE8max_sizeEv(%"class.thrust::device_malloc_allocator.856"* %this3)
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %2 = bitcast i8* %exception to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %2) #5
  call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt9bad_alloc to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD1Ev to i8*)) #15
  unreachable

if.end:                                           ; preds = %entry
  %3 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call4 = call i32* @_ZN6thrust13device_mallocIiEENS_10device_ptrIT_EEm(i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive6, i32 0, i32 0
  store i32* %call4, i32** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive9, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive10, align 8
  ret i32* %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKiEC2IiEEPT_(%"class.thrust::device_ptr.910"* %this, i32* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.910"*, align 8
  %ptr.addr = alloca i32*, align 8
  store %"class.thrust::device_ptr.910"* %this, %"class.thrust::device_ptr.910"** %this.addr, align 8, !tbaa !1
  store i32* %ptr, i32** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.910"*, %"class.thrust::device_ptr.910"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.910"* %this1 to %"class.thrust::pointer.911"*
  %1 = load i32*, i32** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIKiNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IiEEPT_(%"class.thrust::pointer.911"* %0, i32* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust23device_malloc_allocatorIiE8max_sizeEv(%"class.thrust::device_malloc_allocator.856"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  store %"class.thrust::device_malloc_allocator.856"* %this, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %this.addr, align 8
  %call = call i64 @_ZNSt14numeric_limitsImE3maxEv() #5
  %div = udiv i64 %call, 4
  ret i64 %div
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust13device_mallocIiEENS_10device_ptrIT_EEm(i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %n.addr = alloca i64, align 8
  %s = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %coerce = alloca %"class.thrust::pointer.914", align 8
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call i32* @_ZN6thrust6mallocIiNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.914", %"class.thrust::pointer.914"* %coerce, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %coerce.dive, i32 0, i32 0
  store i32* %call, i32** %coerce.dive1, align 8
  %call2 = call i32* @_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.914"* %coerce)
  call void @_ZN6thrust10device_ptrIiEC2IiEEPT_(%"class.thrust::device_ptr.861"* %retval, i32* %call2)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.end(i64 1, i8* %3) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %4
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6mallocIiNS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultES8_EERKNS_6detail21execution_policy_baseIS7_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.914", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca i32*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.914", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i32** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call i32* @_ZN6thrust6system6detail7generic6mallocIiNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.914", %"class.thrust::pointer.914"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %coerce.dive, i32 0, i32 0
  store i32* %call2, i32** %coerce.dive3, align 8
  %call4 = call i32* @_ZN6thrust16raw_pointer_castINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.914"* dereferenceable(8) %ref.tmp)
  store i32* %call4, i32** %raw_ptr, align 8, !tbaa !1
  %4 = load i32*, i32** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IiEEPT_(%"class.thrust::pointer.914"* %retval, i32* %4)
  %5 = bitcast i32** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.914", %"class.thrust::pointer.914"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %coerce.dive5, i32 0, i32 0
  %6 = load i32*, i32** %coerce.dive6, align 8
  ret i32* %6
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.914"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.914"*, align 8
  store %"class.thrust::pointer.914"* %this, %"class.thrust::pointer.914"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.914"*, %"class.thrust::pointer.914"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.914"* %this1 to %"class.thrust::iterator_adaptor.915"*
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPiiS5_NS_27random_access_traversal_tagENS_9referenceIiS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.915"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  ret i32* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust16raw_pointer_castINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSA_(%"class.thrust::pointer.914"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.914"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.914", align 8
  store %"class.thrust::pointer.914"* %ptr, %"class.thrust::pointer.914"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.914"*, %"class.thrust::pointer.914"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.914"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.914"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.914", %"class.thrust::pointer.914"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %coerce.dive, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive1, align 8
  %call = call i32* @_ZN6thrust6detail14pointer_traitsINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i32* %3)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic6mallocIiNS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERNS_16execution_policyIS9_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.914", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 4, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to i32*
  call void @_ZN6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IiEEPT_(%"class.thrust::pointer.914"* %retval, i32* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.914", %"class.thrust::pointer.914"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %coerce.dive3, i32 0, i32 0
  %6 = load i32*, i32** %coerce.dive4, align 8
  ret i32* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_EC2IiEEPT_(%"class.thrust::pointer.914"* %this, i32* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.914"*, align 8
  %other.addr = alloca i32*, align 8
  store %"class.thrust::pointer.914"* %this, %"class.thrust::pointer.914"** %this.addr, align 8, !tbaa !1
  store i32* %other, i32** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.914"*, %"class.thrust::pointer.914"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.914"* %this1 to %"class.thrust::iterator_adaptor.915"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPiiS5_NS_27random_access_traversal_tagENS_9referenceIiS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.915"* %0, i32** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust6detail14pointer_traitsINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES7_EEE3getES8_(i32* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.914", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.914", %"class.thrust::pointer.914"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %coerce.dive, i32 0, i32 0
  store i32* %ptr.coerce, i32** %coerce.dive1, align 8
  %call = call i32* @_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.914"* %ptr)
  ret i32* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPiiS5_NS_27random_access_traversal_tagENS_9referenceIiS7_S6_EElEC2ERKS8_(%"class.thrust::iterator_adaptor.915"* %this, i32** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.915"*, align 8
  %iter.addr = alloca i32**, align 8
  store %"class.thrust::iterator_adaptor.915"* %this, %"class.thrust::iterator_adaptor.915"** %this.addr, align 8, !tbaa !1
  store i32** %iter, i32*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.915"*, %"class.thrust::iterator_adaptor.915"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.915"* %this1 to %"class.thrust::iterator_facade.916"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %this1, i32 0, i32 0
  %1 = load i32**, i32*** %iter.addr, align 8
  %2 = load i32*, i32** %1, align 8, !tbaa !1
  store i32* %2, i32** %m_iterator, align 8, !tbaa !503
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPiiS5_NS_27random_access_traversal_tagENS_9referenceIiS7_S6_EElE4baseEv(%"class.thrust::iterator_adaptor.915"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.915"*, align 8
  store %"class.thrust::iterator_adaptor.915"* %this, %"class.thrust::iterator_adaptor.915"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.915"*, %"class.thrust::iterator_adaptor.915"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.915", %"class.thrust::iterator_adaptor.915"* %this1, i32 0, i32 0
  ret i32** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKiNS_6system4cuda6detail3tagENS_16device_referenceIS1_EENS_10device_ptrIS1_EEEC2IiEEPT_(%"class.thrust::pointer.911"* %this, i32* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.911"*, align 8
  %other.addr = alloca i32*, align 8
  %ref.tmp = alloca i32*, align 8
  store %"class.thrust::pointer.911"* %this, %"class.thrust::pointer.911"** %this.addr, align 8, !tbaa !1
  store i32* %other, i32** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.911"*, %"class.thrust::pointer.911"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.911"* %this1 to %"class.thrust::iterator_adaptor.912"*
  %1 = load i32*, i32** %other.addr, align 8, !tbaa !1
  store i32* %1, i32** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKiEEPS2_iNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_(%"class.thrust::iterator_adaptor.912"* %0, i32** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKiEEPS2_iNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEC2ERKS4_(%"class.thrust::iterator_adaptor.912"* %this, i32** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.912"*, align 8
  %iter.addr = alloca i32**, align 8
  store %"class.thrust::iterator_adaptor.912"* %this, %"class.thrust::iterator_adaptor.912"** %this.addr, align 8, !tbaa !1
  store i32** %iter, i32*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.912"*, %"class.thrust::iterator_adaptor.912"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.912"* %this1 to %"class.thrust::iterator_facade.913"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.912", %"class.thrust::iterator_adaptor.912"* %this1, i32 0, i32 0
  %1 = load i32**, i32*** %iter.addr, align 8
  %2 = load i32*, i32** %1, align 8, !tbaa !1
  store i32* %2, i32** %m_iterator, align 8, !tbaa !505
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIiEENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_RNS_16execution_policyIT_EERT0_T1_SL_SE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a, i32* %first.coerce, i32* %last.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp8 to i8*
  %7 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive9, i32 0, i32 0
  %8 = load i32*, i32** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive11, i32 0, i32 0
  %9 = load i32*, i32** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive14, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive15, align 8
  %call = call i32* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIiEENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %1, i32* %8, i32* %9, i32* %10)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive17, i32 0, i32 0
  store i32* %call, i32** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive20, i32 0, i32 0
  %11 = load i32*, i32** %coerce.dive21, align 8
  ret i32* %11
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorIiEENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESI_E4typeERNS_16execution_policyIT_EERSG_T1_SS_SI_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a, i32* %first.coerce, i32* %last.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIiEEE3getERS3_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive9, i32 0, i32 0
  %9 = load i32*, i32** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive11, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive14, i32 0, i32 0
  %11 = load i32*, i32** %coerce.dive15, align 8
  %call = call i32* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i32* %9, i32* %10, i32* %11)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive17, i32 0, i32 0
  store i32* %call, i32** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive20, i32 0, i32 0
  %12 = load i32*, i32** %coerce.dive21, align 8
  ret i32* %12
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_RKNS_16execution_policyIT_EERKNSG_IT0_EET1_SP_SF_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2, i32* %first.coerce, i32* %last.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  %call8 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call8)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call9 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call10 = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %2, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 0
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 1
  store %"struct.thrust::execution_policy.120"* %10, %"struct.thrust::execution_policy.120"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.132"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp12 to i8*
  %17 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive13, i32 0, i32 0
  %18 = load i32*, i32** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive15, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive18, i32 0, i32 0
  %20 = load i32*, i32** %coerce.dive19, align 8
  %call20 = call i32* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %11, i32* %18, i32* %19, i32* %20)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive22, i32 0, i32 0
  store i32* %call20, i32** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive25, i32 0, i32 0
  %21 = load i32*, i32** %coerce.dive26, align 8
  ret i32* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorIiEEE3getERS3_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIiEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET1_RKNSA_21execution_policy_baseIT_EET0_SN_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, i32* %first.coerce, i32* %last.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call7 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp8 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp9 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp10 to i8*
  %8 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive11, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp9, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive13, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp10, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive16, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive17, align 8
  %call18 = call i32* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, i32* %14, i32* %15, i32* %16)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive20, i32 0, i32 0
  store i32* %call18, i32** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive23, i32 0, i32 0
  %17 = load i32*, i32** %coerce.dive24, align 8
  ret i32* %17
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %first.coerce, i32* %last.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.861", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.907"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive10, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp8, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive12, i32 0, i32 0
  %17 = load i32*, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive15, i32 0, i32 0
  %18 = load i32*, i32** %coerce.dive16, align 8
  %call = call i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i32* %16, i32* %17, i32* %18)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive18, i32 0, i32 0
  store i32* %call, i32** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive21, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive22, align 8
  ret i32* %19
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %begin.coerce, i32* %end.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.861", align 8
  %agg.tmp10 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %begin.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %end.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.907"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.907"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp7, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive12, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive14, i32 0, i32 0
  %17 = load i32*, i32** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive17, i32 0, i32 0
  %18 = load i32*, i32** %coerce.dive18, align 8
  %call = call i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i32* %16, i32* %17, i32* %18)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive20, i32 0, i32 0
  store i32* %call, i32** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive23, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive24, align 8
  ret i32* %19
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %begin.coerce, i32* %end.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.861", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp12 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp13 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %begin.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %end.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.907"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp9 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.907"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive14, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive16, i32 0, i32 0
  %17 = load i32*, i32** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive19, i32 0, i32 0
  %18 = load i32*, i32** %coerce.dive20, align 8
  %call = call i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, i32* %16, i32* %17, i32* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive22, i32 0, i32 0
  store i32* %call, i32** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive25, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive26, align 8
  ret i32* %19
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEENS_10device_ptrIiEEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, i32* %begin.coerce, i32* %end.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.861", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %begin.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive2, i32 0, i32 0
  store i32* %end.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive6, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.907"* %end to %"class.thrust::iterator_facade.909"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.907"* %begin to %"class.thrust::iterator_facade.909"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_iS9_SA_SB_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSD_IT5_T6_T7_T8_T9_T10_EEE4typeERKSK_RKSR_(%"class.thrust::iterator_facade.909"* dereferenceable(1) %7, %"class.thrust::iterator_facade.909"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.907"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.907"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp9 to i8*
  %13 = bitcast %"class.thrust::device_ptr.861"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive10, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive13, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive14, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEElNS_10device_ptrIiEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i32* %14, i64 %11, i32* %15)
  %16 = bitcast %"class.thrust::device_ptr.861"* %result to %"class.thrust::iterator_facade.864"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call15 = call i32* @_ZN6thrustplINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE(%"class.thrust::iterator_facade.864"* dereferenceable(1) %16, i64 %17)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive17, i32 0, i32 0
  store i32* %call15, i32** %coerce.dive18, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive20, i32 0, i32 0
  %19 = load i32*, i32** %coerce.dive21, align 8
  ret i32* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKiEElNS_10device_ptrIiEEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, i32* %first.coerce, i64 %n, i32* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %result = alloca %"class.thrust::device_ptr.861", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %coerce = alloca %"class.thrust::device_reference.917", align 8
  %src = alloca i8*, align 8
  %ref.tmp15 = alloca i32*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %result, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive4, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::device_ptr.861"* %result to %"class.thrust::iterator_facade.864"*
  %call = call i32* @_ZNK6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEdeEv(%"class.thrust::iterator_facade.864"* %1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.917", %"class.thrust::device_reference.917"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  store i32* %call, i32** %coerce.dive9, align 8
  %2 = bitcast %"class.thrust::device_reference.917"* %coerce to %"class.thrust::reference.918"*
  %call10 = call i32* @_ZNK6thrust9referenceIiNS_10device_ptrIiEENS_16device_referenceIiEEEadEv(%"class.thrust::reference.918"* %2)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive12, i32 0, i32 0
  store i32* %call10, i32** %coerce.dive13, align 8
  %call14 = call i32* @_ZN6thrust16raw_pointer_castINS_10device_ptrIiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr.861"* dereferenceable(8) %ref.tmp)
  %3 = bitcast i32* %call14 to i8*
  store i8* %3, i8** %dst, align 8, !tbaa !1
  %4 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  %5 = bitcast %"class.thrust::detail::normal_iterator.907"* %first to %"class.thrust::iterator_facade.909"*
  %call16 = call dereferenceable(4) i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.909"* %5)
  store i32* %call16, i32** %ref.tmp15, align 8, !tbaa !1
  %call17 = call i32* @_ZN6thrust16raw_pointer_castIPKiEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i32** dereferenceable(8) %ref.tmp15)
  %6 = bitcast i32* %call17 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call18 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call18 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %11, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %10, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %13)
  store i32 %call21, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system122 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %15, i32 0, i32 0
  %ref23 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system122, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.88"* %ref23 to %"struct.thrust::detail::execution_policy_base.85"*
  %call24 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call24 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system225 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %18, i32 0, i32 1
  %ref26 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system225, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.120"* %ref26 to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call28 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %17, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call28, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 4
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrustplINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEET_RKNS_15iterator_facadeISA_T0_T1_T2_T3_T4_EENSA_15difference_typeE(%"class.thrust::iterator_facade.864"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.864"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::device_ptr.861", align 8
  store %"class.thrust::iterator_facade.864"* %i, %"class.thrust::iterator_facade.864"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::device_ptr.861"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.864"*, %"class.thrust::iterator_facade.864"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.864"* %1 to %"class.thrust::device_ptr.861"*
  %3 = bitcast %"class.thrust::device_ptr.861"* %tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.861"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::device_ptr.861"* %tmp to %"class.thrust::iterator_facade.864"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl(%"class.thrust::iterator_facade.864"* %5, i64 %6)
  %7 = bitcast %"class.thrust::device_ptr.861"* %retval to i8*
  %8 = bitcast %"class.thrust::device_ptr.861"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.861"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive2, align 8
  ret i32* %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust16raw_pointer_castINS_10device_ptrIiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(%"class.thrust::device_ptr.861"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  store %"class.thrust::device_ptr.861"* %ptr, %"class.thrust::device_ptr.861"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.861"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  %3 = load i32*, i32** %coerce.dive2, align 8
  %call = call i32* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIiEEE3getES3_(i32* %3)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEdeEv(%"class.thrust::iterator_facade.864"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.917", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.864"*, align 8
  store %"class.thrust::iterator_facade.864"* %this, %"class.thrust::iterator_facade.864"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.864"*, %"class.thrust::iterator_facade.864"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.864"* %this1)
  %call2 = call i32* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIiEEEENT_9referenceERKS4_(%"class.thrust::device_ptr.861"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.917", %"class.thrust::device_reference.917"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  store i32* %call2, i32** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.917", %"class.thrust::device_reference.917"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive10, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive11, align 8
  ret i32* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32* @_ZNK6thrust9referenceIiNS_10device_ptrIiEENS_16device_referenceIiEEEadEv(%"class.thrust::reference.918"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.861", align 8
  %this.addr = alloca %"class.thrust::reference.918"*, align 8
  store %"class.thrust::reference.918"* %this, %"class.thrust::reference.918"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.918"*, %"class.thrust::reference.918"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.861"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.861"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive2, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive3, align 8
  ret i32* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrust16raw_pointer_castIPKiEENS_6detail14pointer_traitsIT_E11raw_pointerERKS5_(i32** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca i32**, align 8
  store i32** %ptr, i32*** %ptr.addr, align 8, !tbaa !7
  %0 = load i32**, i32*** %ptr.addr, align 8
  %1 = load i32*, i32** %0, align 8, !tbaa !1
  %call = call i32* @_ZN6thrust6detail14pointer_traitsIPKiE3getES3_(i32* %1)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.909"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.909"*, align 8
  store %"class.thrust::iterator_facade.909"* %this, %"class.thrust::iterator_facade.909"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.909"*, %"class.thrust::iterator_facade.909"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.907"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.909"* %this1)
  %call2 = call dereferenceable(4) i32* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKiEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %call)
  ret i32* %call2
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIiEEEENT_9referenceERKS4_(%"class.thrust::device_ptr.861"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.917", align 8
  %f.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  store %"class.thrust::device_ptr.861"* %f, %"class.thrust::device_ptr.861"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.861"* %0 to %"class.thrust::pointer.862"*
  %call = call i32* @_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEE11dereferenceEv(%"class.thrust::pointer.862"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.917", %"class.thrust::device_reference.917"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %call, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.917", %"class.thrust::device_reference.917"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  %2 = load i32*, i32** %coerce.dive9, align 8
  ret i32* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.864"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.864"*, align 8
  store %"class.thrust::iterator_facade.864"* %this, %"class.thrust::iterator_facade.864"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.864"*, %"class.thrust::iterator_facade.864"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.864"* %this1 to %"class.thrust::device_ptr.861"*
  ret %"class.thrust::device_ptr.861"* %0
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust7pointerIiNS_6system4cuda6detail3tagENS_16device_referenceIiEENS_10device_ptrIiEEE11dereferenceEv(%"class.thrust::pointer.862"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.917", align 8
  %this.addr = alloca %"class.thrust::pointer.862"*, align 8
  store %"class.thrust::pointer.862"* %this, %"class.thrust::pointer.862"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.862"*, %"class.thrust::pointer.862"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.862"* %this1 to %"class.thrust::device_ptr.861"*
  call void @_ZN6thrust16device_referenceIiEC2ERKNS_10device_ptrIiEE(%"class.thrust::device_reference.917"* %retval, %"class.thrust::device_ptr.861"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.917", %"class.thrust::device_reference.917"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %1 = load i32*, i32** %coerce.dive5, align 8
  ret i32* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceIiEC2ERKNS_10device_ptrIiEE(%"class.thrust::device_reference.917"* %this, %"class.thrust::device_ptr.861"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.917"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  store %"class.thrust::device_reference.917"* %this, %"class.thrust::device_reference.917"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.861"* %ptr, %"class.thrust::device_ptr.861"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.917"*, %"class.thrust::device_reference.917"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.917"* %this1 to %"class.thrust::reference.918"*
  %1 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceIiNS_10device_ptrIiEENS_16device_referenceIiEEEC2ERKS2_(%"class.thrust::reference.918"* %0, %"class.thrust::device_ptr.861"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceIiNS_10device_ptrIiEENS_16device_referenceIiEEEC2ERKS2_(%"class.thrust::reference.918"* %this, %"class.thrust::device_ptr.861"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.918"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  store %"class.thrust::reference.918"* %this, %"class.thrust::reference.918"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.861"* %ptr, %"class.thrust::device_ptr.861"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.918"*, %"class.thrust::reference.918"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.918", %"class.thrust::reference.918"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.861"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.861"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i32* @_ZN6thrust6detail14pointer_traitsIPKiE3getES3_(i32* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca i32*, align 8
  store i32* %ptr, i32** %ptr.addr, align 8, !tbaa !1
  %0 = load i32*, i32** %ptr.addr, align 8, !tbaa !1
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(4) i32* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKiEEEENT_9referenceERKS7_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  store %"class.thrust::detail::normal_iterator.907"* %f, %"class.thrust::detail::normal_iterator.907"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.907"* %0 to %"class.thrust::iterator_adaptor.908"*
  %call = call dereferenceable(4) i32* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.908"* %1)
  ret i32* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.907"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.909"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.909"*, align 8
  store %"class.thrust::iterator_facade.909"* %this, %"class.thrust::iterator_facade.909"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.909"*, %"class.thrust::iterator_facade.909"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.909"* %this1 to %"class.thrust::detail::normal_iterator.907"*
  ret %"class.thrust::detail::normal_iterator.907"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(4) i32* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E11dereferenceEv(%"class.thrust::iterator_adaptor.908"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.908"*, align 8
  store %"class.thrust::iterator_adaptor.908"* %this, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.908"*, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %this1, i32 0, i32 0
  %0 = load i32*, i32** %m_iterator, align 8, !tbaa !501
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl(%"class.thrust::iterator_facade.864"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.864"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.864"* %this, %"class.thrust::iterator_facade.864"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.864"*, %"class.thrust::iterator_facade.864"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.864"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIiEEEEvRT_NS4_15difference_typeE(%"class.thrust::device_ptr.861"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.864"* %this1)
  ret %"class.thrust::device_ptr.861"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIiEEEEvRT_NS4_15difference_typeE(%"class.thrust::device_ptr.861"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.861"* %f, %"class.thrust::device_ptr.861"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.861"* %0 to %"class.thrust::iterator_adaptor.863"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7advanceEl(%"class.thrust::iterator_adaptor.863"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.864"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.864"*, align 8
  store %"class.thrust::iterator_facade.864"* %this, %"class.thrust::iterator_facade.864"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.864"*, %"class.thrust::iterator_facade.864"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.864"* %this1 to %"class.thrust::device_ptr.861"*
  ret %"class.thrust::device_ptr.861"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7advanceEl(%"class.thrust::iterator_adaptor.863"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.863"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.863"* %this, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.863"*, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %this1, i32 0, i32 0
  %1 = load i32*, i32** %m_iterator, align 8, !tbaa !499
  %add.ptr = getelementptr inbounds i32, i32* %1, i64 %0
  store i32* %add.ptr, i32** %m_iterator, align 8, !tbaa !499
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorIiEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS6_E4typeEE4typeERS6_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.858"* %i, %"class.thrust::detail::normal_iterator.858"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.858"* %i, %"class.thrust::detail::normal_iterator.858"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %1 to %"class.thrust::iterator_facade.860"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl(%"class.thrust::iterator_facade.860"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl(%"class.thrust::iterator_facade.860"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.860"* %this, %"class.thrust::iterator_facade.860"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.860"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.860"* %this1)
  ret %"class.thrust::detail::normal_iterator.858"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.858"* %f, %"class.thrust::detail::normal_iterator.858"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.858"* %0 to %"class.thrust::iterator_adaptor.859"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.859"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.860"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  store %"class.thrust::iterator_facade.860"* %this, %"class.thrust::iterator_facade.860"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.860"* %this1 to %"class.thrust::detail::normal_iterator.858"*
  ret %"class.thrust::detail::normal_iterator.858"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.859"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.859"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.859"* %this, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.859"*, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.861"* %m_iterator to %"class.thrust::iterator_facade.864"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZN6thrust15iterator_facadeINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl(%"class.thrust::iterator_facade.864"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorIiEENS_10device_ptrIiEElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %a, i32* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.861", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.861", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %p.coerce, i32** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.856"* %a, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.856"*, %"class.thrust::device_malloc_allocator.856"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.861"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.861"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive4, i32 0, i32 0
  %4 = load i32*, i32** %coerce.dive5, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIiEENS_10device_ptrIiEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1) %0, i32* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS5_iS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.860"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.860"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  store %"class.thrust::iterator_facade.860"* %lhs, %"class.thrust::iterator_facade.860"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.860"* %rhs, %"class.thrust::iterator_facade.860"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.860"* %0 to %"class.thrust::detail::normal_iterator.858"*
  %2 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.860"* %2 to %"class.thrust::detail::normal_iterator.858"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorIiEENS_10device_ptrIiEElEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS8_S9_T1_(%"class.thrust::device_malloc_allocator.856"* dereferenceable(1), i32* %.coerce, i64) #1 comdat {
entry:
  %2 = alloca %"class.thrust::device_ptr.861", align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator.856"*, align 8
  %.addr3 = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %2, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive1, i32 0, i32 0
  store i32* %.coerce, i32** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.856"* %0, %"class.thrust::device_malloc_allocator.856"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr3, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_EENS2_20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.858"* %f1, %"class.thrust::detail::normal_iterator.858"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.858"* %f2, %"class.thrust::detail::normal_iterator.858"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_EENT_15difference_typeERKS7_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  store %"class.thrust::detail::normal_iterator.858"* %f1, %"class.thrust::detail::normal_iterator.858"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.858"* %f2, %"class.thrust::detail::normal_iterator.858"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %1 to %"class.thrust::iterator_adaptor.859"*
  %3 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.858"* %3 to %"class.thrust::iterator_adaptor.859"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.859"* %2, %"class.thrust::iterator_adaptor.859"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E11distance_toIS5_S4_S6_S6_S6_S6_S6_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.859"* %this, %"class.thrust::iterator_adaptor.859"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.859"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.859"*, align 8
  store %"class.thrust::iterator_adaptor.859"* %this, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.859"* %y, %"class.thrust::iterator_adaptor.859"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.859"*, %"class.thrust::iterator_adaptor.859"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.859"*, %"class.thrust::iterator_adaptor.859"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.861"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIiEEEES4_NS_11use_defaultES6_S6_S6_S6_E4baseEv(%"class.thrust::iterator_adaptor.859"* %0)
  %1 = bitcast %"class.thrust::device_ptr.861"* %call to %"class.thrust::iterator_facade.864"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.861"* %m_iterator to %"class.thrust::iterator_facade.864"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS2_iS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.864"* dereferenceable(1) %1, %"class.thrust::iterator_facade.864"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrIiEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS2_iS6_S7_S9_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.864"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.864"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.864"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.864"*, align 8
  store %"class.thrust::iterator_facade.864"* %lhs, %"class.thrust::iterator_facade.864"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.864"* %rhs, %"class.thrust::iterator_facade.864"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.864"*, %"class.thrust::iterator_facade.864"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.864"* %0 to %"class.thrust::device_ptr.861"*
  %2 = load %"class.thrust::iterator_facade.864"*, %"class.thrust::iterator_facade.864"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.864"* %2 to %"class.thrust::device_ptr.861"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIiEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_(%"class.thrust::device_ptr.861"* dereferenceable(8) %1, %"class.thrust::device_ptr.861"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIiEES3_EENS_6detail20distance_from_resultIT_T0_E4typeERKS6_RKS7_(%"class.thrust::device_ptr.861"* dereferenceable(8) %f1, %"class.thrust::device_ptr.861"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.861"* %f1, %"class.thrust::device_ptr.861"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.861"* %f2, %"class.thrust::device_ptr.861"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIiEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.861"* dereferenceable(8) %0, %"class.thrust::device_ptr.861"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIiEES3_EENT_15difference_typeERKS4_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.861"* dereferenceable(8) %f1, %"class.thrust::device_ptr.861"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.861"*, align 8
  store %"class.thrust::device_ptr.861"* %f1, %"class.thrust::device_ptr.861"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.861"* %f2, %"class.thrust::device_ptr.861"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.861"* %1 to %"class.thrust::iterator_adaptor.863"*
  %3 = load %"class.thrust::device_ptr.861"*, %"class.thrust::device_ptr.861"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.861"* %3 to %"class.thrust::iterator_adaptor.863"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE11distance_toIS2_S3_iS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.863"* %2, %"class.thrust::iterator_adaptor.863"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE11distance_toIS2_S3_iS7_S8_SA_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.863"* %this, %"class.thrust::iterator_adaptor.863"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.863"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.863"*, align 8
  store %"class.thrust::iterator_adaptor.863"* %this, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.863"* %y, %"class.thrust::iterator_adaptor.863"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.863"*, %"class.thrust::iterator_adaptor.863"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.863"*, %"class.thrust::iterator_adaptor.863"** %y.addr, align 8
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE4baseEv(%"class.thrust::iterator_adaptor.863"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %this1, i32 0, i32 0
  %2 = load i32*, i32** %m_iterator, align 8, !tbaa !499
  %sub.ptr.lhs.cast = ptrtoint i32* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i32* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust6detail18contiguous_storageIiSaIiEE5beginEv(%"class.thrust::detail::contiguous_storage.837"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.907", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPKiEC2IPiEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.907"* %retval, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.907", %"class.thrust::detail::normal_iterator.907"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %coerce.dive, i32 0, i32 0
  %0 = load i32*, i32** %coerce.dive2, align 8
  ret i32* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPKiEC2IPiEERKNS1_IT_EEPNS0_21enable_if_convertibleIS7_S3_vE4typeE(%"class.thrust::detail::normal_iterator.907"* %this, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i32*, align 8
  store %"class.thrust::detail::normal_iterator.907"* %this, %"class.thrust::detail::normal_iterator.907"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.841"* %other, %"class.thrust::detail::normal_iterator.841"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.907"* %this1 to %"class.thrust::iterator_adaptor.908"*
  %2 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %2 to %"class.thrust::iterator_adaptor.842"*
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %3)
  %4 = load i32*, i32** %call, align 8, !tbaa !1
  store i32* %4, i32** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.908"* %1, i32** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_EC2ERKS4_(%"class.thrust::iterator_adaptor.908"* %this, i32** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.908"*, align 8
  %iter.addr = alloca i32**, align 8
  store %"class.thrust::iterator_adaptor.908"* %this, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8, !tbaa !1
  store i32** %iter, i32*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.908"*, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.908"* %this1 to %"class.thrust::iterator_facade.909"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %this1, i32 0, i32 0
  %1 = load i32**, i32*** %iter.addr, align 8
  %2 = load i32*, i32** %1, align 8, !tbaa !1
  store i32* %2, i32** %m_iterator, align 8, !tbaa !501
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.907"* %i, %"class.thrust::detail::normal_iterator.907"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.907"* %i, %"class.thrust::detail::normal_iterator.907"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKiEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.907"* %i, %"class.thrust::detail::normal_iterator.907"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.907"* %1 to %"class.thrust::iterator_facade.909"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.907"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.909"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.907"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEpLEl(%"class.thrust::iterator_facade.909"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.909"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.909"* %this, %"class.thrust::iterator_facade.909"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.909"*, %"class.thrust::iterator_facade.909"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.907"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.909"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKiEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.907"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.909"* %this1)
  ret %"class.thrust::detail::normal_iterator.907"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKiEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.907"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.907"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.907"* %f, %"class.thrust::detail::normal_iterator.907"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.907"*, %"class.thrust::detail::normal_iterator.907"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.907"* %0 to %"class.thrust::iterator_adaptor.908"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.908"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.907"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lE7derivedEv(%"class.thrust::iterator_facade.909"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.909"*, align 8
  store %"class.thrust::iterator_facade.909"* %this, %"class.thrust::iterator_facade.909"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.909"*, %"class.thrust::iterator_facade.909"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.909"* %this1 to %"class.thrust::detail::normal_iterator.907"*
  ret %"class.thrust::detail::normal_iterator.907"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_E7advanceEl(%"class.thrust::iterator_adaptor.908"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.908"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.908"* %this, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.908"*, %"class.thrust::iterator_adaptor.908"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.908", %"class.thrust::iterator_adaptor.908"* %this1, i32 0, i32 0
  %1 = load i32*, i32** %m_iterator, align 8, !tbaa !501
  %add.ptr = getelementptr inbounds i32, i32* %1, i64 %0
  store i32* %add.ptr, i32** %m_iterator, align 8, !tbaa !501
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEC2IS3_SaIS3_EEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.845"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  %ref.tmp = alloca %"class.thrust::device_malloc_allocator.868", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.845"* %v, %"class.thrust::detail::vector_base.845"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEEC2Ev(%"class.thrust::device_malloc_allocator.868"* %ref.tmp)
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_(%"class.thrust::detail::contiguous_storage.867"* %m_storage, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEED2Ev(%"class.thrust::device_malloc_allocator.868"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !507
  %0 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %v.addr, align 8
  %call = invoke %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %v.addr, align 8
  %call7 = invoke %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.845"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call7, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive10, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive12, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_(%"class.thrust::detail::vector_base.866"* %this1, %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEED2Ev(%"class.thrust::device_malloc_allocator.868"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.867"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEEC2Ev(%"class.thrust::device_malloc_allocator.868"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  store %"class.thrust::device_malloc_allocator.868"* %this, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEC2ERKS5_(%"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  %alloc.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.868"* %alloc, %"class.thrust::device_malloc_allocator.868"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %alloc.addr, align 8
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEEC2ERKS3_(%"class.thrust::device_malloc_allocator.868"* %m_allocator, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust10device_ptrINS_4pairIiiEEEC2IS2_EEPT_(%"class.thrust::device_ptr.873"* %agg.tmp, %"struct.thrust::pair.82"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.870"* %m_begin, %"struct.thrust::pair.82"* %1)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !512
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEED2Ev(%"class.thrust::device_malloc_allocator.868"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEED2Ev(%"class.thrust::device_malloc_allocator.868"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  store %"class.thrust::device_malloc_allocator.868"* %this, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_(%"class.thrust::detail::vector_base.866"* %this, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive9, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.866"* %this4, %"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.845", %"class.thrust::detail::vector_base.845"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.846"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive3, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.845"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.845"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEED2Ev(%"class.thrust::detail::contiguous_storage.867"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.867"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEED2Ev(%"class.thrust::device_malloc_allocator.868"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 0
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEED2Ev(%"class.thrust::device_malloc_allocator.868"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEEC2ERKS3_(%"class.thrust::device_malloc_allocator.868"* %this, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  store %"class.thrust::device_malloc_allocator.868"* %this, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_malloc_allocator.868"* %0, %"class.thrust::device_malloc_allocator.868"** %.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrINS_4pairIiiEEEC2IS2_EEPT_(%"class.thrust::device_ptr.873"* %this, %"struct.thrust::pair.82"* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %ptr.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::device_ptr.873"* %this, %"class.thrust::device_ptr.873"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %ptr, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.873"* %this1 to %"class.thrust::pointer.874"*
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_(%"class.thrust::pointer.874"* %0, %"struct.thrust::pair.82"* %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.870"* %this, %"struct.thrust::pair.82"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.873", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"class.thrust::detail::normal_iterator.870"* %this, %"class.thrust::detail::normal_iterator.870"** %this.addr, align 8, !tbaa !1
  %this3 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.870"* %this3 to %"class.thrust::iterator_adaptor.871"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.871"* %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEEC2IS2_EEPT_(%"class.thrust::pointer.874"* %this, %"struct.thrust::pair.82"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.874"*, align 8
  %other.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::pointer.874"* %this, %"class.thrust::pointer.874"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %other, %"struct.thrust::pair.82"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.874"*, %"class.thrust::pointer.874"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.874"* %this1 to %"class.thrust::iterator_adaptor.875"*
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_(%"class.thrust::iterator_adaptor.875"* %0, %"struct.thrust::pair.82"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEC2ERKS5_(%"class.thrust::iterator_adaptor.875"* %this, %"struct.thrust::pair.82"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.875"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"class.thrust::iterator_adaptor.875"* %this, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"** %iter, %"struct.thrust::pair.82"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.875"*, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.875"* %this1 to %"class.thrust::iterator_facade.876"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !513
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.871"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.871"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  store %"class.thrust::iterator_adaptor.871"* %this, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %iter, %"class.thrust::device_ptr.873"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.871"*, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.871"* %this1 to %"class.thrust::iterator_facade.872"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.873"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.873"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10range_initINS0_15normal_iteratorIPKS3_EEEEvT_SC_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.866"* %this, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive8, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair.82"* %6, %"struct.thrust::pair.82"* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive12, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive14, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE(%"class.thrust::detail::vector_base.866"* %this4, i64 %8, %"struct.thrust::pair.82"* %13, %"struct.thrust::pair.82"* %14, %"class.thrust::detail::contiguous_storage.867"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !507
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive5, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive7, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_(%"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE17allocate_and_copyINS0_15normal_iteratorIPKS3_EEEEvmT_SC_RNS0_18contiguous_storageIS3_S5_EE(%"class.thrust::detail::vector_base.866"* %this, i64 %requested_size, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"class.thrust::detail::contiguous_storage.867"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp54 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp62 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.867"* %new_storage, %"class.thrust::detail::contiguous_storage.867"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.867"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8capacityEv(%"class.thrust::detail::vector_base.866"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::vector_base.866"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup78

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8allocateEm(%"class.thrust::detail::contiguous_storage.867"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %new_storage.addr, align 8
  %call21 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.867"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call21, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive27, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp17, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive29, i32 0, i32 0
  %20 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp18, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive32, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive34, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive35, align 8
  %call37 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_(%"class.thrust::detail::contiguous_storage.867"* %m_storage, %"struct.thrust::pair.82"* %19, %"struct.thrust::pair.82"* %20, %"struct.thrust::pair.82"* %21)
          to label %invoke.cont36 unwind label %lpad19

invoke.cont36:                                    ; preds = %invoke.cont20
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %coerce, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive41, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call37, %"struct.thrust::pair.82"** %coerce.dive42, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.870"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %new_storage.addr, align 8
  %call45 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.867"* %27)
          to label %invoke.cont44 unwind label %lpad43

invoke.cont44:                                    ; preds = %catch
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %new_storage_end, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive49, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call45, %"struct.thrust::pair.82"** %coerce.dive50, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont52 unwind label %lpad51

invoke.cont52:                                    ; preds = %invoke.cont44
  %m_storage53 = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %new_storage.addr, align 8
  %call56 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.867"* %29)
          to label %invoke.cont55 unwind label %lpad51

invoke.cont55:                                    ; preds = %invoke.cont52
  %coerce.dive57 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp54, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive57, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive60, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call56, %"struct.thrust::pair.82"** %coerce.dive61, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp62 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.870"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive63 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp54, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive64, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive66, i32 0, i32 0
  %32 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive67, align 8
  %coerce.dive68 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp62, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive68, i32 0, i32 0
  %coerce.dive70 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive69, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive71, i32 0, i32 0
  %33 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive72, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.867"* %m_storage53, %"struct.thrust::pair.82"* %32, %"struct.thrust::pair.82"* %33)
          to label %invoke.cont73 unwind label %lpad51

invoke.cont73:                                    ; preds = %invoke.cont55
  %34 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.867"* %34)
          to label %invoke.cont74 unwind label %lpad51

invoke.cont74:                                    ; preds = %invoke.cont73
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad51

lpad43:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup76

lpad51:                                           ; preds = %invoke.cont74, %invoke.cont73, %invoke.cont55, %invoke.cont52, %invoke.cont44
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.870"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup76

ehcleanup76:                                      ; preds = %lpad51, %lpad43
  invoke void @__cxa_end_catch()
          to label %invoke.cont77 unwind label %terminate.lpad

invoke.cont77:                                    ; preds = %ehcleanup76
  br label %ehcleanup78

try.cont:                                         ; preds = %invoke.cont36
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup78:                                      ; preds = %invoke.cont77, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup78
  %exn79 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn79, 0
  %lpad.val80 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val80

terminate.lpad:                                   ; preds = %ehcleanup76
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont74, %invoke.cont14
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeESC_SC_(%"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp4 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive8, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE(%"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_NS_27random_access_traversal_tagE(%"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to %"class.thrust::iterator_facade.921"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to %"class.thrust::iterator_facade.921"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.921"* dereferenceable(1) %1, %"class.thrust::iterator_facade.921"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.921"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.921"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  store %"class.thrust::iterator_facade.921"* %lhs, %"class.thrust::iterator_facade.921"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.921"* %rhs, %"class.thrust::iterator_facade.921"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.921"* %0 to %"class.thrust::detail::normal_iterator.919"*
  %2 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.921"* %2 to %"class.thrust::detail::normal_iterator.919"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.919"* %f1, %"class.thrust::detail::normal_iterator.919"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.919"* %f2, %"class.thrust::detail::normal_iterator.919"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  store %"class.thrust::detail::normal_iterator.919"* %f1, %"class.thrust::detail::normal_iterator.919"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.919"* %f2, %"class.thrust::detail::normal_iterator.919"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %1 to %"class.thrust::iterator_adaptor.920"*
  %3 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %3 to %"class.thrust::iterator_adaptor.920"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.920"* %2, %"class.thrust::iterator_adaptor.920"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  store %"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.920"* %y, %"class.thrust::iterator_adaptor.920"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.920"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.82"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.82"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.920"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  store %"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.82"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE10deallocateEv(%"class.thrust::detail::contiguous_storage.867"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp7 = alloca %"class.thrust::device_ptr.873", align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.867"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.870"* %m_begin to %"class.thrust::iterator_adaptor.871"*
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.871"* %0)
  %1 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.867"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.82"* %3, i64 %call3)
  %m_begin6 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrINS_4pairIiiEEEC2IS2_EEPT_(%"class.thrust::device_ptr.873"* %agg.tmp7, %"struct.thrust::pair.82"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive9, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.870"* %ref.tmp, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.870"* %m_begin6 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.870"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !512
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8capacityEv(%"class.thrust::detail::vector_base.866"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.867"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::vector_base.866"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.867"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8allocateEm(%"class.thrust::detail::contiguous_storage.867"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %ref.tmp8 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.873", align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8allocateERS5_m(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.870"* %ref.tmp, %"struct.thrust::pair.82"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.870"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.870"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !512
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin7 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 1
  call void @_ZN6thrust10device_ptrINS_4pairIiiEEEC2IS2_EEPT_(%"class.thrust::device_ptr.873"* %agg.tmp9, %"struct.thrust::pair.82"* null)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive11, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.870"* %ref.tmp8, %"struct.thrust::pair.82"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.870"* %m_begin7 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.870"* %ref.tmp8 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size13 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size13, align 8, !tbaa !512
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE18uninitialized_copyINS0_15normal_iteratorIPKS3_EEEENS8_INS_10device_ptrIS3_EEEET_SF_SE_(%"class.thrust::detail::contiguous_storage.867"* %this, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this9 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this9, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp11 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to %"class.thrust::iterator_adaptor.871"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.871"* %6)
  %7 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::device_ptr.873"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp10, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive13, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive15, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive18, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair.82"* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIiiEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10, %"struct.thrust::pair.82"* %11)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call20, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive25, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEC2ES5_(%"class.thrust::detail::normal_iterator.870"* %retval, %"struct.thrust::pair.82"* %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %13) #5
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive27, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive30, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive31, align 8
  ret %"struct.thrust::pair.82"* %14
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.867"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.870"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.870"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.870"* %i, %"class.thrust::detail::normal_iterator.870"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE7destroyENS0_15normal_iteratorINS_10device_ptrIS3_EEEESA_(%"class.thrust::detail::contiguous_storage.867"* %this, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this10 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this10, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.870"* %first to %"class.thrust::iterator_adaptor.871"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.871"* %0)
  %1 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.870"* %last to %"class.thrust::iterator_facade.872"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.870"* %first to %"class.thrust::iterator_facade.872"*
  %call11 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.872"* dereferenceable(1) %3, %"class.thrust::iterator_facade.872"* dereferenceable(1) %4)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive13, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIiiEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.82"* %5, i64 %call11)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::contiguous_storage.867"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !512
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE10deallocateERS5_NS_10device_ptrIS4_EEm(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.873", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.871"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.871"*, align 8
  store %"class.thrust::iterator_adaptor.871"* %this, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.871"*, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.873"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE10deallocateERS5_NS_10device_ptrIS4_EEmEN19workaround_warnings10deallocateES7_S9_m(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.873", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  call void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEE10deallocateENS_10device_ptrIS2_EEm(%"class.thrust::device_malloc_allocator.868"* %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEE10deallocateENS_10device_ptrIS2_EEm(%"class.thrust::device_malloc_allocator.868"* %this, %"struct.thrust::pair.82"* %p.coerce, i64 %cnt) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::device_ptr.873", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %cnt.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.115", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.868"* %this, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8
  call void @_ZN6thrust10device_ptrIvEC2INS_4pairIiiEEEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %agg.tmp, %"class.thrust::device_ptr.873"* dereferenceable(8) %p)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.115", %"class.thrust::device_ptr.115"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.116", %"class.thrust::pointer.116"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.117", %"class.thrust::iterator_adaptor.117"* %coerce.dive5, i32 0, i32 0
  %0 = load i8*, i8** %coerce.dive6, align 8
  call void @_ZN6thrust11device_freeENS_10device_ptrIvEE(i8* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIvEC2INS_4pairIiiEEEERKNS0_IT_EE(%"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.115"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  store %"class.thrust::device_ptr.115"* %this, %"class.thrust::device_ptr.115"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %other, %"class.thrust::device_ptr.873"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.115"*, %"class.thrust::device_ptr.115"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.115"* %this1 to %"class.thrust::pointer.116"*
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %other.addr, align 8
  call void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIiiEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE(%"class.thrust::pointer.116"* %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIvNS_6system4cuda6detail3tagENS_16device_referenceIvEENS_10device_ptrIvEEEC2INS7_INS_4pairIiiEEEEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISE_S9_vE4typeE(%"class.thrust::pointer.116"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.116"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca i8*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  store %"class.thrust::pointer.116"* %this, %"class.thrust::pointer.116"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %other, %"class.thrust::device_ptr.873"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.116"*, %"class.thrust::pointer.116"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.116"* %this1 to %"class.thrust::iterator_adaptor.117"*
  %2 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.873"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIiiEEEEE3getES5_(%"struct.thrust::pair.82"* %5)
  %6 = bitcast %"struct.thrust::pair.82"* %call to i8*
  store i8* %6, i8** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEC2ERKS3_(%"class.thrust::iterator_adaptor.117"* %1, i8** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIiiEEEEE3getES5_(%"struct.thrust::pair.82"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.873"* %ptr to %"class.thrust::pointer.874"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv(%"class.thrust::pointer.874"* %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE3getEv(%"class.thrust::pointer.874"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.874"*, align 8
  store %"class.thrust::pointer.874"* %this, %"class.thrust::pointer.874"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.874"*, %"class.thrust::pointer.874"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.874"* %this1 to %"class.thrust::iterator_adaptor.875"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.875"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.875"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.875"*, align 8
  store %"class.thrust::iterator_adaptor.875"* %this, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.875"*, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.82"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.867"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8max_sizeERKS5_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8max_sizeERKS5_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIiiEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeINS_23device_malloc_allocatorINS_4pairIiiEEEEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS8_E9size_typeEE4typeERKS8_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8allocateERS5_m(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsINS_23device_malloc_allocatorINS_4pairIiiEEEEE8allocateERS5_mEN19workaround_warnings8allocateES7_m(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.922", align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust10device_ptrIKNS_4pairIiiEEEC2IS2_EEPT_(%"class.thrust::device_ptr.922"* %agg.tmp, %"struct.thrust::pair.82"* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEE8allocateEmNS_10device_ptrIKS2_EE(%"class.thrust::device_malloc_allocator.868"* %0, i64 %1, %"struct.thrust::pair.82"* %2)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive7, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  ret %"struct.thrust::pair.82"* %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust23device_malloc_allocatorINS_4pairIiiEEE8allocateEmNS_10device_ptrIKS2_EE(%"class.thrust::device_malloc_allocator.868"* %this, i64 %cnt, %"struct.thrust::pair.82"* %.coerce) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %0 = alloca %"class.thrust::device_ptr.922", align 8
  %this.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %cnt.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %0, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.868"* %this, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this3 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8
  %1 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call = call i64 @_ZNK6thrust23device_malloc_allocatorINS_4pairIiiEEE8max_sizeEv(%"class.thrust::device_malloc_allocator.868"* %this3)
  %cmp = icmp ugt i64 %1, %call
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %exception = call i8* @__cxa_allocate_exception(i64 8) #5
  %2 = bitcast i8* %exception to %"class.std::bad_alloc"*
  call void @_ZNSt9bad_allocC2Ev(%"class.std::bad_alloc"* %2) #5
  call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt9bad_alloc to i8*), i8* bitcast (void (%"class.std::bad_alloc"*)* @_ZNSt9bad_allocD1Ev to i8*)) #15
  unreachable

if.end:                                           ; preds = %entry
  %3 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call4 = call %"struct.thrust::pair.82"* @_ZN6thrust13device_mallocINS_4pairIiiEEEENS_10device_ptrIT_EEm(i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call4, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive9, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKNS_4pairIiiEEEC2IS2_EEPT_(%"class.thrust::device_ptr.922"* %this, %"struct.thrust::pair.82"* %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  %ptr.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::device_ptr.922"* %this, %"class.thrust::device_ptr.922"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %ptr, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.922"* %this1 to %"class.thrust::pointer.923"*
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_(%"class.thrust::pointer.923"* %0, %"struct.thrust::pair.82"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust23device_malloc_allocatorINS_4pairIiiEEE8max_sizeEv(%"class.thrust::device_malloc_allocator.868"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  store %"class.thrust::device_malloc_allocator.868"* %this, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %this.addr, align 8
  %call = call i64 @_ZNSt14numeric_limitsImE3maxEv() #5
  %div = udiv i64 %call, 8
  ret i64 %div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust13device_mallocINS_4pairIiiEEEENS_10device_ptrIT_EEm(i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %n.addr = alloca i64, align 8
  %s = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %coerce = alloca %"class.thrust::pointer.926", align 8
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6mallocINS_4pairIiiEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.926"* %coerce)
  call void @_ZN6thrust10device_ptrINS_4pairIiiEEEC2IS2_EEPT_(%"class.thrust::device_ptr.873"* %retval, %"struct.thrust::pair.82"* %call2)
  %3 = bitcast %"struct.thrust::system::cuda::detail::tag"* %s to i8*
  call void @llvm.lifetime.end(i64 1, i8* %3) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %4
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6mallocINS_4pairIiiEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.926", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::pair.82"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIiiEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.926"* dereferenceable(8) %ref.tmp)
  store %"struct.thrust::pair.82"* %call4, %"struct.thrust::pair.82"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.926"* %retval, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"struct.thrust::pair.82"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive5, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.82"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.926"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.926"*, align 8
  store %"class.thrust::pointer.926"* %this, %"class.thrust::pointer.926"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.926"* %this1 to %"class.thrust::iterator_adaptor.927"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.927"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.926"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.926"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  store %"class.thrust::pointer.926"* %ptr, %"class.thrust::pointer.926"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.82"* %3)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIiiEENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 8, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to %"struct.thrust::pair.82"*
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.926"* %retval, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.926"* %this, %"struct.thrust::pair.82"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.926"*, align 8
  %other.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::pointer.926"* %this, %"class.thrust::pointer.926"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %other, %"struct.thrust::pair.82"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.926"* %this1 to %"class.thrust::iterator_adaptor.927"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.927"* %0, %"struct.thrust::pair.82"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.82"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.926"* %ptr)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.927"* %this, %"struct.thrust::pair.82"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.927"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"class.thrust::iterator_adaptor.927"* %this, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"** %iter, %"struct.thrust::pair.82"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.927"*, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.927"* %this1 to %"class.thrust::iterator_facade.928"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !517
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.927"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.927"*, align 8
  store %"class.thrust::iterator_adaptor.927"* %this, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.927"*, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.82"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2IS2_EEPT_(%"class.thrust::pointer.923"* %this, %"struct.thrust::pair.82"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.923"*, align 8
  %other.addr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::pointer.923"* %this, %"class.thrust::pointer.923"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %other, %"struct.thrust::pair.82"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.923"*, %"class.thrust::pointer.923"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.923"* %this1 to %"class.thrust::iterator_adaptor.924"*
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %other.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %1, %"struct.thrust::pair.82"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.924"* %0, %"struct.thrust::pair.82"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.924"* %this, %"struct.thrust::pair.82"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.924"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"class.thrust::iterator_adaptor.924"* %this, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"** %iter, %"struct.thrust::pair.82"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.924"*, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.924"* %this1 to %"class.thrust::iterator_facade.925"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !519
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIiiEEEENS0_15normal_iteratorIPKS8_EENS_10device_ptrIS8_EEEET2_RNS_16execution_policyIT_EERT0_T1_SN_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp8 to i8*
  %7 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive9, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive11, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive14, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIiiEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive20, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  ret %"struct.thrust::pair.82"* %11
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagENS_23device_malloc_allocatorINS_4pairIiiEEEENS0_15normal_iteratorIPKS9_EENS_10device_ptrIS9_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESK_E4typeERNS_16execution_policyIT_EERSI_T1_SU_SK_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp8 = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIiiEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive9, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp7, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive11, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp8, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive14, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10, %"struct.thrust::pair.82"* %11)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive20, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  ret %"struct.thrust::pair.82"* %12
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagENS2_4cuda6detail3tagENS0_15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_RKNS_16execution_policyIT_EERKNSI_IT0_EET1_SR_SH_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system2, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp12 = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %system2, %"struct.thrust::execution_policy.120"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %3 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.120"* %3 to %"struct.thrust::detail::execution_policy_base.121"*
  %call8 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call8)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call9 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call10 = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZN6thrust6system4cuda6detail13select_systemINS0_3cpp6detail3tagENS2_3tagEEENS2_12cross_systemIT_T0_EERKNS5_16execution_policyIS9_EERNS2_16execution_policyISA_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %2, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 0
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call10, 1
  store %"struct.thrust::execution_policy.120"* %10, %"struct.thrust::execution_policy.120"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.132"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp11 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp12 to i8*
  %17 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive13, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp11, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive15, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive18, i32 0, i32 0
  %20 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %call20 = call %"struct.thrust::pair.82"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %11, %"struct.thrust::pair.82"* %18, %"struct.thrust::pair.82"* %19, %"struct.thrust::pair.82"* %20)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call20, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive25, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  ret %"struct.thrust::pair.82"* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIiiEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIiiEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISD_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SP_SJ_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call7 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call7 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp8 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp9 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp10 to i8*
  %8 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive11, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp9, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive13, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp10, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive16, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  %call18 = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.82"* %14, %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"* %16)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call18, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive23, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive24, align 8
  ret %"struct.thrust::pair.82"* %17
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.873", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive10, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp8, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive12, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive15, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive16, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %17, %"struct.thrust::pair.82"* %18)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive21, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp10 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp7 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.919"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp8 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.919"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp9 to i8*
  %10 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp7, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive12, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive14, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive17, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %17, %"struct.thrust::pair.82"* %18)
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive23, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive24, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp10 = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp12 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp13 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.919"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp9 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.919"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %14, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp8, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive14, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp9, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive16, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive19, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive20, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %13, %"struct.thrust::execution_policy.120"* %15, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %17, %"struct.thrust::pair.82"* %18)
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive22, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive25, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEENS_10device_ptrISB_EEEET2_NS2_12cross_systemIT_T0_EET1_SM_SH_NS_27random_access_traversal_tagESN_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp9 = alloca %"class.thrust::device_ptr.873", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %end, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.919"* %end to %"class.thrust::iterator_facade.921"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.919"* %begin to %"class.thrust::iterator_facade.921"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.921"* dereferenceable(1) %7, %"class.thrust::iterator_facade.921"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.919"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp9 to i8*
  %13 = bitcast %"class.thrust::device_ptr.873"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive10, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive13, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %14, i64 %11, %"struct.thrust::pair.82"* %15)
  %16 = bitcast %"class.thrust::device_ptr.873"* %result to %"class.thrust::iterator_facade.876"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call15 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.876"* dereferenceable(1) %16, i64 %17)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive17, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call15, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive20, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagENS_6detail15normal_iteratorIPKNS_4pairIiiEEEElNS_10device_ptrISB_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %first.coerce, i64 %n, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %result = alloca %"class.thrust::device_ptr.873", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %coerce = alloca %"class.thrust::device_reference.929", align 8
  %src = alloca i8*, align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.82"*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %result, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::device_ptr.873"* %result to %"class.thrust::iterator_facade.876"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv(%"class.thrust::iterator_facade.876"* %1)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.929", %"class.thrust::device_reference.929"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %2 = bitcast %"class.thrust::device_reference.929"* %coerce to %"class.thrust::reference.930"*
  %call10 = call %"struct.thrust::pair.82"* @_ZNK6thrust9referenceINS_4pairIiiEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv(%"class.thrust::reference.930"* %2)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call10, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  %call14 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIiiEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"class.thrust::device_ptr.873"* dereferenceable(8) %ref.tmp)
  %3 = bitcast %"struct.thrust::pair.82"* %call14 to i8*
  store i8* %3, i8** %dst, align 8, !tbaa !1
  %4 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %4) #5
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to %"class.thrust::iterator_facade.921"*
  %call16 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.921"* %5)
  store %"struct.thrust::pair.82"* %call16, %"struct.thrust::pair.82"** %ref.tmp15, align 8, !tbaa !1
  %call17 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.82"** dereferenceable(8) %ref.tmp15)
  %6 = bitcast %"struct.thrust::pair.82"* %call17 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call18 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call18 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %11, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %10, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %13)
  store i32 %call21, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system122 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %15, i32 0, i32 0
  %ref23 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system122, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.88"* %ref23 to %"struct.thrust::detail::execution_policy_base.85"*
  %call24 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call24 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system225 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %18, i32 0, i32 1
  %ref26 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system225, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.120"* %ref26 to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call28 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %17, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call28, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 8
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrustplINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.876"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.876"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::device_ptr.873", align 8
  store %"class.thrust::iterator_facade.876"* %i, %"class.thrust::iterator_facade.876"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::device_ptr.873"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.876"*, %"class.thrust::iterator_facade.876"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.876"* %1 to %"class.thrust::device_ptr.873"*
  %3 = bitcast %"class.thrust::device_ptr.873"* %tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.873"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::device_ptr.873"* %tmp to %"class.thrust::iterator_facade.876"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.876"* %5, i64 %6)
  %7 = bitcast %"class.thrust::device_ptr.873"* %retval to i8*
  %8 = bitcast %"class.thrust::device_ptr.873"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::device_ptr.873"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.82"* %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_10device_ptrINS_4pairIiiEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"class.thrust::device_ptr.873"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  store %"class.thrust::device_ptr.873"* %ptr, %"class.thrust::device_ptr.873"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIiiEEEEE3getES5_(%"struct.thrust::pair.82"* %3)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEdeEv(%"class.thrust::iterator_facade.876"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.929", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.876"*, align 8
  store %"class.thrust::iterator_facade.876"* %this, %"class.thrust::iterator_facade.876"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.876"*, %"class.thrust::iterator_facade.876"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.876"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIiiEEEEEENT_9referenceERKS6_(%"class.thrust::device_ptr.873"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.929", %"class.thrust::device_reference.929"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.929", %"class.thrust::device_reference.929"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust9referenceINS_4pairIiiEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEadEv(%"class.thrust::reference.930"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %this.addr = alloca %"class.thrust::reference.930"*, align 8
  store %"class.thrust::reference.930"* %this, %"class.thrust::reference.930"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.930"*, %"class.thrust::reference.930"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.873"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.873"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.82"** dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"struct.thrust::pair.82"** %ptr, %"struct.thrust::pair.82"*** %ptr.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %ptr.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %0, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsIPKNS_4pairIiiEEE3getES5_(%"struct.thrust::pair.82"* %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.921"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  store %"class.thrust::iterator_facade.921"* %this, %"class.thrust::iterator_facade.921"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.921"* %this1)
  %call2 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENT_9referenceERKS9_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %call)
  ret %"struct.thrust::pair.82"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrINS_4pairIiiEEEEEENT_9referenceERKS6_(%"class.thrust::device_ptr.873"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.929", align 8
  %f.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  store %"class.thrust::device_ptr.873"* %f, %"class.thrust::device_ptr.873"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %0 to %"class.thrust::pointer.874"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv(%"class.thrust::pointer.874"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.929", %"class.thrust::device_reference.929"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.929", %"class.thrust::device_reference.929"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.876"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.876"*, align 8
  store %"class.thrust::iterator_facade.876"* %this, %"class.thrust::iterator_facade.876"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.876"*, %"class.thrust::iterator_facade.876"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.876"* %this1 to %"class.thrust::device_ptr.873"*
  ret %"class.thrust::device_ptr.873"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS2_EENS_10device_ptrIS2_EEE11dereferenceEv(%"class.thrust::pointer.874"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.929", align 8
  %this.addr = alloca %"class.thrust::pointer.874"*, align 8
  store %"class.thrust::pointer.874"* %this, %"class.thrust::pointer.874"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.874"*, %"class.thrust::pointer.874"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.874"* %this1 to %"class.thrust::device_ptr.873"*
  call void @_ZN6thrust16device_referenceINS_4pairIiiEEEC2ERKNS_10device_ptrIS2_EE(%"class.thrust::device_reference.929"* %retval, %"class.thrust::device_ptr.873"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.929", %"class.thrust::device_reference.929"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceINS_4pairIiiEEEC2ERKNS_10device_ptrIS2_EE(%"class.thrust::device_reference.929"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.929"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  store %"class.thrust::device_reference.929"* %this, %"class.thrust::device_reference.929"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %ptr, %"class.thrust::device_ptr.873"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.929"*, %"class.thrust::device_reference.929"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.929"* %this1 to %"class.thrust::reference.930"*
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIiiEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_(%"class.thrust::reference.930"* %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIiiEENS_10device_ptrIS2_EENS_16device_referenceIS2_EEEC2ERKS4_(%"class.thrust::reference.930"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.930"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  store %"class.thrust::reference.930"* %this, %"class.thrust::reference.930"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %ptr, %"class.thrust::device_ptr.873"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.930"*, %"class.thrust::reference.930"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.930", %"class.thrust::reference.930"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsIPKNS_4pairIiiEEE3getES5_(%"struct.thrust::pair.82"* %ptr) #9 comdat align 2 {
entry:
  %ptr.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair.82"* %ptr, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %ptr.addr, align 8, !tbaa !1
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENT_9referenceERKS9_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  store %"class.thrust::detail::normal_iterator.919"* %f, %"class.thrust::detail::normal_iterator.919"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %0 to %"class.thrust::iterator_adaptor.920"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.920"* %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.921"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  store %"class.thrust::iterator_facade.921"* %this, %"class.thrust::iterator_facade.921"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.921"* %this1 to %"class.thrust::detail::normal_iterator.919"*
  ret %"class.thrust::detail::normal_iterator.919"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E11dereferenceEv(%"class.thrust::iterator_adaptor.920"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  store %"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.876"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.876"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.876"* %this, %"class.thrust::iterator_facade.876"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.876"*, %"class.thrust::iterator_facade.876"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.876"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIiiEEEEEEvRT_NS6_15difference_typeE(%"class.thrust::device_ptr.873"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.876"* %this1)
  ret %"class.thrust::device_ptr.873"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrINS_4pairIiiEEEEEEvRT_NS6_15difference_typeE(%"class.thrust::device_ptr.873"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.873"* %f, %"class.thrust::device_ptr.873"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %0 to %"class.thrust::iterator_adaptor.875"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl(%"class.thrust::iterator_adaptor.875"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7derivedEv(%"class.thrust::iterator_facade.876"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.876"*, align 8
  store %"class.thrust::iterator_facade.876"* %this, %"class.thrust::iterator_facade.876"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.876"*, %"class.thrust::iterator_facade.876"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.876"* %this1 to %"class.thrust::device_ptr.873"*
  ret %"class.thrust::device_ptr.873"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE7advanceEl(%"class.thrust::iterator_adaptor.875"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.875"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.875"* %this, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.875"*, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !513
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %1, i64 %0
  store %"struct.thrust::pair.82"* %add.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !513
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail6systemINS_23device_malloc_allocatorINS_4pairIiiEEEEEENS0_10disable_ifIXsr17has_member_systemIT_EE5valueENS0_16allocator_systemIS8_E4typeEE4typeERS8_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a) #1 comdat {
entry:
  %retval = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.870"* %i, %"class.thrust::detail::normal_iterator.870"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.870"* %i, %"class.thrust::detail::normal_iterator.870"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %1 to %"class.thrust::iterator_facade.872"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.872"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.872"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.872"* %this, %"class.thrust::iterator_facade.872"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.872"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.872"* %this1)
  ret %"class.thrust::detail::normal_iterator.870"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.870"* %f, %"class.thrust::detail::normal_iterator.870"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.870"* %0 to %"class.thrust::iterator_adaptor.871"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.871"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.872"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  store %"class.thrust::iterator_facade.872"* %this, %"class.thrust::iterator_facade.872"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.872"* %this1 to %"class.thrust::detail::normal_iterator.870"*
  ret %"class.thrust::detail::normal_iterator.870"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.871"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.871"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.871"* %this, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.871"*, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.873"* %m_iterator to %"class.thrust::iterator_facade.876"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZN6thrust15iterator_facadeINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEpLEl(%"class.thrust::iterator_facade.876"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIiiEEEENS_10device_ptrIS4_EElEEvRT_T0_T1_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.873", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIiiEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.872"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.872"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  store %"class.thrust::iterator_facade.872"* %lhs, %"class.thrust::iterator_facade.872"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.872"* %rhs, %"class.thrust::iterator_facade.872"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.872"* %0 to %"class.thrust::detail::normal_iterator.870"*
  %2 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.872"* %2 to %"class.thrust::detail::normal_iterator.870"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS_23device_malloc_allocatorINS_4pairIiiEEEENS_10device_ptrIS5_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSA_SB_T1_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::device_ptr.873", align 8
  %a.addr = alloca %"class.thrust::device_malloc_allocator.868"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::device_ptr.873", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"class.thrust::device_malloc_allocator.868"* %a, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_malloc_allocator.868"*, %"class.thrust::device_malloc_allocator.868"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemINS_23device_malloc_allocatorINS_4pairIiiEEEEE3getERS5_(%"class.thrust::device_malloc_allocator.868"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.873"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS9_21execution_policy_baseIT_EESC_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %first = alloca %"class.thrust::device_ptr.873", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp4 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call3 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call3 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::device_ptr.873"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive6, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %call8 = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %5, i64 %4)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call8, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive13, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  ret %"struct.thrust::pair.82"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %first = alloca %"class.thrust::device_ptr.873", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair.82"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive11, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.82"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_10device_ptrINS_4pairIiiEEEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESC_T1_T2_EN10workaround13parallel_pathERNSD_IS4_EES8_lSB_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.873", align 8
  %first = alloca %"class.thrust::device_ptr.873", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp6 = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp7 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce15 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp17 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp18 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp19 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp20 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp21 = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp28 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp31 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp34 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp35 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp36 = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp37 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp41 = alloca i32, align 4
  %agg.tmp.ensured44 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp45 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp50 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp51 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp52 = alloca %"class.thrust::device_ptr.873", align 8
  %agg.tmp53 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive3 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp5 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp6 to i8*
  %12 = bitcast %"class.thrust::device_ptr.873"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp7 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp6, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive9, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  %call11 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"struct.thrust::pair.82"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call11, i64* %17, align 4
  %call12 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call13 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call13, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call14 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce15, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive16 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call14, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call14, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp18, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp20 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp21 to i8*
  %30 = bitcast %"class.thrust::device_ptr.873"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp22 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp21, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive24, i32 0, i32 0
  %34 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  %call26 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp18, %"struct.thrust::pair.82"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp17 to i64*
  store i64 %call26, i64* %35, align 4
  %call27 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce15, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp17)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call29 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call29, i64* %ref.tmp28, align 8, !tbaa !13
  %call30 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp28)
  store i64 %call30, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call32 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call32 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call33 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp31, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call33)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp35 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp36 to i8*
  %45 = bitcast %"class.thrust::device_ptr.873"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp37 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive38 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp36, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive39, i32 0, i32 0
  %49 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive40, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp31, %"struct.thrust::pair.82"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call42 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call42, i32* %ref.tmp41, align 4, !tbaa !11
  %call43 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp41)
  store i32 %call43, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv46 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv47 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call48 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call48 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call49 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp45, i64 %conv46, i64 %conv47, i64 0, %struct.CUstream_st* %call49)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp51 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp52 to i8*
  %61 = bitcast %"class.thrust::device_ptr.873"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp53 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive54 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp52, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive55, i32 0, i32 0
  %65 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive56, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured44, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp45, %"struct.thrust::pair.82"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured44) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::device_ptr.873"* %first to %"class.thrust::iterator_facade.876"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call57 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEET_RKNS_15iterator_facadeISC_T0_T1_T2_T3_T4_EENSC_15difference_typeE(%"class.thrust::iterator_facade.876"* dereferenceable(1) %66, i64 %67)
  %coerce.dive58 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive59, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call57, %"struct.thrust::pair.82"** %coerce.dive60, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive61 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %retval, i32 0, i32 0
  %coerce.dive62 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive61, i32 0, i32 0
  %coerce.dive63 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive62, i32 0, i32 0
  %72 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive63, align 8
  ret %"struct.thrust::pair.82"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.873", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.873"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp5)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.873", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.873"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp5)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.873", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.873"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::device_ptr.873", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  %agg.tmp6 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* sret %agg.tmp5, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::device_ptr.873"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjNS_9null_typeESL_SL_SL_SL_SL_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::device_ptr.873"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.932", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %a2, %"class.thrust::device_ptr.873"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.932"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %agg.result, %"class.thrust::tuple.932"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.932"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.873"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %t1, %"class.thrust::device_ptr.873"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj(%"class.thrust::tuple.932"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEEjNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %this, %"class.thrust::tuple.932"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"*, align 8
  %args.addr = alloca %"class.thrust::tuple.932"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.932"* %args, %"class.thrust::tuple.932"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.932"*, %"class.thrust::tuple.932"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.932"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.932"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEEjNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKj(%"class.thrust::tuple.932"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.873"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.932"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.932"* %this, %"class.thrust::tuple.932"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %t1, %"class.thrust::device_ptr.873"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.932"*, %"class.thrust::tuple.932"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.932"* %this1 to %"struct.thrust::detail::cons.933"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.933"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::device_ptr.873"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KjKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.933"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::device_ptr.873"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.933"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.933"* %this, %"struct.thrust::detail::cons.933"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %t2, %"class.thrust::device_ptr.873"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.933"*, %"struct.thrust::detail::cons.933"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.933", %"struct.thrust::detail::cons.933"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.933", %"struct.thrust::detail::cons.933"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.934"* %tail, %"class.thrust::device_ptr.873"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKS5_KS9_KjKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.934"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.934"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.934"* %this, %"struct.thrust::detail::cons.934"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %t1, %"class.thrust::device_ptr.873"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.934"*, %"struct.thrust::detail::cons.934"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.934", %"struct.thrust::detail::cons.934"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %head to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.934", %"struct.thrust::detail::cons.934"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElNS_9null_typeESL_SL_SL_SL_SL_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESQ_SQ_SQ_SQ_SQ_EEEESK_RKSM_RKSN_RKSO_RKSP_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::device_ptr.873"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.943", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %a2, %"class.thrust::device_ptr.873"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.943"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %agg.result, %"class.thrust::tuple.943"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElEENSC_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESM_SM_SM_SM_SM_E4typeERKSI_RKSJ_RKSK_RKSL_(%"class.thrust::tuple.943"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.873"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %t1, %"class.thrust::device_ptr.873"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl(%"class.thrust::tuple.943"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSF_23allocator_traits_detail5gozerEvEElNS_9null_typeESK_SK_SK_SK_SK_EEEC2ES7_RKSL_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %this, %"class.thrust::tuple.943"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"*, align 8
  %args.addr = alloca %"class.thrust::tuple.943"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.943"* %args, %"class.thrust::tuple.943"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.943"*, %"class.thrust::tuple.943"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.943"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.943"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSC_23allocator_traits_detail5gozerEvEElNS_9null_typeESH_SH_SH_SH_SH_EC2ERKS7_RKSB_RKSG_RKl(%"class.thrust::tuple.943"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::device_ptr.873"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.943"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.943"* %this, %"class.thrust::tuple.943"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %t1, %"class.thrust::device_ptr.873"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.943"*, %"class.thrust::tuple.943"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.943"* %this1 to %"struct.thrust::detail::cons.944"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.944"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::device_ptr.873"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSC_KSG_KlKSH_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.944"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::device_ptr.873"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.944"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.944"* %this, %"struct.thrust::detail::cons.944"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %t2, %"class.thrust::device_ptr.873"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.944"*, %"struct.thrust::detail::cons.944"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.944", %"struct.thrust::detail::cons.944"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.944", %"struct.thrust::detail::cons.944"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.945"* %tail, %"class.thrust::device_ptr.873"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_10device_ptrINS_4pairIiiEEEENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKS5_KS9_KlKSA_SI_SI_SI_SI_SI_SI_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.945"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.945"*, align 8
  %t1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.945"* %this, %"struct.thrust::detail::cons.945"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %t1, %"class.thrust::device_ptr.873"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.945"*, %"struct.thrust::detail::cons.945"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.945", %"struct.thrust::detail::cons.945"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.873"* %head to i8*
  %2 = bitcast %"class.thrust::device_ptr.873"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.945", %"struct.thrust::detail::cons.945"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.946"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.942", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !521
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.947"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.942"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.951"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.948"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEElNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.950"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchESB_ST_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.935"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.931", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !523
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_ST_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.936"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEC2ESB_ST_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.931"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.940"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.937"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE6launchEjjmP11CUstream_stSV_EN10workaround14supported_pathEjjmSY_SV_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS_9null_typeESS_SS_SS_SS_SS_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_10device_ptrINS0_4pairIiiEEEENS0_6detail16wrapped_functionINSN_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESS_SS_SS_SS_SS_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.939"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES8_EENS2_20distance_from_resultIT_T0_E4typeERKSA_RKSB_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.870"* %f1, %"class.thrust::detail::normal_iterator.870"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.870"* %f2, %"class.thrust::detail::normal_iterator.870"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES8_EENT_15difference_typeERKS9_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  store %"class.thrust::detail::normal_iterator.870"* %f1, %"class.thrust::detail::normal_iterator.870"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.870"* %f2, %"class.thrust::detail::normal_iterator.870"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %1 to %"class.thrust::iterator_adaptor.871"*
  %3 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.870"* %3 to %"class.thrust::iterator_adaptor.871"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.871"* %2, %"class.thrust::iterator_adaptor.871"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E11distance_toIS7_S6_S8_S8_S8_S8_S8_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.871"* %this, %"class.thrust::iterator_adaptor.871"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.871"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.871"*, align 8
  store %"class.thrust::iterator_adaptor.871"* %this, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.871"* %y, %"class.thrust::iterator_adaptor.871"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.871"*, %"class.thrust::iterator_adaptor.871"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.871"*, %"class.thrust::iterator_adaptor.871"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.871"* %0)
  %1 = bitcast %"class.thrust::device_ptr.873"* %call to %"class.thrust::iterator_facade.876"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.873"* %m_iterator to %"class.thrust::iterator_facade.876"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.876"* dereferenceable(1) %1, %"class.thrust::iterator_facade.876"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrINS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElS4_S3_S8_S9_SB_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.876"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.876"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.876"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.876"*, align 8
  store %"class.thrust::iterator_facade.876"* %lhs, %"class.thrust::iterator_facade.876"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.876"* %rhs, %"class.thrust::iterator_facade.876"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.876"*, %"class.thrust::iterator_facade.876"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.876"* %0 to %"class.thrust::device_ptr.873"*
  %2 = load %"class.thrust::iterator_facade.876"*, %"class.thrust::iterator_facade.876"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.876"* %2 to %"class.thrust::device_ptr.873"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIiiEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::device_ptr.873"* dereferenceable(8) %1, %"class.thrust::device_ptr.873"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIiiEEEES5_EENS_6detail20distance_from_resultIT_T0_E4typeERKS8_RKS9_(%"class.thrust::device_ptr.873"* dereferenceable(8) %f1, %"class.thrust::device_ptr.873"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.873"* %f1, %"class.thrust::device_ptr.873"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %f2, %"class.thrust::device_ptr.873"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIiiEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.873"* dereferenceable(8) %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrINS_4pairIiiEEEES5_EENT_15difference_typeERKS6_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.873"* dereferenceable(8) %f1, %"class.thrust::device_ptr.873"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  store %"class.thrust::device_ptr.873"* %f1, %"class.thrust::device_ptr.873"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.873"* %f2, %"class.thrust::device_ptr.873"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.873"* %1 to %"class.thrust::iterator_adaptor.875"*
  %3 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.873"* %3 to %"class.thrust::iterator_adaptor.875"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.875"* %2, %"class.thrust::iterator_adaptor.875"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE11distance_toIS4_S5_S3_S9_SA_SC_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.875"* %this, %"class.thrust::iterator_adaptor.875"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.875"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.875"*, align 8
  store %"class.thrust::iterator_adaptor.875"* %this, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.875"* %y, %"class.thrust::iterator_adaptor.875"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.875"*, %"class.thrust::iterator_adaptor.875"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.875"*, %"class.thrust::iterator_adaptor.875"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElE4baseEv(%"class.thrust::iterator_adaptor.875"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !513
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.82"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.82"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::contiguous_storage.846"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorIPKNS_4pairIiiEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE(%"class.thrust::detail::normal_iterator.919"* %retval, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorIPKNS_4pairIiiEEEC2IPS3_EERKNS1_IT_EEPNS0_21enable_if_convertibleIS9_S5_vE4typeE(%"class.thrust::detail::normal_iterator.919"* %this, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::detail::normal_iterator.919"* %this, %"class.thrust::detail::normal_iterator.919"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.850"* %other, %"class.thrust::detail::normal_iterator.850"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %this1 to %"class.thrust::iterator_adaptor.920"*
  %2 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.850"* %2 to %"class.thrust::iterator_adaptor.851"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.851"* %3)
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.920"* %1, %"struct.thrust::pair.82"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_EC2ERKS6_(%"class.thrust::iterator_adaptor.920"* %this, %"struct.thrust::pair.82"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"** %iter, %"struct.thrust::pair.82"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.920"* %this1 to %"class.thrust::iterator_facade.921"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.919"* %i, %"class.thrust::detail::normal_iterator.919"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.919"* %i, %"class.thrust::detail::normal_iterator.919"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.919"* %i, %"class.thrust::detail::normal_iterator.919"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %1 to %"class.thrust::iterator_facade.921"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl(%"class.thrust::iterator_facade.921"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEpLEl(%"class.thrust::iterator_facade.921"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.921"* %this, %"class.thrust::iterator_facade.921"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.921"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.921"* %this1)
  ret %"class.thrust::detail::normal_iterator.919"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.919"* %f, %"class.thrust::detail::normal_iterator.919"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %0 to %"class.thrust::iterator_adaptor.920"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.920"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.921"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  store %"class.thrust::iterator_facade.921"* %this, %"class.thrust::iterator_facade.921"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.921"* %this1 to %"class.thrust::detail::normal_iterator.919"*
  ret %"class.thrust::detail::normal_iterator.919"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E7advanceEl(%"class.thrust::iterator_adaptor.920"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %1, i64 %0
  store %"struct.thrust::pair.82"* %add.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiSaIiEEC2IbSaIbEEERKNS1_IT_T0_EE(%"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.74"* dereferenceable(32) %v) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %v.addr = alloca %"class.thrust::detail::vector_base.74"*, align 8
  %ref.tmp = alloca %"class.std::allocator.838", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::vector_base.74"* %v, %"class.thrust::detail::vector_base.74"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  call void @_ZNSaIiEC2Ev(%"class.std::allocator.838"* %ref.tmp) #5
  invoke void @_ZN6thrust6detail18contiguous_storageIiSaIiEEC2ERKS2_(%"class.thrust::detail::contiguous_storage.837"* %m_storage, %"class.std::allocator.838"* dereferenceable(1) %ref.tmp)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.839"*)* @_ZN9__gnu_cxx13new_allocatorIiED2Ev to void (%"class.std::allocator.838"*)*)(%"class.std::allocator.838"* %ref.tmp) #5
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 1
  store i64 0, i64* %m_size, align 8, !tbaa !472
  %0 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %v.addr, align 8
  %call = invoke i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE5beginEv(%"class.thrust::detail::vector_base.74"* %0)
          to label %invoke.cont3 unwind label %lpad2

invoke.cont3:                                     ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive4, align 8
  %1 = load %"class.thrust::detail::vector_base.74"*, %"class.thrust::detail::vector_base.74"** %v.addr, align 8
  %call7 = invoke i8* @_ZNK6thrust6detail11vector_baseIbSaIbEE3endEv(%"class.thrust::detail::vector_base.74"* %1)
          to label %invoke.cont6 unwind label %lpad2

invoke.cont6:                                     ; preds = %invoke.cont3
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  store i8* %call7, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive10, i32 0, i32 0
  %2 = load i8*, i8** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive12, i32 0, i32 0
  %3 = load i8*, i8** %coerce.dive13, align 8
  invoke void @_ZN6thrust6detail11vector_baseIiSaIiEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_(%"class.thrust::detail::vector_base.836"* %this1, i8* %2, i8* %3)
          to label %invoke.cont14 unwind label %lpad2

invoke.cont14:                                    ; preds = %invoke.cont6
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.839"*)* @_ZN9__gnu_cxx13new_allocatorIiED2Ev to void (%"class.std::allocator.838"*)*)(%"class.std::allocator.838"* %ref.tmp) #5
  br label %eh.resume

lpad2:                                            ; preds = %invoke.cont6, %invoke.cont3, %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEED2Ev(%"class.thrust::detail::contiguous_storage.837"* %m_storage) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad2, %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val15 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiSaIiEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_(%"class.thrust::detail::vector_base.836"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp6 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %4 = load i8*, i8** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive9, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive10, align 8
  call void @_ZN6thrust6detail11vector_baseIiSaIiEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.836"* %this4, i8* %4, i8* %5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiSaIiEE10range_initINS0_15normal_iteratorIPKbEEEEvT_S9_NS_27random_access_traversal_tagE(%"class.thrust::detail::vector_base.836"* %this, i8* %first.coerce, i8* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %new_size = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %1 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKbEEEENS_15iterator_traitsIT_E15difference_typeES7_S7_(i8* %6, i8* %7)
  store i64 %call, i64* %new_size, align 8, !tbaa !13
  %8 = load i64, i64* %new_size, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp10 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp11 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this4, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp10, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive12, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp11, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive14, i32 0, i32 0
  %14 = load i8*, i8** %coerce.dive15, align 8
  call void @_ZN6thrust6detail11vector_baseIiSaIiEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIiS2_EE(%"class.thrust::detail::vector_base.836"* %this4, i64 %8, i8* %13, i8* %14, %"class.thrust::detail::contiguous_storage.837"* dereferenceable(24) %m_storage)
  %15 = load i64, i64* %new_size, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this4, i32 0, i32 1
  store i64 %15, i64* %m_size, align 8, !tbaa !472
  %16 = bitcast i64* %new_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail11vector_baseIiSaIiEE17allocate_and_copyINS0_15normal_iteratorIPKbEEEEvmT_S9_RNS0_18contiguous_storageIiS2_EE(%"class.thrust::detail::vector_base.836"* %this, i64 %requested_size, i8* %first.coerce, i8* %last.coerce, %"class.thrust::detail::contiguous_storage.837"* dereferenceable(24) %new_storage) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  %requested_size.addr = alloca i64, align 8
  %new_storage.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %allocated_size = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %ref.tmp6 = alloca i64, align 8
  %ref.tmp11 = alloca %"class.std::basic_string", align 8
  %ref.tmp12 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp17 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %new_storage_end = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp42 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp47 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  store i64 %requested_size, i64* %requested_size.addr, align 8, !tbaa !13
  store %"class.thrust::detail::contiguous_storage.837"* %new_storage, %"class.thrust::detail::contiguous_storage.837"** %new_storage.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %0 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %cmp = icmp eq i64 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %new_storage.addr, align 8
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEE10deallocateEv(%"class.thrust::detail::contiguous_storage.837"* %1)
  br label %return

if.end:                                           ; preds = %entry
  %2 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  %call = call i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE8capacityEv(%"class.thrust::detail::vector_base.836"* %this4)
  %mul = mul i64 2, %call
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call5 = call i64 @_ZN6thrust3maxImEET_RKS1_S3_(i64* dereferenceable(8) %requested_size.addr, i64* dereferenceable(8) %ref.tmp)
  store i64 %call5, i64* %allocated_size, align 8, !tbaa !13
  %call7 = call i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE8max_sizeEv(%"class.thrust::detail::vector_base.836"* %this4)
  store i64 %call7, i64* %ref.tmp6, align 8, !tbaa !13
  %call8 = call i64 @_ZN6thrust3minImEET_RKS1_S3_(i64* dereferenceable(8) %allocated_size, i64* dereferenceable(8) %ref.tmp6)
  store i64 %call8, i64* %allocated_size, align 8, !tbaa !13
  %3 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %allocated_size, align 8, !tbaa !13
  %cmp9 = icmp ugt i64 %3, %4
  br i1 %cmp9, label %if.then10, label %if.end16

if.then10:                                        ; preds = %if.end
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %5 = bitcast i8* %exception to %"class.std::length_error"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp12) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp11, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.23, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp12)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then10
  invoke void @_ZNSt12length_errorC1ERKSs(%"class.std::length_error"* %5, %"class.std::basic_string"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont14 unwind label %lpad13

invoke.cont14:                                    ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTISt12length_error to i8*), i8* bitcast (void (%"class.std::length_error"*)* @_ZNSt12length_errorD1Ev to i8*)) #15
          to label %unreachable unwind label %lpad13

lpad:                                             ; preds = %if.then10
  %6 = landingpad { i8*, i32 }
          cleanup
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad13:                                           ; preds = %invoke.cont14, %invoke.cont
  %9 = landingpad { i8*, i32 }
          cleanup
  %10 = extractvalue { i8*, i32 } %9, 0
  store i8* %10, i8** %exn.slot, align 8
  %11 = extractvalue { i8*, i32 } %9, 1
  store i32 %11, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp11) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad13, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp12) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  br label %ehcleanup57

if.end16:                                         ; preds = %if.end
  %12 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %new_storage.addr, align 8
  %13 = load i64, i64* %allocated_size, align 8, !tbaa !13
  call void @_ZN6thrust6detail18contiguous_storageIiSaIiEE8allocateEm(%"class.thrust::detail::contiguous_storage.837"* %12, i64 %13)
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this4, i32 0, i32 0
  %14 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %18 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %new_storage.addr, align 8
  %call21 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiSaIiEE5beginEv(%"class.thrust::detail::contiguous_storage.837"* %18)
          to label %invoke.cont20 unwind label %lpad19

invoke.cont20:                                    ; preds = %if.end16
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp18, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive22, i32 0, i32 0
  store i32* %call21, i32** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive24, i32 0, i32 0
  %19 = load i8*, i8** %coerce.dive25, align 8
  %coerce.dive26 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp17, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive26, i32 0, i32 0
  %20 = load i8*, i8** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp18, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive28, i32 0, i32 0
  %21 = load i32*, i32** %coerce.dive29, align 8
  %call31 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiSaIiEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPiEET_SB_SA_(%"class.thrust::detail::contiguous_storage.837"* %m_storage, i8* %19, i8* %20, i32* %21)
          to label %invoke.cont30 unwind label %lpad19

invoke.cont30:                                    ; preds = %invoke.cont20
  %coerce.dive32 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %coerce, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive32, i32 0, i32 0
  store i32* %call31, i32** %coerce.dive33, align 8
  br label %try.cont

lpad19:                                           ; preds = %invoke.cont20, %if.end16
  %22 = landingpad { i8*, i32 }
          catch i8* null
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad19
  %exn = load i8*, i8** %exn.slot, align 8
  %25 = call i8* @__cxa_begin_catch(i8* %exn) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.841"* %new_storage_end to i8*
  call void @llvm.lifetime.start(i64 8, i8* %26) #5
  %27 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %new_storage.addr, align 8
  %call36 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiSaIiEE5beginEv(%"class.thrust::detail::contiguous_storage.837"* %27)
          to label %invoke.cont35 unwind label %lpad34

invoke.cont35:                                    ; preds = %catch
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %new_storage_end, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive37, i32 0, i32 0
  store i32* %call36, i32** %coerce.dive38, align 8
  %28 = load i64, i64* %requested_size.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPiEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %new_storage_end, i64 %28)
          to label %invoke.cont40 unwind label %lpad39

invoke.cont40:                                    ; preds = %invoke.cont35
  %m_storage41 = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this4, i32 0, i32 0
  %29 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %new_storage.addr, align 8
  %call44 = invoke i32* @_ZN6thrust6detail18contiguous_storageIiSaIiEE5beginEv(%"class.thrust::detail::contiguous_storage.837"* %29)
          to label %invoke.cont43 unwind label %lpad39

invoke.cont43:                                    ; preds = %invoke.cont40
  %coerce.dive45 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp42, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive45, i32 0, i32 0
  store i32* %call44, i32** %coerce.dive46, align 8
  %30 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp47 to i8*
  %31 = bitcast %"class.thrust::detail::normal_iterator.841"* %new_storage_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 8, i32 8, i1 false)
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp42, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive48, i32 0, i32 0
  %32 = load i32*, i32** %coerce.dive49, align 8
  %coerce.dive50 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp47, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive50, i32 0, i32 0
  %33 = load i32*, i32** %coerce.dive51, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiSaIiEE7destroyENS0_15normal_iteratorIPiEES6_(%"class.thrust::detail::contiguous_storage.837"* %m_storage41, i32* %32, i32* %33)
          to label %invoke.cont52 unwind label %lpad39

invoke.cont52:                                    ; preds = %invoke.cont43
  %34 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %new_storage.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageIiSaIiEE10deallocateEv(%"class.thrust::detail::contiguous_storage.837"* %34)
          to label %invoke.cont53 unwind label %lpad39

invoke.cont53:                                    ; preds = %invoke.cont52
  invoke void @__cxa_rethrow() #15
          to label %unreachable unwind label %lpad39

lpad34:                                           ; preds = %catch
  %35 = landingpad { i8*, i32 }
          cleanup
  %36 = extractvalue { i8*, i32 } %35, 0
  store i8* %36, i8** %exn.slot, align 8
  %37 = extractvalue { i8*, i32 } %35, 1
  store i32 %37, i32* %ehselector.slot, align 4
  br label %ehcleanup55

lpad39:                                           ; preds = %invoke.cont53, %invoke.cont52, %invoke.cont43, %invoke.cont40, %invoke.cont35
  %38 = landingpad { i8*, i32 }
          cleanup
  %39 = extractvalue { i8*, i32 } %38, 0
  store i8* %39, i8** %exn.slot, align 8
  %40 = extractvalue { i8*, i32 } %38, 1
  store i32 %40, i32* %ehselector.slot, align 4
  %41 = bitcast %"class.thrust::detail::normal_iterator.841"* %new_storage_end to i8*
  call void @llvm.lifetime.end(i64 8, i8* %41) #5
  br label %ehcleanup55

ehcleanup55:                                      ; preds = %lpad39, %lpad34
  invoke void @__cxa_end_catch()
          to label %invoke.cont56 unwind label %terminate.lpad

invoke.cont56:                                    ; preds = %ehcleanup55
  br label %ehcleanup57

try.cont:                                         ; preds = %invoke.cont30
  %42 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %42) #5
  br label %return

return:                                           ; preds = %try.cont, %if.then
  ret void

ehcleanup57:                                      ; preds = %invoke.cont56, %cleanup.done
  %43 = bitcast i64* %allocated_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %43) #5
  br label %eh.resume

eh.resume:                                        ; preds = %ehcleanup57
  %exn58 = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn58, 0
  %lpad.val59 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val59

terminate.lpad:                                   ; preds = %ehcleanup55
  %44 = landingpad { i8*, i32 }
          catch i8* null
  %45 = extractvalue { i8*, i32 } %44, 0
  call void @__clang_call_terminate(i8* %45) #13
  unreachable

unreachable:                                      ; preds = %invoke.cont53, %invoke.cont14
  unreachable
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE8capacityEv(%"class.thrust::detail::vector_base.836"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIiSaIiEE4sizeEv(%"class.thrust::detail::contiguous_storage.837"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIiSaIiEE8max_sizeEv(%"class.thrust::detail::vector_base.836"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.836"*, align 8
  store %"class.thrust::detail::vector_base.836"* %this, %"class.thrust::detail::vector_base.836"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.836"*, %"class.thrust::detail::vector_base.836"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.836", %"class.thrust::detail::vector_base.836"* %this1, i32 0, i32 0
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageIiSaIiEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.837"* %m_storage)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail18contiguous_storageIiSaIiEE18uninitialized_copyINS0_15normal_iteratorIPKbEEEENS5_IPiEET_SB_SA_(%"class.thrust::detail::contiguous_storage.837"* %this, i8* %first.coerce, i8* %last.coerce, i32* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %from_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp7 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %result, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive4, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive5, align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this6 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to %"struct.thrust::execution_policy.88"*
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this6, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp7 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.841"* %result to %"class.thrust::iterator_adaptor.842"*
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %6)
  %7 = load i32*, i32** %call, align 8, !tbaa !1
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp7, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive10, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive11, align 8
  %call12 = call i32* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIiENS0_15normal_iteratorIPKbEEPiEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"class.std::allocator.838"* dereferenceable(1) %m_allocator, i8* %8, i8* %9, i32* %7)
  call void @_ZN6thrust6detail15normal_iteratorIPiEC2ES2_(%"class.thrust::detail::normal_iterator.841"* %retval, i32* %call12)
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  %coerce.dive13 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %retval, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive13, i32 0, i32 0
  %11 = load i32*, i32** %coerce.dive14, align 8
  ret i32* %11
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageIiSaIiEE7destroyENS0_15normal_iteratorIPiEES6_(%"class.thrust::detail::contiguous_storage.837"* %this, i32* %first.coerce, i32* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive2, i32 0, i32 0
  store i32* %last.coerce, i32** %coerce.dive3, align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this4, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.841"* %first to %"class.thrust::iterator_adaptor.842"*
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %last to %"class.thrust::iterator_facade.843"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %first to %"class.thrust::iterator_facade.843"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.843"* dereferenceable(1) %2, %"class.thrust::iterator_facade.843"* dereferenceable(1) %3)
  call void @_ZN6thrust6detail13destroy_rangeISaIiEPilEEvRT_T0_T1_(%"class.std::allocator.838"* dereferenceable(1) %m_allocator, i32* %1, i64 %call5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageIiSaIiEE8max_sizeEv(%"class.thrust::detail::contiguous_storage.837"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.837"*, align 8
  store %"class.thrust::detail::contiguous_storage.837"* %this, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.837"*, %"class.thrust::detail::contiguous_storage.837"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.837", %"class.thrust::detail::contiguous_storage.837"* %this1, i32 0, i32 0
  %call = call i64 @_ZN6thrust6detail16allocator_traitsISaIiEE8max_sizeERKS2_(%"class.std::allocator.838"* dereferenceable(1) %m_allocator)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail16allocator_traitsISaIiEE8max_sizeERKS2_(%"class.std::allocator.838"* dereferenceable(1) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %call = call i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIiEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_(%"class.std::allocator.838"* dereferenceable(1) %0)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZN6thrust6detail23allocator_traits_detail8max_sizeISaIiEEENS0_10disable_ifIXsr19has_member_max_sizeIT_EE5valueENS0_16allocator_traitsIS5_E9size_typeEE4typeERKS5_(%"class.std::allocator.838"* dereferenceable(1) %a) #1 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  ret i64 -1
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIiENS0_15normal_iteratorIPKbEEPiEET2_RNS_16execution_policyIT_EERT0_T1_SJ_SC_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.std::allocator.838"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i32* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %result.addr = alloca i32*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i32* %result, i32** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive8, align 8
  %call = call i32* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIiENS0_15normal_iteratorIPKbEEPiEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"class.std::allocator.838"* dereferenceable(1) %1, i8* %7, i8* %8, i32* %6)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system3cpp6detail3tagESaIiENS0_15normal_iteratorIPKbEEPiEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESG_E4typeERNS_16execution_policyIT_EERSE_T1_SQ_SG_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"class.std::allocator.838"* dereferenceable(1) %a, i8* %first.coerce, i8* %last.coerce, i32* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %result.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i32* %result, i32** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %1 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaIiEE3getERS2_(%"class.std::allocator.838"* dereferenceable(1) %1)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %9 = load i8*, i8** %coerce.dive8, align 8
  %call = call i32* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPiEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, i8* %8, i8* %9, i32* %7)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6detail15two_system_copyINS_6system3cpp6detail3tagES5_NS0_15normal_iteratorIPKbEEPiEET2_RKNS_16execution_policyIT_EERKNSC_IT0_EET1_SL_SB_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2, i8* %first.coerce, i8* %last.coerce, i32* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %result.addr = alloca i32*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::execution_policy.88"* %system1, %"struct.thrust::execution_policy.88"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  store i32* %result, i32** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call4 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call4 to %"struct.thrust::execution_policy.88"*
  %3 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.88"* %3 to %"struct.thrust::detail::execution_policy_base.85"*
  %call5 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4)
  %call6 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call5)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call6 to %"struct.thrust::execution_policy.88"*
  %call7 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call7 to %"struct.thrust::detail::execution_policy_base.85"*
  %7 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp8 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive9, i32 0, i32 0
  %12 = load i8*, i8** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp8, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive11, i32 0, i32 0
  %13 = load i8*, i8** %coerce.dive12, align 8
  %call13 = call i32* @_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPiEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6, i8* %12, i8* %13, i32* %11)
  ret i32* %call13
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust4copyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPiEET1_RKNS5_21execution_policy_baseIT_EET0_SH_SB_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i8* %first.coerce, i8* %last.coerce, i32* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %result.addr = alloca i32*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i32* %result, i32** %result.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call4 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call4 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp5 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %8 = load i8*, i8** %coerce.dive9, align 8
  %call10 = call i32* @_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPiEET1_RNS2_16execution_policyIT_EET0_SI_SD_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, i8* %7, i8* %8, i32* %6)
  ret i32* %call10
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail10sequential4copyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPKbEEPiEET1_RNS2_16execution_policyIT_EET0_SI_SD_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i8* %first.coerce, i8* %last.coerce, i32* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %result.addr = alloca i32*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i32* %result, i32** %result.addr, align 8, !tbaa !1
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive6, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive8, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive9, align 8
  %call = call i32* @_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPiEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE(i8* %6, i8* %7, i32* %5)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail10sequential11copy_detail4copyINS_6detail15normal_iteratorIPKbEEPiEET0_T_SC_SB_NS5_17integral_constantIbLb0EEE(i8* %first.coerce, i8* %last.coerce, i32* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %0 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %result.addr = alloca i32*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store i32* %result, i32** %result.addr, align 8, !tbaa !1
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp4 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive5, i32 0, i32 0
  %6 = load i8*, i8** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp4, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive7, i32 0, i32 0
  %7 = load i8*, i8** %coerce.dive8, align 8
  %call = call i32* @_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPiEET0_T_SB_SA_(i8* %6, i8* %7, i32* %5)
  ret i32* %call
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail10sequential12general_copyINS_6detail15normal_iteratorIPKbEEPiEET0_T_SB_SA_(i8* %first.coerce, i8* %last.coerce, i32* %result) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %result.addr = alloca i32*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %first.coerce, i8** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive2, i32 0, i32 0
  store i8* %last.coerce, i8** %coerce.dive3, align 8
  store i32* %result, i32** %result.addr, align 8, !tbaa !1
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to %"class.thrust::iterator_facade.196"*
  %1 = bitcast %"class.thrust::detail::normal_iterator.194"* %last to %"class.thrust::iterator_facade.196"*
  %call = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lS5_bS9_SA_SB_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSC_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.196"* dereferenceable(1) %0, %"class.thrust::iterator_facade.196"* dereferenceable(1) %1)
  br i1 %call, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %2 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %3 = bitcast %"class.thrust::detail::normal_iterator.194"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive4, i32 0, i32 0
  %5 = load i8*, i8** %coerce.dive5, align 8
  call void @_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPiNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_(i32* %2, i8* %5)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %6 = bitcast %"class.thrust::detail::normal_iterator.194"* %first to %"class.thrust::iterator_facade.196"*
  %call6 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.194"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEppEv(%"class.thrust::iterator_facade.196"* %6)
  %7 = load i32*, i32** %result.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds i32, i32* %7, i32 1
  store i32* %incdec.ptr, i32** %result.addr, align 8, !tbaa !1
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %8 = load i32*, i32** %result.addr, align 8, !tbaa !1
  ret i32* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential19general_copy_detail11iter_assignIPiNS_6detail15normal_iteratorIPKbEEEENS6_9enable_ifIXsr23reference_is_assignableIT0_T_EE5valueEvE4typeESD_SC_(i32* %dst, i8* %src.coerce) #8 comdat {
entry:
  %src = alloca %"class.thrust::detail::normal_iterator.194", align 8
  %dst.addr = alloca i32*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.194", %"class.thrust::detail::normal_iterator.194"* %src, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.195", %"class.thrust::iterator_adaptor.195"* %coerce.dive, i32 0, i32 0
  store i8* %src.coerce, i8** %coerce.dive1, align 8
  store i32* %dst, i32** %dst.addr, align 8, !tbaa !1
  %0 = bitcast %"class.thrust::detail::normal_iterator.194"* %src to %"class.thrust::iterator_facade.196"*
  %call = call dereferenceable(1) i8* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKbEEbNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS3_lEdeEv(%"class.thrust::iterator_facade.196"* %0)
  %1 = load i8, i8* %call, align 1, !tbaa !75, !range !77
  %tobool = trunc i8 %1 to i1
  %conv = zext i1 %tobool to i32
  %2 = load i32*, i32** %dst.addr, align 8, !tbaa !1
  store i32 %conv, i32* %2, align 4, !tbaa !11
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeISaIiEPilEEvRT_T0_T1_(%"class.std::allocator.838"* dereferenceable(1) %a, i32* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.838"*, align 8
  %p.addr = alloca i32*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.838"* %a, %"class.std::allocator.838"** %a.addr, align 8, !tbaa !7
  store i32* %p, i32** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.838"*, %"class.std::allocator.838"** %a.addr, align 8
  %1 = load i32*, i32** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIiEPilEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.838"* dereferenceable(1) %0, i32* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSC_IT5_T6_T7_T8_T9_T10_EEE4typeERKSJ_RKSQ_(%"class.thrust::iterator_facade.843"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.843"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  store %"class.thrust::iterator_facade.843"* %lhs, %"class.thrust::iterator_facade.843"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.843"* %rhs, %"class.thrust::iterator_facade.843"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.843"* %0 to %"class.thrust::detail::normal_iterator.841"*
  %2 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.843"* %2 to %"class.thrust::detail::normal_iterator.841"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPiEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaIiEPilEENS1_29enable_if_destroy_range_case3IT_T0_E4typeERS6_S7_T1_(%"class.std::allocator.838"* dereferenceable(1), i32*, i64) #1 comdat {
entry:
  %.addr = alloca %"class.std::allocator.838"*, align 8
  %.addr1 = alloca i32*, align 8
  %.addr2 = alloca i64, align 8
  store %"class.std::allocator.838"* %0, %"class.std::allocator.838"** %.addr, align 8, !tbaa !7
  store i32* %1, i32** %.addr1, align 8, !tbaa !1
  store i64 %2, i64* %.addr2, align 8, !tbaa !13
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPiEES5_EENS2_20distance_from_resultIT_T0_E4typeERKS7_RKS8_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.841"* %f1, %"class.thrust::detail::normal_iterator.841"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %f2, %"class.thrust::detail::normal_iterator.841"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPiEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPiEES5_EENT_15difference_typeERKS6_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.841"*, align 8
  store %"class.thrust::detail::normal_iterator.841"* %f1, %"class.thrust::detail::normal_iterator.841"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.841"* %f2, %"class.thrust::detail::normal_iterator.841"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %1 to %"class.thrust::iterator_adaptor.842"*
  %3 = load %"class.thrust::detail::normal_iterator.841"*, %"class.thrust::detail::normal_iterator.841"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.841"* %3 to %"class.thrust::iterator_adaptor.842"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.842"* %2, %"class.thrust::iterator_adaptor.842"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E11distance_toIS4_S3_S5_S5_S5_S5_S5_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.842"*, align 8
  store %"class.thrust::iterator_adaptor.842"* %this, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.842"* %y, %"class.thrust::iterator_adaptor.842"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.842"*, %"class.thrust::iterator_adaptor.842"** %y.addr, align 8
  %call = call dereferenceable(8) i32** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_E4baseEv(%"class.thrust::iterator_adaptor.842"* %0)
  %1 = load i32*, i32** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %this1, i32 0, i32 0
  %2 = load i32*, i32** %m_iterator, align 8, !tbaa !478
  %sub.ptr.lhs.cast = ptrtoint i32* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i32* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 4
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6system3cpp6detail3tagENS_6detail15normal_iteratorIPiEENS6_IPNS_4pairIiiEEEESC_SA_NS_8equal_toIiEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SM_T1_SG_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i32* %first1.coerce, i32* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, i64 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %init = alloca %"struct.thrust::pair.82", align 4
  %binary_pred = alloca %"struct.thrust::equal_to.877", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %agg.tmp13 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp14 = alloca %"struct.thrust::equal_to.877", align 1
  %agg.tmp15 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive2, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %0 = bitcast %"struct.thrust::pair.82"* %init to i64*
  store i64 %init.coerce, i64* %0, align 4
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call9 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call9 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.841"* %agg.tmp10 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.841"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.850"* %agg.tmp11 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.850"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.850"* %agg.tmp12 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::pair.82"* %agg.tmp13 to i8*
  %12 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 4, i1 false), !tbaa.struct !471
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive16, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %agg.tmp10, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive18, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp11, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive20, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %agg.tmp12, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive22, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %17 = bitcast %"struct.thrust::pair.82"* %agg.tmp13 to i64*
  %18 = load i64, i64* %17, align 4
  %call24 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPiEENS8_IPNS_4pairIiiEEEESE_SC_NS_8equal_toIiEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %2, i32* %13, i32* %14, %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"* %16, i64 %18)
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call24, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive27, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive28, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential21exclusive_scan_by_keyINS0_3cpp6detail3tagENS_6detail15normal_iteratorIPiEENS8_IPNS_4pairIiiEEEESE_SC_NS_8equal_toIiEE9add_pairsEET2_RNS2_16execution_policyIT_EET0_SN_T1_SI_T3_T4_T5_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), i32* %first1.coerce, i32* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, i64 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.841", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %init = alloca %"struct.thrust::pair.82", align 4
  %binary_pred = alloca %"struct.thrust::equal_to.877", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %temp_key = alloca i32, align 4
  %temp_value = alloca %"struct.thrust::pair.82", align 4
  %next = alloca %"struct.thrust::pair.82", align 4
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %key = alloca i32, align 4
  %ref.tmp22 = alloca %"struct.thrust::pair.82", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.841", %"class.thrust::detail::normal_iterator.841"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.842", %"class.thrust::iterator_adaptor.842"* %coerce.dive2, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %result, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %1 = bitcast %"struct.thrust::pair.82"* %init to i64*
  store i64 %init.coerce, i64* %1, align 4
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %2 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to %"class.thrust::iterator_facade.843"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.841"* %last1 to %"class.thrust::iterator_facade.843"*
  %call = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.843"* dereferenceable(1) %2, %"class.thrust::iterator_facade.843"* dereferenceable(1) %3)
  br i1 %call, label %if.then, label %if.end27

if.then:                                          ; preds = %entry
  %4 = bitcast i32* %temp_key to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to %"class.thrust::iterator_facade.843"*
  %call9 = call dereferenceable(4) i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEdeEv(%"class.thrust::iterator_facade.843"* %5)
  %6 = load i32, i32* %call9, align 4, !tbaa !11
  store i32 %6, i32* %temp_key, align 4, !tbaa !11
  %7 = bitcast %"struct.thrust::pair.82"* %temp_value to i8*
  call void @llvm.lifetime.start(i64 8, i8* %7) #5
  %8 = bitcast %"class.thrust::detail::normal_iterator.850"* %first2 to %"class.thrust::iterator_facade.852"*
  %call10 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.852"* %8)
  %9 = bitcast %"struct.thrust::pair.82"* %temp_value to i8*
  %10 = bitcast %"struct.thrust::pair.82"* %call10 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 4, i1 false), !tbaa.struct !471
  %11 = bitcast %"struct.thrust::pair.82"* %next to i8*
  call void @llvm.lifetime.start(i64 8, i8* %11) #5
  %12 = bitcast %"struct.thrust::pair.82"* %next to i8*
  %13 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 4, i1 false), !tbaa.struct !471
  %14 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to %"class.thrust::iterator_facade.852"*
  %call11 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.852"* %14)
  %15 = bitcast %"struct.thrust::pair.82"* %call11 to i8*
  %16 = bitcast %"struct.thrust::pair.82"* %next to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %16, i64 8, i32 4, i1 false), !tbaa.struct !471
  %call12 = call i64 @_ZN9add_pairsclIN6thrust4pairIiiEES3_EET_RKS4_RKT0_(%struct.add_pairs* %binary_op, %"struct.thrust::pair.82"* dereferenceable(8) %next, %"struct.thrust::pair.82"* dereferenceable(8) %temp_value)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call12, i64* %17, align 4
  %18 = bitcast %"struct.thrust::pair.82"* %next to i8*
  %19 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %19, i64 8, i32 4, i1 false), !tbaa.struct !471
  %20 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to %"class.thrust::iterator_facade.843"*
  %call13 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEppEv(%"class.thrust::iterator_facade.843"* %20)
  %21 = bitcast %"class.thrust::detail::normal_iterator.850"* %first2 to %"class.thrust::iterator_facade.852"*
  %call14 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.852"* %21)
  %22 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to %"class.thrust::iterator_facade.852"*
  %call15 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.852"* %22)
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then
  %23 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to %"class.thrust::iterator_facade.843"*
  %24 = bitcast %"class.thrust::detail::normal_iterator.841"* %last1 to %"class.thrust::iterator_facade.843"*
  %call16 = call zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.843"* dereferenceable(1) %23, %"class.thrust::iterator_facade.843"* dereferenceable(1) %24)
  br i1 %call16, label %for.body, label %for.end

for.body:                                         ; preds = %for.cond
  %25 = bitcast i32* %key to i8*
  call void @llvm.lifetime.start(i64 4, i8* %25) #5
  %26 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to %"class.thrust::iterator_facade.843"*
  %call17 = call dereferenceable(4) i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEdeEv(%"class.thrust::iterator_facade.843"* %26)
  %27 = load i32, i32* %call17, align 4, !tbaa !11
  store i32 %27, i32* %key, align 4, !tbaa !11
  %28 = bitcast %"class.thrust::detail::normal_iterator.850"* %first2 to %"class.thrust::iterator_facade.852"*
  %call18 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.852"* %28)
  %29 = bitcast %"struct.thrust::pair.82"* %temp_value to i8*
  %30 = bitcast %"struct.thrust::pair.82"* %call18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 4, i1 false), !tbaa.struct !471
  %call19 = call zeroext i1 @_ZNK6thrust8equal_toIiEclERKiS3_(%"struct.thrust::equal_to.877"* %binary_pred, i32* dereferenceable(4) %temp_key, i32* dereferenceable(4) %key)
  br i1 %call19, label %if.end, label %if.then20

if.then20:                                        ; preds = %for.body
  %31 = bitcast %"struct.thrust::pair.82"* %next to i8*
  %32 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 8, i32 4, i1 false), !tbaa.struct !471
  br label %if.end

if.end:                                           ; preds = %if.then20, %for.body
  %33 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to %"class.thrust::iterator_facade.852"*
  %call21 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEdeEv(%"class.thrust::iterator_facade.852"* %33)
  %34 = bitcast %"struct.thrust::pair.82"* %call21 to i8*
  %35 = bitcast %"struct.thrust::pair.82"* %next to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %34, i8* %35, i64 8, i32 4, i1 false), !tbaa.struct !471
  %call23 = call i64 @_ZN9add_pairsclIN6thrust4pairIiiEES3_EET_RKS4_RKT0_(%struct.add_pairs* %binary_op, %"struct.thrust::pair.82"* dereferenceable(8) %next, %"struct.thrust::pair.82"* dereferenceable(8) %temp_value)
  %36 = bitcast %"struct.thrust::pair.82"* %ref.tmp22 to i64*
  store i64 %call23, i64* %36, align 4
  %37 = bitcast %"struct.thrust::pair.82"* %next to i8*
  %38 = bitcast %"struct.thrust::pair.82"* %ref.tmp22 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %37, i8* %38, i64 8, i32 4, i1 false), !tbaa.struct !471
  %39 = load i32, i32* %key, align 4, !tbaa !11
  store i32 %39, i32* %temp_key, align 4, !tbaa !11
  %40 = bitcast i32* %key to i8*
  call void @llvm.lifetime.end(i64 4, i8* %40) #5
  br label %for.inc

for.inc:                                          ; preds = %if.end
  %41 = bitcast %"class.thrust::detail::normal_iterator.841"* %first1 to %"class.thrust::iterator_facade.843"*
  %call24 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.841"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilEppEv(%"class.thrust::iterator_facade.843"* %41)
  %42 = bitcast %"class.thrust::detail::normal_iterator.850"* %first2 to %"class.thrust::iterator_facade.852"*
  %call25 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.852"* %42)
  %43 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to %"class.thrust::iterator_facade.852"*
  %call26 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEppEv(%"class.thrust::iterator_facade.852"* %43)
  br label %for.cond

for.end:                                          ; preds = %for.cond
  %44 = bitcast %"struct.thrust::pair.82"* %next to i8*
  call void @llvm.lifetime.end(i64 8, i8* %44) #5
  %45 = bitcast %"struct.thrust::pair.82"* %temp_value to i8*
  call void @llvm.lifetime.end(i64 8, i8* %45) #5
  %46 = bitcast i32* %temp_key to i8*
  call void @llvm.lifetime.end(i64 4, i8* %46) #5
  br label %if.end27

if.end27:                                         ; preds = %for.end, %entry
  %47 = bitcast %"class.thrust::detail::normal_iterator.850"* %retval to i8*
  %48 = bitcast %"class.thrust::detail::normal_iterator.850"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %47, i8* %48, i64 8, i32 8, i1 false)
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive28, i32 0, i32 0
  %49 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive29, align 8
  ret %"struct.thrust::pair.82"* %49
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_6detail15normal_iteratorIPiEEiNS_6system3cpp6detail3tagENS_27random_access_traversal_tagERilS4_iS8_S9_SA_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSB_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.843"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.843"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.843"*, align 8
  store %"class.thrust::iterator_facade.843"* %lhs, %"class.thrust::iterator_facade.843"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.843"* %rhs, %"class.thrust::iterator_facade.843"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.843"* %0 to %"class.thrust::detail::normal_iterator.841"*
  %2 = load %"class.thrust::iterator_facade.843"*, %"class.thrust::iterator_facade.843"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.843"* %2 to %"class.thrust::detail::normal_iterator.841"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPiEES5_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.841"* dereferenceable(8) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN9add_pairsclIN6thrust4pairIiiEES3_EET_RKS4_RKT0_(%struct.add_pairs* %this, %"struct.thrust::pair.82"* dereferenceable(8) %x, %"struct.thrust::pair.82"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %struct.add_pairs*, align 8
  %x.addr = alloca %"struct.thrust::pair.82"*, align 8
  %y.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %struct.add_pairs* %this, %struct.add_pairs** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %x, %"struct.thrust::pair.82"** %x.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %y, %"struct.thrust::pair.82"** %y.addr, align 8, !tbaa !7
  %this1 = load %struct.add_pairs*, %struct.add_pairs** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 0, i32 0
  %1 = load i32, i32* %first, align 4, !tbaa !24
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %y.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %2, i32 0, i32 0
  %3 = load i32, i32* %first2, align 4, !tbaa !24
  %add = add nsw i32 %1, %3
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %4, i32 0, i32 1
  %5 = load i32, i32* %second, align 4, !tbaa !28
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %y.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %6, i32 0, i32 1
  %7 = load i32, i32* %second3, align 4, !tbaa !28
  %add4 = add nsw i32 %5, %7
  %call = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %add, i32 %add4)
  %8 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %8, align 4
  %9 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %10 = load i64, i64* %9, align 4
  ret i64 %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust8equal_toIiEclERKiS3_(%"struct.thrust::equal_to.877"* %this, i32* dereferenceable(4) %lhs, i32* dereferenceable(4) %rhs) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::equal_to.877"*, align 8
  %lhs.addr = alloca i32*, align 8
  %rhs.addr = alloca i32*, align 8
  store %"struct.thrust::equal_to.877"* %this, %"struct.thrust::equal_to.877"** %this.addr, align 8, !tbaa !1
  store i32* %lhs, i32** %lhs.addr, align 8, !tbaa !7
  store i32* %rhs, i32** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::equal_to.877"*, %"struct.thrust::equal_to.877"** %this.addr, align 8
  %0 = load i32*, i32** %lhs.addr, align 8
  %1 = load i32, i32* %0, align 4, !tbaa !11
  %2 = load i32*, i32** %rhs.addr, align 8
  %3 = load i32, i32* %2, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, %3
  ret i1 %cmp
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust21exclusive_scan_by_keyINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS6_INS7_INS_4pairIiiEEEEEESD_SB_NS_8equal_toIiEE9add_pairsEET2_RKNS5_21execution_policy_baseIT_EET0_SN_T1_SH_T3_T4_T5_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i32* %first1.coerce, i32* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, i64 %init.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %init = alloca %"struct.thrust::pair.82", align 4
  %binary_pred = alloca %"struct.thrust::equal_to.877", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp23 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp24 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp25 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp26 = alloca %"struct.thrust::equal_to.877", align 1
  %agg.tmp27 = alloca %struct.add_pairs, align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair.82"* %init to i64*
  store i64 %init.coerce, i64* %0, align 4
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call21 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call21 to %"struct.thrust::execution_policy.120"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.858"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp22 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.858"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp23 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.870"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp24 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::pair.82"* %agg.tmp25 to i8*
  %12 = bitcast %"struct.thrust::pair.82"* %init to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 4, i1 false), !tbaa.struct !471
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive31, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp22, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive36, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp23, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive41, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive42, align 8
  %coerce.dive43 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp24, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive46, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive47, align 8
  %17 = bitcast %"struct.thrust::pair.82"* %agg.tmp25 to i64*
  %18 = load i64, i64* %17, align 4
  %call48 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS8_INS9_INS_4pairIiiEEEEEESF_SD_NS_8equal_toIiEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i32* %13, i32* %14, %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"* %16, i64 %18)
  %coerce.dive49 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive50, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive51, i32 0, i32 0
  %coerce.dive53 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive52, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call48, %"struct.thrust::pair.82"** %coerce.dive53, align 8
  %coerce.dive54 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive56, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive57, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive58, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic21exclusive_scan_by_keyINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS8_INS9_INS_4pairIiiEEEEEESF_SD_NS_8equal_toIiEE9add_pairsEET2_RNS_16execution_policyIT_EET0_SO_T1_SJ_T3_T4_T5_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i32* %first1.coerce, i32* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, i64 %init.coerce) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %init = alloca %"struct.thrust::pair.82", align 4
  %binary_pred = alloca %"struct.thrust::equal_to.877", align 1
  %binary_op = alloca %struct.add_pairs, align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n = alloca i64, align 8
  %last2 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %flags = alloca %"class.thrust::detail::temporary_array", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce = alloca %"class.thrust::reference.205", align 8
  %ref.tmp = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp33 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp41 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp49 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %ref.tmp50 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp63 = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %coerce86 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %temp = alloca %"class.thrust::detail::temporary_array.954", align 8
  %agg.tmp92 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp93 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp102 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %ref.tmp103 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp116 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %ref.tmp117 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %agg.tmp130 = alloca %"struct.thrust::negate", align 1
  %coerce151 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %coerce158 = alloca %"class.thrust::reference.963", align 8
  %agg.tmp164 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp165 = alloca %"class.thrust::tuple.970", align 8
  %ref.tmp166 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %ref.tmp173 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp187 = alloca %"class.thrust::zip_iterator.968", align 8
  %ref.tmp188 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp189 = alloca %"class.thrust::tuple.970", align 8
  %ref.tmp190 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %ref.tmp197 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp215 = alloca %"class.thrust::zip_iterator.964", align 8
  %agg.tmp216 = alloca %"class.thrust::tuple.966", align 8
  %ref.tmp217 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp231 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %agg.tmp232 = alloca %struct.add_pairs, align 1
  %coerce236 = alloca %"class.thrust::zip_iterator.964", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive18, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %0 = bitcast %"struct.thrust::pair.82"* %init to i64*
  store i64 %init.coerce, i64* %0, align 4
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %1 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %last1 to %"class.thrust::iterator_facade.860"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.858"* %first1 to %"class.thrust::iterator_facade.860"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS5_iS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.860"* dereferenceable(1) %2, %"class.thrust::iterator_facade.860"* dereferenceable(1) %3)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %4 = load i64, i64* %n, align 8, !tbaa !13
  %cmp = icmp ne i64 %4, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %5 = bitcast %"class.thrust::detail::normal_iterator.870"* %last2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %5) #5
  %6 = bitcast %"class.thrust::detail::normal_iterator.870"* %first2 to %"class.thrust::iterator_facade.872"*
  %7 = load i64, i64* %n, align 8, !tbaa !13
  %call21 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.872"* dereferenceable(1) %6, i64 %7)
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %last2, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive25, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call21, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %8 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.start(i64 24, i8* %8) #5
  %9 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %10 = load i64, i64* %n, align 8, !tbaa !13
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS5_EEm(%"class.thrust::detail::temporary_array"* %flags, %"struct.thrust::execution_policy.120"* dereferenceable(1) %9, i64 %10)
  %11 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call27 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.198"* %11, i64 0)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  %coerce.dive28 = getelementptr inbounds %"class.thrust::reference.205", %"class.thrust::reference.205"* %coerce, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive29, i32 0, i32 0
  store i32* %call27, i32** %coerce.dive30, align 8
  store i32 1, i32* %ref.tmp, align 4, !tbaa !11
  %call32 = invoke dereferenceable(8) %"class.thrust::reference.205"* @_ZN6thrust9referenceIjNS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EES6_EaSERKj(%"class.thrust::reference.205"* %coerce, i32* dereferenceable(4) %ref.tmp)
          to label %invoke.cont31 unwind label %lpad

invoke.cont31:                                    ; preds = %invoke.cont
  %12 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %13 = bitcast %"struct.thrust::execution_policy.120"* %12 to %"struct.thrust::detail::execution_policy_base.121"*
  %14 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.858"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.858"* %last1 to %"class.thrust::iterator_facade.860"*
  %call35 = invoke i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEmiEl(%"class.thrust::iterator_facade.860"* %16, i64 1)
          to label %invoke.cont34 unwind label %lpad

invoke.cont34:                                    ; preds = %invoke.cont31
  %coerce.dive36 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp33, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive39, i32 0, i32 0
  store i32* %call35, i32** %coerce.dive40, align 8
  %17 = bitcast %"class.thrust::detail::normal_iterator.858"* %first1 to %"class.thrust::iterator_facade.860"*
  %call43 = invoke i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.860"* dereferenceable(1) %17, i64 1)
          to label %invoke.cont42 unwind label %lpad

invoke.cont42:                                    ; preds = %invoke.cont34
  %coerce.dive44 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp41, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive47, i32 0, i32 0
  store i32* %call43, i32** %coerce.dive48, align 8
  %18 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call52 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %18)
          to label %invoke.cont51 unwind label %lpad

invoke.cont51:                                    ; preds = %invoke.cont42
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp50, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive55, i32 0, i32 0
  store i32* %call52, i32** %coerce.dive56, align 8
  %19 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp50 to %"class.thrust::iterator_facade.201"*
  %call58 = invoke i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %19, i64 1)
          to label %invoke.cont57 unwind label %lpad

invoke.cont57:                                    ; preds = %invoke.cont51
  %coerce.dive59 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp49, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive60, i32 0, i32 0
  %coerce.dive62 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive61, i32 0, i32 0
  store i32* %call58, i32** %coerce.dive62, align 8
  invoke void @_ZN6thrust6detail4not2INS_8equal_toIiEEEENS0_13binary_negateIT_EERKS5_(%"struct.thrust::equal_to.877"* dereferenceable(1) %binary_pred)
          to label %invoke.cont64 unwind label %lpad

invoke.cont64:                                    ; preds = %invoke.cont57
  %coerce.dive65 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp, i32 0, i32 0
  %coerce.dive66 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive65, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive66, i32 0, i32 0
  %coerce.dive68 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive67, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive68, i32 0, i32 0
  %20 = load i32*, i32** %coerce.dive69, align 8
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp33, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive71, i32 0, i32 0
  %coerce.dive73 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive72, i32 0, i32 0
  %coerce.dive74 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive73, i32 0, i32 0
  %21 = load i32*, i32** %coerce.dive74, align 8
  %coerce.dive75 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp41, i32 0, i32 0
  %coerce.dive76 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive75, i32 0, i32 0
  %coerce.dive77 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive76, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive77, i32 0, i32 0
  %coerce.dive79 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive78, i32 0, i32 0
  %22 = load i32*, i32** %coerce.dive79, align 8
  %coerce.dive80 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp49, i32 0, i32 0
  %coerce.dive81 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive80, i32 0, i32 0
  %coerce.dive82 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive81, i32 0, i32 0
  %coerce.dive83 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive82, i32 0, i32 0
  %23 = load i32*, i32** %coerce.dive83, align 8
  %call85 = invoke i32* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIiEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %13, i32* %20, i32* %21, i32* %22, i32* %23)
          to label %invoke.cont84 unwind label %lpad

invoke.cont84:                                    ; preds = %invoke.cont64
  %coerce.dive87 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %coerce86, i32 0, i32 0
  %coerce.dive88 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive87, i32 0, i32 0
  %coerce.dive89 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive88, i32 0, i32 0
  %coerce.dive90 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive89, i32 0, i32 0
  store i32* %call85, i32** %coerce.dive90, align 8
  %24 = bitcast %"class.thrust::detail::temporary_array.954"* %temp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %24) #5
  %25 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %26 = load i64, i64* %n, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm(%"class.thrust::detail::temporary_array.954"* %temp, %"struct.thrust::execution_policy.120"* dereferenceable(1) %25, i64 %26)
          to label %invoke.cont91 unwind label %lpad

invoke.cont91:                                    ; preds = %invoke.cont84
  %27 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %28 = bitcast %"struct.thrust::execution_policy.120"* %27 to %"struct.thrust::detail::execution_policy_base.121"*
  %29 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp92 to i8*
  %30 = bitcast %"class.thrust::detail::normal_iterator.870"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"class.thrust::detail::normal_iterator.870"* %last2 to %"class.thrust::iterator_facade.872"*
  %call96 = invoke %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl(%"class.thrust::iterator_facade.872"* %31, i64 1)
          to label %invoke.cont95 unwind label %lpad94

invoke.cont95:                                    ; preds = %invoke.cont91
  %coerce.dive97 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp93, i32 0, i32 0
  %coerce.dive98 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive97, i32 0, i32 0
  %coerce.dive99 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive98, i32 0, i32 0
  %coerce.dive100 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive99, i32 0, i32 0
  %coerce.dive101 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive100, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call96, %"struct.thrust::pair.82"** %coerce.dive101, align 8
  %32 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call105 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %32)
          to label %invoke.cont104 unwind label %lpad94

invoke.cont104:                                   ; preds = %invoke.cont95
  %coerce.dive106 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp103, i32 0, i32 0
  %coerce.dive107 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive106, i32 0, i32 0
  %coerce.dive108 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive107, i32 0, i32 0
  %coerce.dive109 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive108, i32 0, i32 0
  store i32* %call105, i32** %coerce.dive109, align 8
  %33 = bitcast %"class.thrust::detail::normal_iterator.199"* %ref.tmp103 to %"class.thrust::iterator_facade.201"*
  %call111 = invoke i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEEjS7_NS_27random_access_traversal_tagENS_9referenceIjS9_S8_EElEET_RKNS_15iterator_facadeISE_T0_T1_T2_T3_T4_EENSE_15difference_typeE(%"class.thrust::iterator_facade.201"* dereferenceable(1) %33, i64 1)
          to label %invoke.cont110 unwind label %lpad94

invoke.cont110:                                   ; preds = %invoke.cont104
  %coerce.dive112 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp102, i32 0, i32 0
  %coerce.dive113 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive112, i32 0, i32 0
  %coerce.dive114 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive113, i32 0, i32 0
  %coerce.dive115 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive114, i32 0, i32 0
  store i32* %call111, i32** %coerce.dive115, align 8
  %34 = bitcast %"class.thrust::detail::temporary_array.954"* %temp to %"class.thrust::detail::contiguous_storage.955"*
  %call119 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.955"* %34)
          to label %invoke.cont118 unwind label %lpad94

invoke.cont118:                                   ; preds = %invoke.cont110
  %coerce.dive120 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %ref.tmp117, i32 0, i32 0
  %coerce.dive121 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive120, i32 0, i32 0
  %coerce.dive122 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive121, i32 0, i32 0
  %coerce.dive123 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive122, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call119, %"struct.thrust::pair.82"** %coerce.dive123, align 8
  %35 = bitcast %"class.thrust::detail::normal_iterator.960"* %ref.tmp117 to %"class.thrust::iterator_facade.962"*
  %call125 = invoke %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.962"* dereferenceable(1) %35, i64 1)
          to label %invoke.cont124 unwind label %lpad94

invoke.cont124:                                   ; preds = %invoke.cont118
  %coerce.dive126 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp116, i32 0, i32 0
  %coerce.dive127 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive126, i32 0, i32 0
  %coerce.dive128 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive127, i32 0, i32 0
  %coerce.dive129 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive128, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call125, %"struct.thrust::pair.82"** %coerce.dive129, align 8
  %coerce.dive131 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp92, i32 0, i32 0
  %coerce.dive132 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive131, i32 0, i32 0
  %coerce.dive133 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive132, i32 0, i32 0
  %coerce.dive134 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive133, i32 0, i32 0
  %coerce.dive135 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive134, i32 0, i32 0
  %36 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive135, align 8
  %coerce.dive136 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp93, i32 0, i32 0
  %coerce.dive137 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive136, i32 0, i32 0
  %coerce.dive138 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive137, i32 0, i32 0
  %coerce.dive139 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive138, i32 0, i32 0
  %coerce.dive140 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive139, i32 0, i32 0
  %37 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive140, align 8
  %coerce.dive141 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp102, i32 0, i32 0
  %coerce.dive142 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive141, i32 0, i32 0
  %coerce.dive143 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive142, i32 0, i32 0
  %coerce.dive144 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive143, i32 0, i32 0
  %38 = load i32*, i32** %coerce.dive144, align 8
  %coerce.dive145 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp116, i32 0, i32 0
  %coerce.dive146 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive145, i32 0, i32 0
  %coerce.dive147 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive146, i32 0, i32 0
  %coerce.dive148 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive147, i32 0, i32 0
  %39 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive148, align 8
  %call150 = invoke %"struct.thrust::pair.82"* @_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %28, %"struct.thrust::pair.82"* %36, %"struct.thrust::pair.82"* %37, i32* %38, %"struct.thrust::pair.82"* %39, %"struct.thrust::pair.82"* dereferenceable(8) %init)
          to label %invoke.cont149 unwind label %lpad94

invoke.cont149:                                   ; preds = %invoke.cont124
  %coerce.dive152 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %coerce151, i32 0, i32 0
  %coerce.dive153 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive152, i32 0, i32 0
  %coerce.dive154 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive153, i32 0, i32 0
  %coerce.dive155 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive154, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call150, %"struct.thrust::pair.82"** %coerce.dive155, align 8
  %40 = bitcast %"class.thrust::detail::temporary_array.954"* %temp to %"class.thrust::detail::contiguous_storage.955"*
  %call157 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.955"* %40, i64 0)
          to label %invoke.cont156 unwind label %lpad94

invoke.cont156:                                   ; preds = %invoke.cont149
  %coerce.dive159 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %coerce158, i32 0, i32 0
  %coerce.dive160 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive159, i32 0, i32 0
  %coerce.dive161 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive160, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call157, %"struct.thrust::pair.82"** %coerce.dive161, align 8
  %call163 = invoke dereferenceable(8) %"class.thrust::reference.963"* @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_(%"class.thrust::reference.963"* %coerce158, %"struct.thrust::pair.82"* dereferenceable(8) %init)
          to label %invoke.cont162 unwind label %lpad94

invoke.cont162:                                   ; preds = %invoke.cont156
  %41 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %42 = bitcast %"struct.thrust::execution_policy.120"* %41 to %"struct.thrust::detail::execution_policy_base.121"*
  %43 = bitcast %"class.thrust::detail::temporary_array.954"* %temp to %"class.thrust::detail::contiguous_storage.955"*
  %call168 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.955"* %43)
          to label %invoke.cont167 unwind label %lpad94

invoke.cont167:                                   ; preds = %invoke.cont162
  %coerce.dive169 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %ref.tmp166, i32 0, i32 0
  %coerce.dive170 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive169, i32 0, i32 0
  %coerce.dive171 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive170, i32 0, i32 0
  %coerce.dive172 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive171, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call168, %"struct.thrust::pair.82"** %coerce.dive172, align 8
  %44 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call175 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %44)
          to label %invoke.cont174 unwind label %lpad94

invoke.cont174:                                   ; preds = %invoke.cont167
  %coerce.dive176 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp173, i32 0, i32 0
  %coerce.dive177 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive176, i32 0, i32 0
  %coerce.dive178 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive177, i32 0, i32 0
  %coerce.dive179 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive178, i32 0, i32 0
  store i32* %call175, i32** %coerce.dive179, align 8
  %call181 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %ref.tmp166, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp173)
          to label %invoke.cont180 unwind label %lpad94

invoke.cont180:                                   ; preds = %invoke.cont174
  %coerce.dive182 = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %agg.tmp165, i32 0, i32 0
  %45 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive182 to { %"struct.thrust::pair.82"*, i32* }*
  %46 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %45, i32 0, i32 0
  %47 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call181, 0
  store %"struct.thrust::pair.82"* %47, %"struct.thrust::pair.82"** %46, align 8
  %48 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %45, i32 0, i32 1
  %49 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call181, 1
  store i32* %49, i32** %48, align 8
  %50 = bitcast %"class.thrust::tuple.970"* %agg.tmp165 to { %"struct.thrust::pair.82"*, i32* }*
  %51 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %50, i32 0, i32 0
  %52 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %51, align 8
  %53 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %50, i32 0, i32 1
  %54 = load i32*, i32** %53, align 8
  %call184 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair.82"* %52, i32* %54)
          to label %invoke.cont183 unwind label %lpad94

invoke.cont183:                                   ; preds = %invoke.cont180
  %coerce.dive185 = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %agg.tmp164, i32 0, i32 0
  %coerce.dive186 = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %coerce.dive185, i32 0, i32 0
  %55 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive186 to { %"struct.thrust::pair.82"*, i32* }*
  %56 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %55, i32 0, i32 0
  %57 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call184, 0
  store %"struct.thrust::pair.82"* %57, %"struct.thrust::pair.82"** %56, align 8
  %58 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %55, i32 0, i32 1
  %59 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call184, 1
  store i32* %59, i32** %58, align 8
  %60 = bitcast %"class.thrust::detail::temporary_array.954"* %temp to %"class.thrust::detail::contiguous_storage.955"*
  %call192 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.955"* %60)
          to label %invoke.cont191 unwind label %lpad94

invoke.cont191:                                   ; preds = %invoke.cont183
  %coerce.dive193 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %ref.tmp190, i32 0, i32 0
  %coerce.dive194 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive193, i32 0, i32 0
  %coerce.dive195 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive194, i32 0, i32 0
  %coerce.dive196 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive195, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call192, %"struct.thrust::pair.82"** %coerce.dive196, align 8
  %61 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call199 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %61)
          to label %invoke.cont198 unwind label %lpad94

invoke.cont198:                                   ; preds = %invoke.cont191
  %coerce.dive200 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp197, i32 0, i32 0
  %coerce.dive201 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive200, i32 0, i32 0
  %coerce.dive202 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive201, i32 0, i32 0
  %coerce.dive203 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive202, i32 0, i32 0
  store i32* %call199, i32** %coerce.dive203, align 8
  %call205 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %ref.tmp190, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp197)
          to label %invoke.cont204 unwind label %lpad94

invoke.cont204:                                   ; preds = %invoke.cont198
  %coerce.dive206 = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %agg.tmp189, i32 0, i32 0
  %62 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive206 to { %"struct.thrust::pair.82"*, i32* }*
  %63 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %62, i32 0, i32 0
  %64 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call205, 0
  store %"struct.thrust::pair.82"* %64, %"struct.thrust::pair.82"** %63, align 8
  %65 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %62, i32 0, i32 1
  %66 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call205, 1
  store i32* %66, i32** %65, align 8
  %67 = bitcast %"class.thrust::tuple.970"* %agg.tmp189 to { %"struct.thrust::pair.82"*, i32* }*
  %68 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %67, i32 0, i32 0
  %69 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %68, align 8
  %70 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %67, i32 0, i32 1
  %71 = load i32*, i32** %70, align 8
  %call208 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair.82"* %69, i32* %71)
          to label %invoke.cont207 unwind label %lpad94

invoke.cont207:                                   ; preds = %invoke.cont204
  %coerce.dive209 = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %ref.tmp188, i32 0, i32 0
  %coerce.dive210 = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %coerce.dive209, i32 0, i32 0
  %72 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive210 to { %"struct.thrust::pair.82"*, i32* }*
  %73 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %72, i32 0, i32 0
  %74 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call208, 0
  store %"struct.thrust::pair.82"* %74, %"struct.thrust::pair.82"** %73, align 8
  %75 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %72, i32 0, i32 1
  %76 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call208, 1
  store i32* %76, i32** %75, align 8
  %77 = bitcast %"class.thrust::zip_iterator.968"* %ref.tmp188 to %"class.thrust::iterator_facade.969"*
  %78 = load i64, i64* %n, align 8, !tbaa !13
  %call212 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::iterator_facade.969"* dereferenceable(1) %77, i64 %78)
          to label %invoke.cont211 unwind label %lpad94

invoke.cont211:                                   ; preds = %invoke.cont207
  %coerce.dive213 = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %agg.tmp187, i32 0, i32 0
  %coerce.dive214 = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %coerce.dive213, i32 0, i32 0
  %79 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive214 to { %"struct.thrust::pair.82"*, i32* }*
  %80 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %79, i32 0, i32 0
  %81 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call212, 0
  store %"struct.thrust::pair.82"* %81, %"struct.thrust::pair.82"** %80, align 8
  %82 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %79, i32 0, i32 1
  %83 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call212, 1
  store i32* %83, i32** %82, align 8
  %84 = bitcast %"class.thrust::detail::temporary_array"* %flags to %"class.thrust::detail::contiguous_storage.198"*
  %call219 = invoke i32* @_ZN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.198"* %84)
          to label %invoke.cont218 unwind label %lpad94

invoke.cont218:                                   ; preds = %invoke.cont211
  %coerce.dive220 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %ref.tmp217, i32 0, i32 0
  %coerce.dive221 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive220, i32 0, i32 0
  %coerce.dive222 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive221, i32 0, i32 0
  %coerce.dive223 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive222, i32 0, i32 0
  store i32* %call219, i32** %coerce.dive223, align 8
  %call225 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %result, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %ref.tmp217)
          to label %invoke.cont224 unwind label %lpad94

invoke.cont224:                                   ; preds = %invoke.cont218
  %coerce.dive226 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %agg.tmp216, i32 0, i32 0
  %85 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive226 to { %"struct.thrust::pair.82"*, i32* }*
  %86 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %85, i32 0, i32 0
  %87 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call225, 0
  store %"struct.thrust::pair.82"* %87, %"struct.thrust::pair.82"** %86, align 8
  %88 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %85, i32 0, i32 1
  %89 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call225, 1
  store i32* %89, i32** %88, align 8
  %90 = bitcast %"class.thrust::tuple.966"* %agg.tmp216 to { %"struct.thrust::pair.82"*, i32* }*
  %91 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %90, i32 0, i32 0
  %92 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %91, align 8
  %93 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %90, i32 0, i32 1
  %94 = load i32*, i32** %93, align 8
  %call228 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_(%"struct.thrust::pair.82"* %92, i32* %94)
          to label %invoke.cont227 unwind label %lpad94

invoke.cont227:                                   ; preds = %invoke.cont224
  %coerce.dive229 = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %agg.tmp215, i32 0, i32 0
  %coerce.dive230 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive229, i32 0, i32 0
  %95 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive230 to { %"struct.thrust::pair.82"*, i32* }*
  %96 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %95, i32 0, i32 0
  %97 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call228, 0
  store %"struct.thrust::pair.82"* %97, %"struct.thrust::pair.82"** %96, align 8
  %98 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %95, i32 0, i32 1
  %99 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call228, 1
  store i32* %99, i32** %98, align 8
  invoke void @_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEC2ES7_(%"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp231)
          to label %invoke.cont233 unwind label %lpad94

invoke.cont233:                                   ; preds = %invoke.cont227
  %100 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp164 to { %"struct.thrust::pair.82"*, i32* }*
  %101 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %100, i32 0, i32 0
  %102 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %101, align 8
  %103 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %100, i32 0, i32 1
  %104 = load i32*, i32** %103, align 8
  %105 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp187 to { %"struct.thrust::pair.82"*, i32* }*
  %106 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %105, i32 0, i32 0
  %107 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %106, align 8
  %108 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %105, i32 0, i32 1
  %109 = load i32*, i32** %108, align 8
  %call235 = invoke { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %42, %"struct.thrust::pair.82"* %102, i32* %104, %"struct.thrust::pair.82"* %107, i32* %109, %"class.thrust::zip_iterator.964"* byval align 8 %agg.tmp215)
          to label %invoke.cont234 unwind label %lpad94

invoke.cont234:                                   ; preds = %invoke.cont233
  %coerce.dive237 = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %coerce236, i32 0, i32 0
  %coerce.dive238 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive237, i32 0, i32 0
  %110 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive238 to { %"struct.thrust::pair.82"*, i32* }*
  %111 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %110, i32 0, i32 0
  %112 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call235, 0
  store %"struct.thrust::pair.82"* %112, %"struct.thrust::pair.82"** %111, align 8
  %113 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %110, i32 0, i32 1
  %114 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call235, 1
  store i32* %114, i32** %113, align 8
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.954"* %temp) #5
  %115 = bitcast %"class.thrust::detail::temporary_array.954"* %temp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %115) #5
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array"* %flags) #5
  %116 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.end(i64 24, i8* %116) #5
  %117 = bitcast %"class.thrust::detail::normal_iterator.870"* %last2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %117) #5
  br label %if.end

lpad:                                             ; preds = %invoke.cont84, %invoke.cont64, %invoke.cont57, %invoke.cont51, %invoke.cont42, %invoke.cont34, %invoke.cont31, %invoke.cont, %if.then
  %118 = landingpad { i8*, i32 }
          cleanup
  %119 = extractvalue { i8*, i32 } %118, 0
  store i8* %119, i8** %exn.slot, align 8
  %120 = extractvalue { i8*, i32 } %118, 1
  store i32 %120, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad94:                                           ; preds = %invoke.cont233, %invoke.cont227, %invoke.cont224, %invoke.cont218, %invoke.cont211, %invoke.cont207, %invoke.cont204, %invoke.cont198, %invoke.cont191, %invoke.cont183, %invoke.cont180, %invoke.cont174, %invoke.cont167, %invoke.cont162, %invoke.cont156, %invoke.cont149, %invoke.cont124, %invoke.cont118, %invoke.cont110, %invoke.cont104, %invoke.cont95, %invoke.cont91
  %121 = landingpad { i8*, i32 }
          cleanup
  %122 = extractvalue { i8*, i32 } %121, 0
  store i8* %122, i8** %exn.slot, align 8
  %123 = extractvalue { i8*, i32 } %121, 1
  store i32 %123, i32* %ehselector.slot, align 4
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.954"* %temp) #5
  %124 = bitcast %"class.thrust::detail::temporary_array.954"* %temp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %124) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad94, %lpad
  call void @_ZN6thrust6detail15temporary_arrayIjNS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array"* %flags) #5
  %125 = bitcast %"class.thrust::detail::temporary_array"* %flags to i8*
  call void @llvm.lifetime.end(i64 24, i8* %125) #5
  %126 = bitcast %"class.thrust::detail::normal_iterator.870"* %last2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %126) #5
  %127 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %127) #5
  br label %eh.resume

if.end:                                           ; preds = %invoke.cont234, %entry
  %128 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to %"class.thrust::iterator_facade.872"*
  %129 = load i64, i64* %n, align 8, !tbaa !13
  %call241 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.872"* dereferenceable(1) %128, i64 %129)
  %coerce.dive242 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive243 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive242, i32 0, i32 0
  %coerce.dive244 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive243, i32 0, i32 0
  %coerce.dive245 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive244, i32 0, i32 0
  %coerce.dive246 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive245, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call241, %"struct.thrust::pair.82"** %coerce.dive246, align 8
  %130 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %130) #5
  %coerce.dive248 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive249 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive248, i32 0, i32 0
  %coerce.dive250 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive249, i32 0, i32 0
  %coerce.dive251 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive250, i32 0, i32 0
  %coerce.dive252 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive251, i32 0, i32 0
  %131 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive252, align 8
  ret %"struct.thrust::pair.82"* %131

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val253 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val253
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEET_RKNS_15iterator_facadeISF_T0_T1_T2_T3_T4_EENSF_15difference_typeE(%"class.thrust::iterator_facade.872"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.870", align 8
  store %"class.thrust::iterator_facade.872"* %i, %"class.thrust::iterator_facade.872"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.870"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.872"* %1 to %"class.thrust::detail::normal_iterator.870"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.870"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.870"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.870"* %tmp to %"class.thrust::iterator_facade.872"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.872"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.870"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.870"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.870"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %10
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEES9_NS6_INS_7pointerIjS4_NS_11use_defaultESB_EEEENS5_13binary_negateINS_8equal_toIiEEEEEET2_RKNS5_21execution_policy_baseIT_EET0_SO_T1_SI_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i32* %first1.coerce, i32* %last1.coerce, i32* %first2.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %op = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp23 = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive13, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive17, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive18, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call19 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call19 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.858"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp20 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.858"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.858"* %agg.tmp21 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.858"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp22 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.199"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"struct.thrust::detail::binary_negate.953"* %agg.tmp23 to i8*
  %11 = bitcast %"struct.thrust::detail::binary_negate.953"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 1, i32 1, i1 false), !tbaa.struct !41
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive27, i32 0, i32 0
  %12 = load i32*, i32** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp20, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive32, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive33, align 8
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %agg.tmp21, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive37, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive38, align 8
  %coerce.dive39 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp22, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive41, i32 0, i32 0
  %15 = load i32*, i32** %coerce.dive42, align 8
  %call43 = call i32* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIiEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i32* %12, i32* %13, i32* %14, i32* %15)
  %coerce.dive44 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive45, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive46, i32 0, i32 0
  store i32* %call43, i32** %coerce.dive47, align 8
  %coerce.dive48 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive49, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive50, i32 0, i32 0
  %16 = load i32*, i32** %coerce.dive51, align 8
  ret i32* %16
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEmiEl(%"class.thrust::iterator_facade.860"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  %n.addr = alloca i64, align 8
  %result = alloca %"class.thrust::detail::normal_iterator.858", align 8
  store %"class.thrust::iterator_facade.860"* %this, %"class.thrust::iterator_facade.860"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.858"* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.860"* %this1)
  %1 = bitcast %"class.thrust::detail::normal_iterator.858"* %result to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.858"* %result to %"class.thrust::iterator_facade.860"*
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEmIEl(%"class.thrust::iterator_facade.860"* %3, i64 %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.858"* %retval to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.858"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.858"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive5, i32 0, i32 0
  %8 = load i32*, i32** %coerce.dive6, align 8
  ret i32* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i32* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.860"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.858", align 8
  store %"class.thrust::iterator_facade.860"* %i, %"class.thrust::iterator_facade.860"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.858"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.860"* %1 to %"class.thrust::detail::normal_iterator.858"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.858"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.858"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.858"* %tmp to %"class.thrust::iterator_facade.860"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl(%"class.thrust::iterator_facade.860"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.858"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.858"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.858"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  %10 = load i32*, i32** %coerce.dive4, align 8
  ret i32* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail4not2INS_8equal_toIiEEEENS0_13binary_negateIT_EERKS5_(%"struct.thrust::equal_to.877"* dereferenceable(1) %pred) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %pred.addr = alloca %"struct.thrust::equal_to.877"*, align 8
  store %"struct.thrust::equal_to.877"* %pred, %"struct.thrust::equal_to.877"** %pred.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::equal_to.877"*, %"struct.thrust::equal_to.877"** %pred.addr, align 8
  call void @_ZN6thrust6detail13binary_negateINS_8equal_toIiEEEC2ERKS3_(%"struct.thrust::detail::binary_negate.953"* %retval, %"struct.thrust::equal_to.877"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EEm(%"class.thrust::detail::temporary_array.954"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.954"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.956", align 8
  %ref.tmp2 = alloca %"class.thrust::detail::temporary_allocator.957", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_array.954"* %this, %"class.thrust::detail::temporary_array.954"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_array.954"*, %"class.thrust::detail::temporary_array.954"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.954"* %this1 to %"class.thrust::detail::contiguous_storage.955"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.957"* %ref.tmp2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.956"* %ref.tmp, %"class.thrust::detail::temporary_allocator.957"* dereferenceable(8) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_(%"class.thrust::detail::contiguous_storage.955"* %0, i64 %1, %"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.958"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.956"*)*)(%"struct.thrust::detail::no_throw_allocator.956"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.958"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.957"*)*)(%"class.thrust::detail::temporary_allocator.957"* %ref.tmp2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIiiEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.954"* dereferenceable(24) %this1, i64 %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.958"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.956"*)*)(%"struct.thrust::detail::no_throw_allocator.956"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.958"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.957"*)*)(%"class.thrust::detail::temporary_allocator.957"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::detail::temporary_array.954"* %this1 to %"class.thrust::detail::contiguous_storage.955"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.955"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val8 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val8
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust15replace_copy_ifINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS_6negateIjEES9_EET2_RKNS5_21execution_policy_baseIT_EET0_SQ_T1_SK_T3_RKT4_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, i32* %stencil.coerce, %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"* dereferenceable(8) %new_value) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %stencil = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %pred = alloca %"struct.thrust::negate", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %new_value.addr = alloca %"struct.thrust::pair.82"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %agg.tmp22 = alloca %"struct.thrust::negate", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %stencil, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %stencil.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %new_value, %"struct.thrust::pair.82"** %new_value.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call18 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call18 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.870"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp19 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.870"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp20 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %stencil to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.960"* %agg.tmp21 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.960"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %new_value.addr, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive26, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp19, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive31, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp20, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive35, i32 0, i32 0
  %13 = load i32*, i32** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp21, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive39, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive40, align 8
  %call41 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %11, %"struct.thrust::pair.82"* %12, i32* %13, %"struct.thrust::pair.82"* %14, %"struct.thrust::pair.82"* dereferenceable(8) %10)
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive44, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call41, %"struct.thrust::pair.82"** %coerce.dive45, align 8
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive48, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive49, align 8
  ret %"struct.thrust::pair.82"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmiEl(%"class.thrust::iterator_facade.872"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  %n.addr = alloca i64, align 8
  %result = alloca %"class.thrust::detail::normal_iterator.870", align 8
  store %"class.thrust::iterator_facade.872"* %this, %"class.thrust::iterator_facade.872"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.872"* %this1)
  %1 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to %"class.thrust::iterator_facade.872"*
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl(%"class.thrust::iterator_facade.872"* %3, i64 %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.870"* %retval to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.870"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.870"* %result to i8*
  call void @llvm.lifetime.end(i64 8, i8* %7) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive5, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.82"* %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.962"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.960", align 8
  store %"class.thrust::iterator_facade.962"* %i, %"class.thrust::iterator_facade.962"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.962"* %1 to %"class.thrust::detail::normal_iterator.960"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.960"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.960"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.960"* %tmp to %"class.thrust::iterator_facade.962"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.962"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.960"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.960"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.960"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.955"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.960"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEixEm(%"class.thrust::detail::contiguous_storage.955"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %m_begin to %"class.thrust::iterator_facade.962"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl(%"class.thrust::iterator_facade.962"* %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.963"* @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EaSERKS2_(%"class.thrust::reference.963"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %v) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.963"*, align 8
  %v.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::reference.963"* %this, %"class.thrust::reference.963"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %v, %"struct.thrust::pair.82"** %v.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.963"*, %"class.thrust::reference.963"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %v.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_(%"class.thrust::reference.963"* %this1, %"struct.thrust::pair.82"* %0)
  ret %"class.thrust::reference.963"* %this1
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust14inclusive_scanINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RKNS7_21execution_policy_baseIT_EET0_S11_SV_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.964"* byval align 8 %result) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.964", align 8
  %first = alloca %"class.thrust::zip_iterator.968", align 8
  %last = alloca %"class.thrust::zip_iterator.968", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.964", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %0 = bitcast %"class.thrust::zip_iterator.968"* %first to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.968"* %last to { %"struct.thrust::pair.82"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %8 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.968"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.968"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"class.thrust::zip_iterator.964"* %agg.tmp3 to i8*
  %13 = bitcast %"class.thrust::zip_iterator.964"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 16, i32 8, i1 false)
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp4 to i8*
  %15 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 1, i32 1, i1 false), !tbaa.struct !41
  %16 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp to { %"struct.thrust::pair.82"*, i32* }*
  %17 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %16, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %17, align 8
  %19 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %16, i32 0, i32 1
  %20 = load i32*, i32** %19, align 8
  %21 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp2 to { %"struct.thrust::pair.82"*, i32* }*
  %22 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %21, i32 0, i32 0
  %23 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %22, align 8
  %24 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %21, i32 0, i32 1
  %25 = load i32*, i32** %24, align 8
  %call5 = call { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %7, %"struct.thrust::pair.82"* %18, i32* %20, %"struct.thrust::pair.82"* %23, i32* %25, %"class.thrust::zip_iterator.964"* byval align 8 %agg.tmp3)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive, i32 0, i32 0
  %26 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive6 to { %"struct.thrust::pair.82"*, i32* }*
  %27 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %26, i32 0, i32 0
  %28 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call5, 0
  store %"struct.thrust::pair.82"* %28, %"struct.thrust::pair.82"** %27, align 8
  %29 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %26, i32 0, i32 1
  %30 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call5, 1
  store i32* %30, i32** %29, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive7, i32 0, i32 0
  %31 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive8 to { %"struct.thrust::pair.82"*, i32* }*
  %32 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %31, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %32
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEENS_12zip_iteratorIT_EESJ_(%"struct.thrust::pair.82"* %t.coerce0, i32* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.968", align 8
  %t = alloca %"class.thrust::tuple.970", align 8
  %agg.tmp = alloca %"class.thrust::tuple.970", align 8
  %0 = bitcast %"class.thrust::tuple.970"* %t to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %t.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %t.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::tuple.970"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.970"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.970"* %agg.tmp to { %"struct.thrust::pair.82"*, i32* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %5, i32 0, i32 1
  %9 = load i32*, i32** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_(%"class.thrust::zip_iterator.968"* %retval, %"struct.thrust::pair.82"* %7, i32* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive1 to { %"struct.thrust::pair.82"*, i32* }*
  %11 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESI_SI_SI_SI_SI_SI_SI_E4typeERKSG_RKSH_(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.970", align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.960"* %t0, %"class.thrust::detail::normal_iterator.960"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_(%"class.thrust::tuple.970"* %retval, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive to { %"struct.thrust::pair.82"*, i32* }*
  %3 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %2, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %3
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::iterator_facade.969"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.968", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.969"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.968", align 8
  store %"class.thrust::iterator_facade.969"* %i, %"class.thrust::iterator_facade.969"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.968"* %tmp to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.969"*, %"class.thrust::iterator_facade.969"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.969"* %1 to %"class.thrust::zip_iterator.968"*
  %3 = bitcast %"class.thrust::zip_iterator.968"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.968"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.968"* %tmp to %"class.thrust::iterator_facade.969"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.968"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl(%"class.thrust::iterator_facade.969"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.968"* %retval to i8*
  %8 = bitcast %"class.thrust::zip_iterator.968"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.968"* %tmp to i8*
  call void @llvm.lifetime.end(i64 16, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.970", %"class.thrust::tuple.970"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.971"* %coerce.dive1 to { %"struct.thrust::pair.82"*, i32* }*
  %11 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %11
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS_12zip_iteratorIT_EESK_(%"struct.thrust::pair.82"* %t.coerce0, i32* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.964", align 8
  %t = alloca %"class.thrust::tuple.966", align 8
  %agg.tmp = alloca %"class.thrust::tuple.966", align 8
  %0 = bitcast %"class.thrust::tuple.966"* %t to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %t.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %t.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::tuple.966"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.966"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.966"* %agg.tmp to { %"struct.thrust::pair.82"*, i32* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %5, i32 0, i32 1
  %9 = load i32*, i32** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_(%"class.thrust::zip_iterator.964"* %retval, %"struct.thrust::pair.82"* %7, i32* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive1 to { %"struct.thrust::pair.82"*, i32* }*
  %11 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_E4typeERKSH_RKSI_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.966", align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.870"* %t0, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_(%"class.thrust::tuple.966"* %retval, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive to { %"struct.thrust::pair.82"*, i32* }*
  %3 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %2, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEC2ES7_(%"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %_binary_op = alloca %struct.add_pairs, align 1
  %this.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %this, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %this.addr, align 8
  %binary_op = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %this1, i32 0, i32 0
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.954"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.954"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  store %"class.thrust::detail::temporary_array.954"* %this, %"class.thrust::detail::temporary_array.954"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.954"*, %"class.thrust::detail::temporary_array.954"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.954"* %this1 to %"class.thrust::detail::contiguous_storage.955"*
  %1 = bitcast %"class.thrust::detail::temporary_array.954"* %this1 to %"class.thrust::detail::contiguous_storage.955"*
  %call = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.955"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.954"* %this1 to %"class.thrust::detail::contiguous_storage.955"*
  %call7 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.955"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call7, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive14, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive18, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.955"* %0, %"struct.thrust::pair.82"* %3, %"struct.thrust::pair.82"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.954"* %this1 to %"class.thrust::detail::contiguous_storage.955"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.955"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.954"* %this1 to %"class.thrust::detail::contiguous_storage.955"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.955"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr i32* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS6_NS_11use_defaultESD_EEEENS7_13binary_negateINS_8equal_toIiEEEEEET2_RNS_16execution_policyIT_EET0_SP_T1_SK_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i32* %first1.coerce, i32* %last1.coerce, i32* %first2.coerce, i32* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.858", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %op = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp19 = alloca %"class.thrust::tuple.975", align 8
  %agg.tmp20 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp21 = alloca %"class.thrust::tuple.975", align 8
  %agg.tmp22 = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  %agg.tmp23 = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive3, i32 0, i32 0
  store i32* %first1.coerce, i32** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive8, i32 0, i32 0
  store i32* %last1.coerce, i32** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.858", %"class.thrust::detail::normal_iterator.858"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.859", %"class.thrust::iterator_adaptor.859"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.861", %"class.thrust::device_ptr.861"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.862", %"class.thrust::pointer.862"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.863", %"class.thrust::iterator_adaptor.863"* %coerce.dive13, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %result, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive17, i32 0, i32 0
  store i32* %result.coerce, i32** %coerce.dive18, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.973"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.975"* sret %agg.tmp19, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.973"* sret %agg.tmp, %"class.thrust::tuple.975"* byval align 8 %agg.tmp19)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.975"* sret %agg.tmp21, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.973"* sret %agg.tmp20, %"class.thrust::tuple.975"* byval align 8 %agg.tmp21)
  %3 = bitcast %"struct.thrust::detail::binary_negate.953"* %agg.tmp23 to i8*
  %4 = bitcast %"struct.thrust::detail::binary_negate.953"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEC2ES5_(%"struct.thrust::detail::binary_transform_functor.978"* %agg.tmp22)
  call void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_(%"class.thrust::zip_iterator.973"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp20)
  %call = call dereferenceable(24) %"class.thrust::tuple.975"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.973"* %zipped_result)
  %5 = bitcast %"class.thrust::tuple.975"* %call to %"struct.thrust::detail::cons.976"*
  %call24 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.976"* dereferenceable(24) %5)
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %retval to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %call24 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::zip_iterator.973"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %8) #5
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive27, i32 0, i32 0
  %9 = load i32*, i32** %coerce.dive28, align 8
  ret i32* %9
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RKNS7_21execution_policy_baseIT_EESP_SP_T1_(%"class.thrust::zip_iterator.973"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.973"* byval align 8 %first, %"class.thrust::zip_iterator.973"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %4 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp2 to i8*
  %5 = bitcast %"class.thrust::zip_iterator.973"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %agg.tmp3 to i8*
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_(%"class.thrust::zip_iterator.973"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEENS_12zip_iteratorIT_EESI_(%"class.thrust::zip_iterator.973"* noalias sret %agg.result, %"class.thrust::tuple.975"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.975", align 8
  %0 = bitcast %"class.thrust::tuple.975"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.975"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_(%"class.thrust::zip_iterator.973"* %agg.result, %"class.thrust::tuple.975"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESI_SI_SI_SI_SI_SI_E4typeERKSF_RKSG_RKSH_(%"class.thrust::tuple.975"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  store %"class.thrust::detail::normal_iterator.858"* %t0, %"class.thrust::detail::normal_iterator.858"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.858"* %t1, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_(%"class.thrust::tuple.975"* %agg.result, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEC2ES5_(%"struct.thrust::detail::binary_transform_functor.978"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_negate.953", align 1
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor.978"*, align 8
  store %"struct.thrust::detail::binary_transform_functor.978"* %this, %"struct.thrust::detail::binary_transform_functor.978"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor.978"*, %"struct.thrust::detail::binary_transform_functor.978"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.978", %"struct.thrust::detail::binary_transform_functor.978"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::binary_negate.953"* %f2 to i8*
  %1 = bitcast %"struct.thrust::detail::binary_negate.953"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.976"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.976"*, align 8
  store %"struct.thrust::detail::cons.976"* %c, %"struct.thrust::detail::cons.976"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.976"*, %"struct.thrust::detail::cons.976"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIiEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.976"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.975"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.973"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  store %"class.thrust::zip_iterator.973"* %this, %"class.thrust::zip_iterator.973"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.973", %"class.thrust::zip_iterator.973"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.975"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_SP_T1_(%"class.thrust::zip_iterator.973"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.973"* byval align 8 %first, %"class.thrust::zip_iterator.973"* byval align 8 %last) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %3 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp1 to i8*
  %4 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 8, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp2 to i8*
  %6 = bitcast %"class.thrust::zip_iterator.973"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_(%"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp1, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp2)
  %7 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %agg.tmp3 to i8*
  %8 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_(%"class.thrust::zip_iterator.973"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp, i64 %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_(%"class.thrust::zip_iterator.973"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.973"* byval align 8 %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp1 = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %agg.tmp1 to i8*
  %5 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 1, i32 1, i1 false), !tbaa.struct !41
  call void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_(%"class.thrust::zip_iterator.973"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEEEENS_15iterator_traitsIT_E15difference_typeESK_SK_(%"class.thrust::zip_iterator.973"* byval align 8 %first, %"class.thrust::zip_iterator.973"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.973", align 8
  %0 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.973"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_(%"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEElNS7_24binary_transform_functorINS7_13binary_negateINS_8equal_toIiEEEEEEEET0_RNS2_16execution_policyIT_EESP_T1_T2_EN10workaround13parallel_pathERNSQ_IS4_EESI_lSO_(%"class.thrust::zip_iterator.973"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.973"* byval align 8 %first, i64 %n) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.978", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp2 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp3 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp4 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce9 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp11 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp12 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp13 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp14 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp15 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp16 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %ref.tmp19 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp22 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp25 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp26 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp27 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp28 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %ref.tmp29 = alloca i32, align 4
  %agg.tmp.ensured32 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp33 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp38 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp39 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp40 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp41 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.979"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.979"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor.978"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp3 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 24, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.979"* %agg.tmp4 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.979"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %call5 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp3, i32 %15)
  %16 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call5, i64* %16, align 4
  %call6 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %17 = load i64, i64* %n.addr, align 8, !tbaa !13
  %18 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %19 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %18, %19
  %call7 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %17, i32 %mul)
  br i1 %call7, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %20 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %20) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %21 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call8 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce9, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive10 to { i64*, i64* }*
  %23 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %22, i32 0, i32 0
  %24 = extractvalue { i64*, i64* } %call8, 0
  store i64* %24, i64** %23, align 8
  %25 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %22, i32 0, i32 1
  %26 = extractvalue { i64*, i64* } %call8, 1
  store i64* %26, i64** %25, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp12, i64 2147483647, i64 2147483647, i64 2147483647)
  %27 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp14 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %27, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %28 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp15 to i8*
  %29 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* %29, i64 24, i32 8, i1 false)
  %30 = bitcast %"struct.thrust::detail::wrapped_function.979"* %agg.tmp16 to i8*
  %31 = bitcast %"struct.thrust::detail::wrapped_function.979"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %30, i8* %31, i64 1, i32 1, i1 false), !tbaa.struct !41
  %32 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp12, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp15, i64 %32)
  %33 = bitcast %"struct.thrust::pair.82"* %ref.tmp11 to i64*
  store i64 %call17, i64* %33, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce9, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp11)
  %34 = load i64, i64* %n.addr, align 8, !tbaa !13
  %35 = load i64, i64* %group_size, align 8, !tbaa !13
  %call20 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %34, i64 %35)
  store i64 %call20, i64* %ref.tmp19, align 8, !tbaa !13
  %call21 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp19)
  store i64 %call21, i64* %num_groups, align 8, !tbaa !13
  %36 = load i64, i64* %num_groups, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %38 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %39 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %38 to %"struct.thrust::detail::execution_policy_base.121"*
  %call23 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %39)
  %40 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call23 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call24 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %40)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp22, i64 %36, i64 %37, i64 0, %struct.CUstream_st* %call24)
  %41 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp26 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %41, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %42 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp27 to i8*
  %43 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %42, i8* %43, i64 24, i32 8, i1 false)
  %44 = bitcast %"struct.thrust::detail::wrapped_function.979"* %agg.tmp28 to i8*
  %45 = bitcast %"struct.thrust::detail::wrapped_function.979"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 1, i32 1, i1 false), !tbaa.struct !41
  %46 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp22, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp27, i64 %46)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %47 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %47) #5
  %48 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %48) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %49 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %50 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call30 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %49, i32 %50)
  store i32 %call30, i32* %ref.tmp29, align 4, !tbaa !11
  %call31 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp29)
  store i32 %call31, i32* %narrow_num_groups, align 4, !tbaa !11
  %51 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv34 = zext i32 %51 to i64
  %52 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv35 = zext i32 %52 to i64
  %53 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %54 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %53 to %"struct.thrust::detail::execution_policy_base.121"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %54)
  %55 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call36 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %55)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp33, i64 %conv34, i64 %conv35, i64 0, %struct.CUstream_st* %call37)
  %56 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp39 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %56, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %57 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp40 to i8*
  %58 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %57, i8* %58, i64 24, i32 8, i1 false)
  %59 = bitcast %"struct.thrust::detail::wrapped_function.979"* %agg.tmp41 to i8*
  %60 = bitcast %"struct.thrust::detail::wrapped_function.979"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* %60, i64 1, i32 1, i1 false), !tbaa.struct !41
  %61 = load i32, i32* %narrow_n, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured32, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp33, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp40, i32 %61)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured32) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %62 = bitcast %"class.thrust::zip_iterator.973"* %first to %"class.thrust::iterator_facade.974"*
  %63 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::zip_iterator.973"* sret %agg.result, %"class.thrust::iterator_facade.974"* dereferenceable(1) %62, i64 %63)
  %64 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %64) #5
  %65 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %65) #5
  %66 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %66) #5
  %67 = bitcast %"struct.thrust::detail::wrapped_function.979"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %67) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEC2ERKS7_(%"struct.thrust::detail::wrapped_function.979"* %this, %"struct.thrust::detail::binary_transform_functor.978"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %f.addr = alloca %"struct.thrust::detail::binary_transform_functor.978"*, align 8
  store %"struct.thrust::detail::wrapped_function.979"* %this, %"struct.thrust::detail::wrapped_function.979"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::binary_transform_functor.978"* %f, %"struct.thrust::detail::binary_transform_functor.978"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.979", %"struct.thrust::detail::wrapped_function.979"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::binary_transform_functor.978"*, %"struct.thrust::detail::binary_transform_functor.978"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.978"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.973"* byval align 8 %arg2, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIiEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp3)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.973"* byval align 8 %arg2, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIiEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp3)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.973"* byval align 8 %arg2, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.973"* byval align 8 %arg2, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.979", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEET_RKNS_15iterator_facadeISR_T0_T1_T2_T3_T4_EENSR_15difference_typeE(%"class.thrust::zip_iterator.973"* noalias sret %agg.result, %"class.thrust::iterator_facade.974"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %i.addr = alloca %"class.thrust::iterator_facade.974"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.973", align 8
  store %"class.thrust::iterator_facade.974"* %i, %"class.thrust::iterator_facade.974"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.973"* %tmp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.974"*, %"class.thrust::iterator_facade.974"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.974"* %1 to %"class.thrust::zip_iterator.973"*
  %3 = bitcast %"class.thrust::zip_iterator.973"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.973"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.973"* %tmp to %"class.thrust::iterator_facade.974"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.973"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl(%"class.thrust::iterator_facade.974"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.973"* %agg.result to i8*
  %8 = bitcast %"class.thrust::zip_iterator.973"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.973"* %tmp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %9) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIiEEEEEEvEEjSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.981", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %a2, %"class.thrust::zip_iterator.973"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %a3, %"struct.thrust::detail::wrapped_function.979"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIiEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.981"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %agg.result, %"class.thrust::tuple.981"* dereferenceable(40) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIiEEEEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.981"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %t1, %"class.thrust::zip_iterator.973"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t2, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIiEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj(%"class.thrust::tuple.981"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEEjSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %this, %"class.thrust::tuple.981"* dereferenceable(40) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"*, align 8
  %args.addr = alloca %"class.thrust::tuple.981"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.981"* %args, %"class.thrust::tuple.981"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.981"*, %"class.thrust::tuple.981"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.981"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.981"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIiEEEEEEvEEjSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKj(%"class.thrust::tuple.981"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.981"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.981"* %this, %"class.thrust::tuple.981"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %t1, %"class.thrust::zip_iterator.973"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t2, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.981"*, %"class.thrust::tuple.981"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.981"* %this1 to %"struct.thrust::detail::cons.982"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.982"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjSK_EEEEEEEC2IKS8_KSM_KSU_KjKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.982"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.982"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.982"* %this, %"struct.thrust::detail::cons.982"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %t2, %"class.thrust::zip_iterator.973"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t3, %"struct.thrust::detail::wrapped_function.979"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.982"*, %"struct.thrust::detail::cons.982"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.982", %"struct.thrust::detail::cons.982"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.982", %"struct.thrust::detail::cons.982"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.983"* %tail, %"class.thrust::zip_iterator.973"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjSG_EEEEEC2IKSI_KSQ_KjKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.983"* %this, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.983"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.983"* %this, %"struct.thrust::detail::cons.983"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.973"* %t1, %"class.thrust::zip_iterator.973"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t2, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.983"*, %"struct.thrust::detail::cons.983"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.983", %"struct.thrust::detail::cons.983"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.973"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.973"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.983", %"struct.thrust::detail::cons.983"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.984"* %tail, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IjNS_9null_typeEEEEC2IKS9_KjKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.984"* %this, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.984"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.984"* %this, %"struct.thrust::detail::cons.984"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.979"* %t1, %"struct.thrust::detail::wrapped_function.979"** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.984"*, %"struct.thrust::detail::cons.984"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.984", %"struct.thrust::detail::cons.984"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.979"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.979"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.984", %"struct.thrust::detail::cons.984"* %this1, i32 0, i32 1
  %3 = load i32*, i32** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %tail, i32* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESH_NSE_INS_7pointerIjNS2_3tagENS_11use_defaultESK_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINSD_13binary_negateINS_8equal_toIiEEEEEEvEElSN_SN_SN_SN_SN_SN_EEEEEENS_4pairIiiEENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SM_SM_SM_SM_SM_SM_EEEESY_RKSZ_RKS10_RKS11_RKS12_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.993", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %a2, %"class.thrust::zip_iterator.973"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %a3, %"struct.thrust::detail::wrapped_function.979"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIiEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.993"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %agg.result, %"class.thrust::tuple.993"* dereferenceable(48) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS3_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINSA_13binary_negateINS_8equal_toIiEEEEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SK_SK_SK_SK_SK_SK_E4typeERKSW_RKSX_RKSY_RKSZ_(%"class.thrust::tuple.993"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %t1, %"class.thrust::zip_iterator.973"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t2, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIiEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl(%"class.thrust::tuple.993"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESG_NSD_INS_7pointerIjNS2_3tagENS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINSC_13binary_negateINS_8equal_toIiEEEEEEvEElSM_SM_SM_SM_SM_SM_EEEC2ES7_RKSX_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %this, %"class.thrust::tuple.993"* dereferenceable(48) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"*, align 8
  %args.addr = alloca %"class.thrust::tuple.993"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.993"* %args, %"class.thrust::tuple.993"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.993"*, %"class.thrust::tuple.993"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.993"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.993"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 48, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESD_NSA_INS_7pointerIjNS3_3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS9_13binary_negateINS_8equal_toIiEEEEEEvEElSJ_SJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSL_RKST_RKl(%"class.thrust::tuple.993"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.993"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.993"* %this, %"class.thrust::tuple.993"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %t1, %"class.thrust::zip_iterator.973"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t2, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.993"*, %"class.thrust::tuple.993"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.993"* %this1 to %"struct.thrust::detail::cons.994"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.994"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEESE_NSB_INS_7pointerIjNS4_3tagENS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlSK_EEEEEEEC2IKS8_KSM_KSU_KlKSK_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.994"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.994"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.994"* %this, %"struct.thrust::detail::cons.994"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %t2, %"class.thrust::zip_iterator.973"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t3, %"struct.thrust::detail::wrapped_function.979"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.994"*, %"struct.thrust::detail::cons.994"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.994", %"struct.thrust::detail::cons.994"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.994", %"struct.thrust::detail::cons.994"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.995"* %tail, %"class.thrust::zip_iterator.973"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlSG_EEEEEC2IKSI_KSQ_KlKSG_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.995"* %this, %"class.thrust::zip_iterator.973"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.995"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.995"* %this, %"struct.thrust::detail::cons.995"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.973"* %t1, %"class.thrust::zip_iterator.973"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.979"* %t2, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.995"*, %"struct.thrust::detail::cons.995"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.995", %"struct.thrust::detail::cons.995"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.973"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.973"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.995", %"struct.thrust::detail::cons.995"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.996"* %tail, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS0_13binary_negateINS_8equal_toIiEEEEEEvEENS1_IlNS_9null_typeEEEEC2IKS9_KlKSA_SG_SG_SG_SG_SG_SG_SG_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.996"* %this, %"struct.thrust::detail::wrapped_function.979"* dereferenceable(1) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.996"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.979"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.996"* %this, %"struct.thrust::detail::cons.996"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.979"* %t1, %"struct.thrust::detail::wrapped_function.979"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.996"*, %"struct.thrust::detail::cons.996"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.996", %"struct.thrust::detail::cons.996"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.979"*, %"struct.thrust::detail::wrapped_function.979"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.979"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.979"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.996", %"struct.thrust::detail::cons.996"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %tail, i64* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 56, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 56, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 56, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.997"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.992", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 56, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !525
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.998"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.992"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1002"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.999"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEElSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1001"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 48, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 48, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchESB_S15_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %task to i8*
  call void @llvm.lifetime.start(i64 80, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 48, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %task to i8*
  call void @llvm.lifetime.end(i64 80, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.985"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.980", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !527
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S15_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 80, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.986"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEC2ESB_S15_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.980"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.990"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.987"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 80, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stS17_EN10workaround14supported_pathEjjmS1A_S17_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 80, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESO_NSL_INS_7pointerIjNS2_3tagENS_11use_defaultESR_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 80, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrIiEEEESO_NSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultESR_EEEENS0_9null_typeESU_SU_SU_SU_SU_SU_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINSK_13binary_negateINS0_8equal_toIiEEEEEEvEEjSU_SU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.989"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.973"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElEpLEl(%"class.thrust::iterator_facade.974"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.974"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.974"* %this, %"class.thrust::iterator_facade.974"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.974"*, %"class.thrust::iterator_facade.974"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.973"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.974"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE(%"class.thrust::zip_iterator.973"* dereferenceable(24) %call, i64 %0)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.973"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.974"* %this1)
  ret %"class.thrust::zip_iterator.973"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEEEEvRT_NSK_15difference_typeE(%"class.thrust::zip_iterator.973"* dereferenceable(24) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.973"* %f, %"class.thrust::zip_iterator.973"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl(%"class.thrust::zip_iterator.973"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.973"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElE7derivedEv(%"class.thrust::iterator_facade.974"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.974"*, align 8
  store %"class.thrust::iterator_facade.974"* %this, %"class.thrust::iterator_facade.974"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.974"*, %"class.thrust::iterator_facade.974"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.974"* %this1 to %"class.thrust::zip_iterator.973"*
  ret %"class.thrust::zip_iterator.973"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE7advanceEl(%"class.thrust::zip_iterator.973"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.973"* %this, %"class.thrust::zip_iterator.973"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.973", %"class.thrust::zip_iterator.973"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_(%"class.thrust::tuple.975"* dereferenceable(24) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EENS0_16advance_iteratorIlEEEET0_RT_SK_(%"class.thrust::tuple.975"* dereferenceable(24) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.975"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.975"* %t, %"class.thrust::tuple.975"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.975"*, %"class.thrust::tuple.975"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.975"* %0 to %"struct.thrust::detail::cons.976"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.976"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIiEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.975"*, %"class.thrust::tuple.975"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.975"* %2 to %"struct.thrust::detail::cons.976"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.977"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.976"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_(%"struct.thrust::detail::cons.977"* dereferenceable(16) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIiEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.858"* %it, %"class.thrust::detail::normal_iterator.858"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.858"* %0 to %"class.thrust::iterator_facade.860"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEpLEl(%"class.thrust::iterator_facade.860"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.976"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.976"*, align 8
  store %"struct.thrust::detail::cons.976"* %this, %"struct.thrust::detail::cons.976"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.976"*, %"struct.thrust::detail::cons.976"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.976", %"struct.thrust::detail::cons.976"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.858"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS3_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SL_(%"struct.thrust::detail::cons.977"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.977"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.977"* %t, %"struct.thrust::detail::cons.977"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.977"*, %"struct.thrust::detail::cons.977"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.977"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrIiEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.977"*, %"struct.thrust::detail::cons.977"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.977"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.977"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.976"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.976"*, align 8
  store %"struct.thrust::detail::cons.976"* %this, %"struct.thrust::detail::cons.976"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.976"*, %"struct.thrust::detail::cons.976"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.976", %"struct.thrust::detail::cons.976"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.977"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.977"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.977"*, align 8
  store %"struct.thrust::detail::cons.977"* %this, %"struct.thrust::detail::cons.977"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.977"*, %"struct.thrust::detail::cons.977"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.977", %"struct.thrust::detail::cons.977"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.858"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.977"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.977"*, align 8
  store %"struct.thrust::detail::cons.977"* %this, %"struct.thrust::detail::cons.977"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.977"*, %"struct.thrust::detail::cons.977"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.977", %"struct.thrust::detail::cons.977"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESA_NS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EEEEEENS_15iterator_traitsIT_E15difference_typeESM_SM_(%"class.thrust::zip_iterator.973"* byval align 8 %first, %"class.thrust::zip_iterator.973"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.973", align 8
  %agg.tmp2 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.973"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.973"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.973"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.973"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEESB_NS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEEEENS_15iterator_traitsIT_E15difference_typeESN_SN_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.973"* byval align 8 %first, %"class.thrust::zip_iterator.973"* byval align 8 %last) #8 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = bitcast %"class.thrust::zip_iterator.973"* %last to %"class.thrust::iterator_facade.974"*
  %2 = bitcast %"class.thrust::zip_iterator.973"* %first to %"class.thrust::iterator_facade.974"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.974"* dereferenceable(1) %1, %"class.thrust::iterator_facade.974"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES7_NS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_EEEENS2_IiijSG_SG_SG_SG_SG_SG_SG_EESC_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIiEESN_NS_9referenceIjSE_SD_EESG_SG_SG_SG_SG_SG_SG_EElSI_SJ_SC_SK_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.974"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.974"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.974"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.974"*, align 8
  store %"class.thrust::iterator_facade.974"* %lhs, %"class.thrust::iterator_facade.974"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.974"* %rhs, %"class.thrust::iterator_facade.974"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.974"*, %"class.thrust::iterator_facade.974"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.974"* %0 to %"class.thrust::zip_iterator.973"*
  %2 = load %"class.thrust::iterator_facade.974"*, %"class.thrust::iterator_facade.974"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.974"* %2 to %"class.thrust::zip_iterator.973"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_(%"class.thrust::zip_iterator.973"* dereferenceable(24) %1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENS4_20distance_from_resultIT_T0_E4typeERKSL_RKSM_(%"class.thrust::zip_iterator.973"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.973"* %f1, %"class.thrust::zip_iterator.973"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %f2, %"class.thrust::zip_iterator.973"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.973"* dereferenceable(24) %0, %"class.thrust::zip_iterator.973"* dereferenceable(24) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES8_NS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_EEEESJ_EENT_15difference_typeERKSK_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.973"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  store %"class.thrust::zip_iterator.973"* %f1, %"class.thrust::zip_iterator.973"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.973"* %f2, %"class.thrust::zip_iterator.973"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.973"* %1, %"class.thrust::zip_iterator.973"* dereferenceable(24) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE11distance_toISG_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.973"* %this, %"class.thrust::zip_iterator.973"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  store %"class.thrust::zip_iterator.973"* %this, %"class.thrust::zip_iterator.973"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.973"* %other, %"class.thrust::zip_iterator.973"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %other.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.975"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.973"* %0)
  %1 = bitcast %"class.thrust::tuple.975"* %call to %"struct.thrust::detail::cons.976"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.976"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %call2 to %"class.thrust::iterator_facade.860"*
  %call3 = call dereferenceable(24) %"class.thrust::tuple.975"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.973"* %this1)
  %3 = bitcast %"class.thrust::tuple.975"* %call3 to %"struct.thrust::detail::cons.976"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.976"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.858"* %call4 to %"class.thrust::iterator_facade.860"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElS5_iS9_SA_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.860"* dereferenceable(1) %2, %"class.thrust::iterator_facade.860"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrIiEEEENS1_4consIS5_NS6_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.976"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.976"*, align 8
  store %"struct.thrust::detail::cons.976"* %c, %"struct.thrust::detail::cons.976"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.976"*, %"struct.thrust::detail::cons.976"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE(%"struct.thrust::detail::cons.976"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.858"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrIiEEEES7_NS0_4consIS7_NSA_INS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeEEEEEEET_RKNSA_IT0_T1_EE(%"struct.thrust::detail::cons.976"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.976"*, align 8
  store %"struct.thrust::detail::cons.976"* %t, %"struct.thrust::detail::cons.976"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.976"*, %"struct.thrust::detail::cons.976"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.976", %"struct.thrust::detail::cons.976"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.858"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES6_NS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_EEEC2ESG_(%"class.thrust::zip_iterator.973"* %this, %"class.thrust::tuple.975"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.973"*, align 8
  store %"class.thrust::zip_iterator.973"* %this, %"class.thrust::zip_iterator.973"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.973"*, %"class.thrust::zip_iterator.973"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.973"* %this1 to %"class.thrust::iterator_facade.974"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.973", %"class.thrust::zip_iterator.973"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.975"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.975"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrIiEEEES5_NS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeESE_SE_SE_SE_SE_SE_EC2ERKS5_SH_RKSD_(%"class.thrust::tuple.975"* %this, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.975"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.975"* %this, %"class.thrust::tuple.975"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.858"* %t0, %"class.thrust::detail::normal_iterator.858"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.858"* %t1, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.975"*, %"class.thrust::tuple.975"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.975"* %this1 to %"struct.thrust::detail::cons.976"*
  %1 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.976"* %0, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_IS5_NS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEEEC2IKS5_SJ_KSD_KSE_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.976"* %this, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.976"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.976"* %this, %"struct.thrust::detail::cons.976"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.858"* %t1, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.858"* %t2, %"class.thrust::detail::normal_iterator.858"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t3, %"class.thrust::detail::normal_iterator.199"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.976"*, %"struct.thrust::detail::cons.976"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.976", %"struct.thrust::detail::cons.976"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.858"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.976", %"struct.thrust::detail::cons.976"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.977"* %tail, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrIiEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_9null_typeEEEEC2IKS5_KSD_KSE_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.977"* %this, %"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.977"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.858"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.977"* %this, %"struct.thrust::detail::cons.977"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.858"* %t1, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.977"*, %"struct.thrust::detail::cons.977"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.977", %"struct.thrust::detail::cons.977"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.858"*, %"class.thrust::detail::normal_iterator.858"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.858"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.858"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.977", %"struct.thrust::detail::cons.977"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIiEEEENS0_4consISH_NSI_ISC_NS_9null_typeEEEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.976"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.976"*, align 8
  store %"struct.thrust::detail::cons.976"* %t, %"struct.thrust::detail::cons.976"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.976"*, %"struct.thrust::detail::cons.976"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.976", %"struct.thrust::detail::cons.976"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIiEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.977"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS4_INS_10device_ptrIiEEEENS0_4consISC_NS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.977"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.977"*, align 8
  store %"struct.thrust::detail::cons.977"* %t, %"struct.thrust::detail::cons.977"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.977"*, %"struct.thrust::detail::cons.977"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.977", %"struct.thrust::detail::cons.977"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESC_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.220"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.199"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.860"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  store %"class.thrust::iterator_facade.860"* %this, %"class.thrust::iterator_facade.860"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.860"* %this1 to %"class.thrust::detail::normal_iterator.858"*
  ret %"class.thrust::detail::normal_iterator.858"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEmIEl(%"class.thrust::iterator_facade.860"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.860"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.860"* %this, %"class.thrust::iterator_facade.860"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.860"*, %"class.thrust::iterator_facade.860"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.860"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %sub = sub nsw i64 0, %0
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIiEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::detail::normal_iterator.858"* dereferenceable(8) %call, i64 %sub)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.858"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIiEEEEiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElE7derivedEv(%"class.thrust::iterator_facade.860"* %this1)
  ret %"class.thrust::detail::normal_iterator.858"* %call2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail13binary_negateINS_8equal_toIiEEEC2ERKS3_(%"struct.thrust::detail::binary_negate.953"* %this, %"struct.thrust::equal_to.877"* dereferenceable(1) %pred) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::binary_negate.953"*, align 8
  %pred.addr = alloca %"struct.thrust::equal_to.877"*, align 8
  store %"struct.thrust::detail::binary_negate.953"* %this, %"struct.thrust::detail::binary_negate.953"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::equal_to.877"* %pred, %"struct.thrust::equal_to.877"** %pred.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::binary_negate.953"*, %"struct.thrust::detail::binary_negate.953"** %this.addr, align 8
  %pred2 = getelementptr inbounds %"struct.thrust::detail::binary_negate.953", %"struct.thrust::detail::binary_negate.953"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::equal_to.877"*, %"struct.thrust::equal_to.877"** %pred.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.957"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.957"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.957"* %this, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.957"*, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.957"* %this1 to %"class.thrust::detail::tagged_allocator.958"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.958"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.957", %"class.thrust::detail::temporary_allocator.957"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cuda::detail::tag"* %call, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.957"* %this1 to %"class.thrust::detail::tagged_allocator.958"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.958"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.956"* %this, %"class.thrust::detail::temporary_allocator.957"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.957"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %this, %"struct.thrust::detail::no_throw_allocator.956"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.957"* %other, %"class.thrust::detail::temporary_allocator.957"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.956"* %this1 to %"class.thrust::detail::temporary_allocator.957"*
  %1 = load %"class.thrust::detail::temporary_allocator.957"*, %"class.thrust::detail::temporary_allocator.957"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.957"* %0, %"class.thrust::detail::temporary_allocator.957"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEC2EmRKSB_(%"class.thrust::detail::contiguous_storage.955"* %this, i64 %n, %"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  %n.addr = alloca i64, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store %"struct.thrust::detail::no_throw_allocator.956"* %alloc, %"struct.thrust::detail::no_throw_allocator.956"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.956"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.926"* %agg.tmp, %"struct.thrust::pair.82"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.960"* %m_begin, %"struct.thrust::pair.82"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !529
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.955"* %this1, i64 %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont3
  ret void

lpad:                                             ; preds = %invoke.cont3, %invoke.cont, %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.958"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.956"*)*)(%"struct.thrust::detail::no_throw_allocator.956"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.958"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.958"*, align 8
  store %"class.thrust::detail::tagged_allocator.958"* %this, %"class.thrust::detail::tagged_allocator.958"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.958"*, %"class.thrust::detail::tagged_allocator.958"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_4pairIiiEENS0_15temporary_arrayIS4_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.954"* dereferenceable(24), i64) #1 comdat {
entry:
  %.addr = alloca %"class.thrust::detail::temporary_array.954"*, align 8
  %.addr1 = alloca i64, align 8
  store %"class.thrust::detail::temporary_array.954"* %0, %"class.thrust::detail::temporary_array.954"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr1, align 8, !tbaa !13
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.955"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.955"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.958"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.956"*)*)(%"struct.thrust::detail::no_throw_allocator.956"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.958"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.956"*)*)(%"struct.thrust::detail::no_throw_allocator.956"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.958"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.958"*, align 8
  store %"class.thrust::detail::tagged_allocator.958"* %this, %"class.thrust::detail::tagged_allocator.958"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.958"*, %"class.thrust::detail::tagged_allocator.958"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.957"* %this, %"class.thrust::detail::temporary_allocator.957"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.957"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.957"*, align 8
  store %"class.thrust::detail::temporary_allocator.957"* %this, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.957"* %other, %"class.thrust::detail::temporary_allocator.957"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.957"*, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.957"* %this1 to %"class.thrust::detail::tagged_allocator.958"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.958"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.957", %"class.thrust::detail::temporary_allocator.957"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.957"*, %"class.thrust::detail::temporary_allocator.957"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.957", %"class.thrust::detail::temporary_allocator.957"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::tag"* %ref, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.956"* %this, %"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %this, %"struct.thrust::detail::no_throw_allocator.956"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.956"* %0, %"struct.thrust::detail::no_throw_allocator.956"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.956"* %this1 to %"class.thrust::detail::temporary_allocator.957"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.956"* %2 to %"class.thrust::detail::temporary_allocator.957"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.957"* %1, %"class.thrust::detail::temporary_allocator.957"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.960"* %this, %"struct.thrust::pair.82"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.960"* %this, %"class.thrust::detail::normal_iterator.960"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %this2 to %"class.thrust::iterator_adaptor.961"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.961"* %0, %"class.thrust::pointer.926"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.955"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.926", align 8
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.960"* %ref.tmp, %"struct.thrust::pair.82"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.960"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.960"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !529
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.926"* %agg.tmp7, %"struct.thrust::pair.82"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive8, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.960"* %ref.tmp6, %"struct.thrust::pair.82"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.960"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.960"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !529
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.961"* %this, %"class.thrust::pointer.926"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.961"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.926"*, align 8
  store %"class.thrust::iterator_adaptor.961"* %this, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.926"* %iter, %"class.thrust::pointer.926"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.961"*, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.961"* %this1 to %"class.thrust::iterator_facade.962"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.926"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.926"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.956"* %0 to %"class.thrust::detail::temporary_allocator.957"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.957"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.957"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.957"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.1004", align 8
  %ref.tmp = alloca %"struct.thrust::pair.1005", align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.957"* %this, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.957"*, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.1004"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.957"* %this1)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIiiEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.1005"* %ref.tmp to { %"struct.thrust::pair.82"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 0
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.1004"* %result, %"struct.thrust::pair.1005"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.1004", %"struct.thrust::pair.1004"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !533
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.1004", %"struct.thrust::pair.1004"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.926"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.957"* %this1, %"struct.thrust::pair.82"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.1004"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.1004", %"struct.thrust::pair.1004"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.926"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.926"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.1004"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive11, i32 0, i32 0
  %25 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.82"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIiiEENS_6system4cuda6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1005", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.1005", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIiiEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.1005"* %agg.tmp to { %"struct.thrust::pair.82"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 0
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.1005"* %agg.tmp to { %"struct.thrust::pair.82"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIiiEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.82"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.1005"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %14 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call3, 0
  store %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"** %14, align 8
  %16 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.1005"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %19 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %18, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.957"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.957"*, align 8
  store %"class.thrust::detail::temporary_allocator.957"* %this, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.957"*, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.957", %"class.thrust::detail::temporary_allocator.957"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cuda::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.1004"* %this, %"struct.thrust::pair.1005"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.1004"*, align 8
  %p.addr = alloca %"struct.thrust::pair.1005"*, align 8
  store %"struct.thrust::pair.1004"* %this, %"struct.thrust::pair.1004"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.1005"* %p, %"struct.thrust::pair.1005"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.1004"*, %"struct.thrust::pair.1004"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1004", %"struct.thrust::pair.1004"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.1005"*, %"struct.thrust::pair.1005"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.1005", %"struct.thrust::pair.1005"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.926"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.1004", %"struct.thrust::pair.1004"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.1005"*, %"struct.thrust::pair.1005"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.1005", %"struct.thrust::pair.1005"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !536
  store i64 %4, i64* %second, align 8, !tbaa !533
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.957"* %this, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.957"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.957"* %this, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.957"*, %"class.thrust::detail::temporary_allocator.957"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.957"* %this2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIiiEENS_6system4cuda6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.82"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1005", align 8
  %p = alloca %"struct.thrust::pair.1005", align 8
  %ptr = alloca %"class.thrust::pointer.926", align 8
  %0 = bitcast %"struct.thrust::pair.1005"* %p to { %"struct.thrust::pair.82"*, i64 }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.926"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.1005", %"struct.thrust::pair.1005"* %p, i32 0, i32 0
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.926"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.926"* %ptr, %"struct.thrust::pair.82"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.1005", %"struct.thrust::pair.1005"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.1005"* %retval, %"class.thrust::pointer.926"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.926"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.1005"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %6 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %5, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIiiEENS0_4cuda6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1005", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.926"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6mallocINS_4pairIiiEENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.926"* %ptr)
  %tobool = icmp ne %"struct.thrust::pair.82"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.926"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %call5 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.82"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.1005"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call5, 0
  store %"struct.thrust::pair.82"* %10, %"struct.thrust::pair.82"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.926"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.1005"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %15 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %14, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %15
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.1005"* %this, %"class.thrust::pointer.926"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.1005"*, align 8
  %x.addr = alloca %"class.thrust::pointer.926"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.1005"* %this, %"struct.thrust::pair.1005"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.926"* %x, %"class.thrust::pointer.926"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.1005"*, %"struct.thrust::pair.1005"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1005", %"struct.thrust::pair.1005"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.1005", %"struct.thrust::pair.1005"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !536
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.82"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1005", align 8
  %x = alloca %"class.thrust::pointer.926", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %x.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.1005"* %retval, %"class.thrust::pointer.926"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.1005"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %1 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %0, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.926", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.926"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), %"struct.thrust::pair.82"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.926", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.926"* dereferenceable(8) %ptr)
  %1 = bitcast %"struct.thrust::pair.82"* %call to i8*
  %call2 = call i32 @cudaFree(i8* %1)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.955"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.926", align 8
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.955"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %m_begin to %"class.thrust::iterator_adaptor.961"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.961"* %0)
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.955"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.82"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.926"* %agg.tmp6, %"struct.thrust::pair.82"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.960"* %ref.tmp, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.960"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.960"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !529
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.955"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !529
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.926"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.961"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.961"*, align 8
  store %"class.thrust::iterator_adaptor.961"* %this, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.961"*, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.926"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.956"* %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.956"* %this, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %this, %"struct.thrust::detail::no_throw_allocator.956"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.956"* %this2 to %"class.thrust::detail::temporary_allocator.957"*
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.957"* %0, %"struct.thrust::pair.82"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic15replace_copy_ifINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS_6negateIjEESB_EET2_RNS_16execution_policyIT_EET0_SR_T1_SM_T3_RKT4_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, i32* %stencil.coerce, %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"* dereferenceable(8) %new_value) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %stencil = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %pred = alloca %"struct.thrust::negate", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %new_value.addr = alloca %"struct.thrust::pair.82"*, align 8
  %op = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.1006", align 4
  %agg.tmp = alloca %"struct.thrust::negate", align 1
  %agg.tmp18 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp22 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %agg.tmp23 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.1006", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %stencil, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %stencil.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %new_value, %"struct.thrust::pair.82"** %new_value.addr, align 8, !tbaa !7
  %0 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %op to i8*
  call void @llvm.lifetime.start(i64 12, i8* %0) #5
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %new_value.addr, align 8
  %2 = bitcast %"struct.thrust::pair.82"* %agg.tmp18 to i8*
  %3 = bitcast %"struct.thrust::pair.82"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 4, i1 false), !tbaa.struct !471
  %4 = bitcast %"struct.thrust::pair.82"* %agg.tmp18 to i64*
  %5 = load i64, i64* %4, align 4
  call void @_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEES8_EC2ES6_S8_(%"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %op, i64 %5)
  %6 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %7 = bitcast %"struct.thrust::execution_policy.120"* %6 to %"struct.thrust::detail::execution_policy_base.121"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp19 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.870"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp20 to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.870"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp21 to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.199"* %stencil to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.960"* %agg.tmp22 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.960"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %agg.tmp23 to i8*
  %17 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false), !tbaa.struct !538
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp19, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive27, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp20, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive31, i32 0, i32 0
  %coerce.dive33 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive32, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive33, align 8
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp21, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive36, i32 0, i32 0
  %20 = load i32*, i32** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp22, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive40, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive41, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %7, %"struct.thrust::pair.82"* %18, %"struct.thrust::pair.82"* %19, i32* %20, %"struct.thrust::pair.82"* %21, %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* byval align 8 %agg.tmp23)
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive44, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive45, align 8
  %22 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %op to i8*
  call void @llvm.lifetime.end(i64 12, i8* %22) #5
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive48, i32 0, i32 0
  %23 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive49, align 8
  ret %"struct.thrust::pair.82"* %23
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEES8_EC2ES6_S8_(%"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %this, i64 %nv.coerce) unnamed_addr #1 comdat align 2 {
entry:
  %p = alloca %"struct.thrust::negate", align 1
  %nv = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.1006"*, align 8
  %0 = bitcast %"struct.thrust::pair.82"* %nv to i64*
  store i64 %nv.coerce, i64* %0, align 4
  store %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %this, %"struct.thrust::system::detail::generic::detail::new_value_if.1006"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::detail::generic::detail::new_value_if.1006"*, %"struct.thrust::system::detail::generic::detail::new_value_if.1006"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::new_value_if.1006", %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %this1, i32 0, i32 0
  %new_value = getelementptr inbounds %"struct.thrust::system::detail::generic::detail::new_value_if.1006", %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %this1, i32 0, i32 1
  %1 = bitcast %"struct.thrust::pair.82"* %new_value to i8*
  %2 = bitcast %"struct.thrust::pair.82"* %nv to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 4, i1 false), !tbaa.struct !471
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust9transformINS_6system4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS6_INS_7pointerIjS4_NS_11use_defaultESD_EEEENS6_INSC_IS9_S4_SD_SD_EEEENS1_6detail7generic6detail12new_value_ifINS_6negateIjEES9_S9_EEEET2_RKNS5_21execution_policy_baseIT_EET0_SV_T1_SP_T3_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* byval align 8 %op) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp19 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %agg.tmp22 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.1006", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call18 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call18 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.870"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.870"* %agg.tmp19 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.870"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.199"* %agg.tmp20 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.199"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %8 = bitcast %"class.thrust::detail::normal_iterator.960"* %agg.tmp21 to i8*
  %9 = bitcast %"class.thrust::detail::normal_iterator.960"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 8, i32 8, i1 false)
  %10 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %agg.tmp22 to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false), !tbaa.struct !538
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive26, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %agg.tmp19, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive31, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %agg.tmp20, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive35, i32 0, i32 0
  %14 = load i32*, i32** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %agg.tmp21, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive39, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive40, align 8
  %call41 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %12, %"struct.thrust::pair.82"* %13, i32* %14, %"struct.thrust::pair.82"* %15, %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* byval align 8 %agg.tmp22)
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive44, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call41, %"struct.thrust::pair.82"** %coerce.dive45, align 8
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive48, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive49, align 8
  ret %"struct.thrust::pair.82"* %16
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic9transformINS0_4cuda6detail3tagENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS6_NS_11use_defaultESF_EEEENS8_INSE_ISB_S6_SF_SF_EEEENS2_6detail12new_value_ifINS_6negateIjEESB_SB_EEEET2_RNS_16execution_policyIT_EET0_SU_T1_SP_T3_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, i32* %first2.coerce, %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* byval align 8 %op) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %first1 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.199", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %zipped_result = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp18 = alloca %"class.thrust::tuple.1009", align 8
  %agg.tmp19 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp20 = alloca %"class.thrust::tuple.1009", align 8
  %agg.tmp21 = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %agg.tmp22 = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.1006", align 4
  %agg.tmp22.coerce = alloca { i64, i32 }, align 4
  %agg.tmp21.coerce = alloca { i64, i32 }, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %last1, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.199", %"class.thrust::detail::normal_iterator.199"* %first2, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.200", %"class.thrust::iterator_adaptor.200"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.202", %"class.thrust::pointer.202"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.203", %"class.thrust::iterator_adaptor.203"* %coerce.dive12, i32 0, i32 0
  store i32* %first2.coerce, i32** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %result, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive16, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.1007"* %zipped_result to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.1009"* sret %agg.tmp18, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.1007"* sret %agg.tmp, %"class.thrust::tuple.1009"* byval align 8 %agg.tmp18)
  call void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.1009"* sret %agg.tmp20, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %first2, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %result)
  call void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.1007"* sret %agg.tmp19, %"class.thrust::tuple.1009"* byval align 8 %agg.tmp20)
  %3 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %agg.tmp22 to i8*
  %4 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 12, i32 4, i1 false), !tbaa.struct !538
  %5 = bitcast { i64, i32 }* %agg.tmp22.coerce to i8*
  %6 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %agg.tmp22 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp22.coerce, i32 0, i32 0
  %8 = load i64, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp22.coerce, i32 0, i32 1
  %10 = load i32, i32* %9, align 4
  call void @_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESA_EEEC2ESB_(%"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp21, i64 %8, i32 %10)
  %11 = bitcast { i64, i32 }* %agg.tmp21.coerce to i8*
  %12 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp21 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 12, i32 4, i1 false)
  %13 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp21.coerce, i32 0, i32 0
  %14 = load i64, i64* %13, align 4
  %15 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp21.coerce, i32 0, i32 1
  %16 = load i32, i32* %15, align 4
  call void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_(%"class.thrust::zip_iterator.1007"* sret %zipped_result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp19, i64 %14, i32 %16)
  %call = call dereferenceable(24) %"class.thrust::tuple.1009"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1007"* %zipped_result)
  %17 = bitcast %"class.thrust::tuple.1009"* %call to %"struct.thrust::detail::cons.1010"*
  %call23 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %17)
  %18 = bitcast %"class.thrust::detail::normal_iterator.960"* %retval to i8*
  %19 = bitcast %"class.thrust::detail::normal_iterator.960"* %call23 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %18, i8* %19, i64 8, i32 8, i1 false)
  %20 = bitcast %"class.thrust::zip_iterator.1007"* %zipped_result to i8*
  call void @llvm.lifetime.end(i64 24, i8* %20) #5
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive26, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  ret %"struct.thrust::pair.82"* %21
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust8for_eachINS_6system4cuda6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESW_SW_T1_(%"class.thrust::zip_iterator.1007"* noalias sret %agg.result, %"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.1007"* byval align 8 %first, %"class.thrust::zip_iterator.1007"* byval align 8 %last, i64 %f.coerce0, i32 %f.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %coerce = alloca { i64, i32 }, align 4
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %agg.tmp3.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %f.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %f.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %f to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %4 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %4)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %5 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %6 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 24, i32 8, i1 false)
  %8 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp2 to i8*
  %9 = bitcast %"class.thrust::zip_iterator.1007"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 24, i32 8, i1 false)
  %10 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp3 to i8*
  %11 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false), !tbaa.struct !538
  %12 = bitcast { i64, i32 }* %agg.tmp3.coerce to i8*
  %13 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 12, i32 4, i1 false)
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp3.coerce, i32 0, i32 0
  %15 = load i64, i64* %14, align 4
  %16 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp3.coerce, i32 0, i32 1
  %17 = load i32, i32* %16, align 4
  call void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_(%"class.thrust::zip_iterator.1007"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %5, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp2, i64 %15, i32 %17)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"class.thrust::zip_iterator.1007"* noalias sret %agg.result, %"class.thrust::tuple.1009"* byval align 8 %t) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::tuple.1009", align 8
  %0 = bitcast %"class.thrust::tuple.1009"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::tuple.1009"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.1007"* %agg.result, %"class.thrust::tuple.1009"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEEEENS1_17make_tuple_mapperIT_T0_T1_NS_9null_typeESM_SM_SM_SM_SM_SM_E4typeERKSJ_RKSK_RKSL_(%"class.thrust::tuple.1009"* noalias sret %agg.result, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t2) #8 comdat {
entry:
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  store %"class.thrust::detail::normal_iterator.870"* %t0, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.960"* %t2, %"class.thrust::detail::normal_iterator.960"** %t2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t2.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_(%"class.thrust::tuple.1009"* %agg.result, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESA_EEEC2ESB_(%"struct.thrust::detail::binary_transform_functor.1013"* %this, i64 %f.coerce0, i32 %f.coerce1) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::detail::generic::detail::new_value_if.1006", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"struct.thrust::detail::binary_transform_functor.1013"*, align 8
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %f.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %f.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %f to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"struct.thrust::detail::binary_transform_functor.1013"* %this, %"struct.thrust::detail::binary_transform_functor.1013"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::binary_transform_functor.1013"*, %"struct.thrust::detail::binary_transform_functor.1013"** %this.addr, align 8
  %f2 = getelementptr inbounds %"struct.thrust::detail::binary_transform_functor.1013", %"struct.thrust::detail::binary_transform_functor.1013"* %this1, i32 0, i32 0
  %4 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %f2 to i8*
  %5 = bitcast %"struct.thrust::system::detail::generic::detail::new_value_if.1006"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false), !tbaa.struct !538
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust3getILi2ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1010"*, align 8
  store %"struct.thrust::detail::cons.1010"* %c, %"struct.thrust::detail::cons.1010"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1010"*, %"struct.thrust::detail::cons.1010"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.960"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::tuple.1009"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1007"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  store %"class.thrust::zip_iterator.1007"* %this, %"class.thrust::zip_iterator.1007"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.1007", %"class.thrust::zip_iterator.1007"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.1009"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail8for_eachINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_SW_T1_(%"class.thrust::zip_iterator.1007"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.1007"* byval align 8 %first, %"class.thrust::zip_iterator.1007"* byval align 8 %last, i64 %f.coerce0, i32 %f.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %coerce = alloca { i64, i32 }, align 4
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %agg.tmp3.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %f.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %f.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %f to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %4 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %5 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 8, i1 false)
  %7 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp1 to i8*
  %8 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp2 to i8*
  %10 = bitcast %"class.thrust::zip_iterator.1007"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_(%"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp1, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp2)
  %11 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp3 to i8*
  %12 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 12, i32 4, i1 false), !tbaa.struct !538
  %13 = bitcast { i64, i32 }* %agg.tmp3.coerce to i8*
  %14 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 12, i32 4, i1 false)
  %15 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp3.coerce, i32 0, i32 0
  %16 = load i64, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp3.coerce, i32 0, i32 1
  %18 = load i32, i32* %17, align 4
  call void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_(%"class.thrust::zip_iterator.1007"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %4, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp, i64 %call, i64 %16, i32 %18)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_(%"class.thrust::zip_iterator.1007"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.1007"* byval align 8 %first, i64 %n, i64 %f.coerce0, i32 %f.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %coerce = alloca { i64, i32 }, align 4
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp1 = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %f.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %f.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %f to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %4 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %5 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 8, i1 false)
  %7 = load i64, i64* %n.addr, align 8, !tbaa !13
  %8 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp1 to i8*
  %9 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false), !tbaa.struct !538
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  call void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_(%"class.thrust::zip_iterator.1007"* sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %4, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp, i64 %7, i64 %13, i32 %15)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEEEENS_15iterator_traitsIT_E15difference_typeESO_SO_(%"class.thrust::zip_iterator.1007"* byval align 8 %first, %"class.thrust::zip_iterator.1007"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.1007", align 8
  %0 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.1007"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_(%"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjS4_NS_11use_defaultESF_EEEENS8_INSE_ISB_S4_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEElNS7_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESB_SB_EEEEEET0_RNS2_16execution_policyIT_EESW_T1_T2_EN10workaround13parallel_pathERNSX_IS4_EESM_lSV_(%"class.thrust::zip_iterator.1007"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::zip_iterator.1007"* byval align 8 %first, i64 %n, i64 %f.coerce0, i32 %f.coerce1) #0 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::detail::binary_transform_functor.1013", align 4
  %coerce = alloca { i64, i32 }, align 4
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce1 = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp4 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp5 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %agg.tmp5.coerce = alloca { i64, i32 }, align 4
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce10 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp12 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp14 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp15 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp16 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp17 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %agg.tmp17.coerce = alloca { i64, i32 }, align 4
  %ref.tmp20 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp23 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp26 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp27 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp28 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp29 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %agg.tmp29.coerce = alloca { i64, i32 }, align 4
  %ref.tmp30 = alloca i32, align 4
  %agg.tmp.ensured33 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp34 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp39 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp40 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp41 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp42 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %agg.tmp42.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %f.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %f.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %f to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %4 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 12, i8* %4) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESB_EEEEvEC2ERKSD_(%"struct.thrust::detail::wrapped_function.1014"* %wrapped_f, %"struct.thrust::detail::binary_transform_functor.1013"* dereferenceable(12) %f)
  %5 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %6 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %7 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %8 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce1, i32 0, i32 0
  %9 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive to { i32*, i32* }*
  %10 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %9, i32 0, i32 0
  %11 = extractvalue { i32*, i32* } %call, 0
  store i32* %11, i32** %10, align 8
  %12 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %9, i32 0, i32 1
  %13 = extractvalue { i32*, i32* } %call, 1
  store i32* %13, i32** %12, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %14 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp4 to i8*
  %16 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %16, i64 24, i32 8, i1 false)
  %17 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp5 to i8*
  %18 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %17, i8* %18, i64 12, i32 4, i1 false), !tbaa.struct !538
  %19 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %20 = bitcast { i64, i32 }* %agg.tmp5.coerce to i8*
  %21 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp5 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %20, i8* %21, i64 12, i32 4, i1 false)
  %22 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp5.coerce, i32 0, i32 0
  %23 = load i64, i64* %22, align 4
  %24 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp5.coerce, i32 0, i32 1
  %25 = load i32, i32* %24, align 4
  %call6 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEESG_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp4, i64 %23, i32 %25, i32 %19)
  %26 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call6, i64* %26, align 4
  %call7 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce1, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %27 = load i64, i64* %n.addr, align 8, !tbaa !13
  %28 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %29 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %28, %29
  %call8 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %27, i32 %mul)
  br i1 %call8, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %30 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %30) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %31 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %31) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call9 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce10, i32 0, i32 0
  %32 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive11 to { i64*, i64* }*
  %33 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %32, i32 0, i32 0
  %34 = extractvalue { i64*, i64* } %call9, 0
  store i64* %34, i64** %33, align 8
  %35 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %32, i32 0, i32 1
  %36 = extractvalue { i64*, i64* } %call9, 1
  store i64* %36, i64** %35, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp13, i64 2147483647, i64 2147483647, i64 2147483647)
  %37 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp15 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %37, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %38 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp16 to i8*
  %39 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %38, i8* %39, i64 24, i32 8, i1 false)
  %40 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp17 to i8*
  %41 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %40, i8* %41, i64 12, i32 4, i1 false), !tbaa.struct !538
  %42 = load i64, i64* %n.addr, align 8, !tbaa !13
  %43 = bitcast { i64, i32 }* %agg.tmp17.coerce to i8*
  %44 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp17 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* %44, i64 12, i32 4, i1 false)
  %45 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp17.coerce, i32 0, i32 0
  %46 = load i64, i64* %45, align 4
  %47 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp17.coerce, i32 0, i32 1
  %48 = load i32, i32* %47, align 4
  %call18 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEESG_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp13, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp16, i64 %46, i32 %48, i64 %42)
  %49 = bitcast %"struct.thrust::pair.82"* %ref.tmp12 to i64*
  store i64 %call18, i64* %49, align 4
  %call19 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce10, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp12)
  %50 = load i64, i64* %n.addr, align 8, !tbaa !13
  %51 = load i64, i64* %group_size, align 8, !tbaa !13
  %call21 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %50, i64 %51)
  store i64 %call21, i64* %ref.tmp20, align 8, !tbaa !13
  %call22 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp20)
  store i64 %call22, i64* %num_groups, align 8, !tbaa !13
  %52 = load i64, i64* %num_groups, align 8, !tbaa !13
  %53 = load i64, i64* %group_size, align 8, !tbaa !13
  %54 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %55 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %54 to %"struct.thrust::detail::execution_policy_base.121"*
  %call24 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %55)
  %56 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call24 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call25 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %56)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp23, i64 %52, i64 %53, i64 0, %struct.CUstream_st* %call25)
  %57 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp27 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %57, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %58 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp28 to i8*
  %59 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %58, i8* %59, i64 24, i32 8, i1 false)
  %60 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp29 to i8*
  %61 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 12, i32 4, i1 false), !tbaa.struct !538
  %62 = load i64, i64* %n.addr, align 8, !tbaa !13
  %63 = bitcast { i64, i32 }* %agg.tmp29.coerce to i8*
  %64 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp29 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %63, i8* %64, i64 12, i32 4, i1 false)
  %65 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp29.coerce, i32 0, i32 0
  %66 = load i64, i64* %65, align 4
  %67 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp29.coerce, i32 0, i32 1
  %68 = load i32, i32* %67, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp23, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp28, i64 %66, i32 %68, i64 %62)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %69 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %69) #5
  %70 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %70) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %71 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %72 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call31 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %71, i32 %72)
  store i32 %call31, i32* %ref.tmp30, align 4, !tbaa !11
  %call32 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp30)
  store i32 %call32, i32* %narrow_num_groups, align 4, !tbaa !11
  %73 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv35 = zext i32 %73 to i64
  %74 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv36 = zext i32 %74 to i64
  %75 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %76 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %75 to %"struct.thrust::detail::execution_policy_base.121"*
  %call37 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %76)
  %77 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call37 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call38 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %77)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp34, i64 %conv35, i64 %conv36, i64 0, %struct.CUstream_st* %call38)
  %78 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp40 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %78, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %79 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp41 to i8*
  %80 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %79, i8* %80, i64 24, i32 8, i1 false)
  %81 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp42 to i8*
  %82 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %81, i8* %82, i64 12, i32 4, i1 false), !tbaa.struct !538
  %83 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %84 = bitcast { i64, i32 }* %agg.tmp42.coerce to i8*
  %85 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %agg.tmp42 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %84, i8* %85, i64 12, i32 4, i1 false)
  %86 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp42.coerce, i32 0, i32 0
  %87 = load i64, i64* %86, align 4
  %88 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp42.coerce, i32 0, i32 1
  %89 = load i32, i32* %88, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured33, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp34, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp41, i64 %87, i32 %89, i32 %83)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured33) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %90 = bitcast %"class.thrust::zip_iterator.1007"* %first to %"class.thrust::iterator_facade.1008"*
  %91 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE(%"class.thrust::zip_iterator.1007"* sret %agg.result, %"class.thrust::iterator_facade.1008"* dereferenceable(1) %90, i64 %91)
  %92 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %92) #5
  %93 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %93) #5
  %94 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %94) #5
  %95 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 12, i8* %95) #5
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESB_EEEEvEC2ERKSD_(%"struct.thrust::detail::wrapped_function.1014"* %this, %"struct.thrust::detail::binary_transform_functor.1013"* dereferenceable(12) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %f.addr = alloca %"struct.thrust::detail::binary_transform_functor.1013"*, align 8
  store %"struct.thrust::detail::wrapped_function.1014"* %this, %"struct.thrust::detail::wrapped_function.1014"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::binary_transform_functor.1013"* %f, %"struct.thrust::detail::binary_transform_functor.1013"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.1014", %"struct.thrust::detail::wrapped_function.1014"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::binary_transform_functor.1013"*, %"struct.thrust::detail::binary_transform_functor.1013"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::binary_transform_functor.1013"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 12, i32 4, i1 false), !tbaa.struct !538
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEESG_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.1007"* byval align 8 %arg2, i64 %arg3.coerce0, i32 %arg3.coerce1, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %coerce = alloca { i64, i32 }, align 4
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %arg3.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %arg3.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %arg3 to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* sret %agg.tmp2, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEESH_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp2)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %6, align 4
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEESG_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::zip_iterator.1007"* byval align 8 %arg2, i64 %arg3.coerce0, i32 %arg3.coerce1, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %coerce = alloca { i64, i32 }, align 4
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %arg3.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %arg3.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %arg3 to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* sret %agg.tmp2, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEESH_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp2)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %6, align 4
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.1007"* byval align 8 %arg2, i64 %arg3.coerce0, i32 %arg3.coerce1, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %coerce = alloca { i64, i32 }, align 4
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %arg3.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %arg3.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %arg3 to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* sret %agg.tmp2, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::zip_iterator.1007"* byval align 8 %arg2, i64 %arg3.coerce0, i32 %arg3.coerce1, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.1014", align 4
  %coerce = alloca { i64, i32 }, align 4
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %arg3.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %arg3.coerce1, i32* %1, align 4
  %2 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %arg3 to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* sret %agg.tmp2, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %arg2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEET_RKNS_15iterator_facadeISW_T0_T1_T2_T3_T4_EENSW_15difference_typeE(%"class.thrust::zip_iterator.1007"* noalias sret %agg.result, %"class.thrust::iterator_facade.1008"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %i.addr = alloca %"class.thrust::iterator_facade.1008"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.1007", align 8
  store %"class.thrust::iterator_facade.1008"* %i, %"class.thrust::iterator_facade.1008"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.1007"* %tmp to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.1008"*, %"class.thrust::iterator_facade.1008"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.1008"* %1 to %"class.thrust::zip_iterator.1007"*
  %3 = bitcast %"class.thrust::zip_iterator.1007"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.1007"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 24, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.1007"* %tmp to %"class.thrust::iterator_facade.1008"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.1007"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl(%"class.thrust::iterator_facade.1008"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.1007"* %agg.result to i8*
  %8 = bitcast %"class.thrust::zip_iterator.1007"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.1007"* %tmp to i8*
  call void @llvm.lifetime.end(i64 24, i8* %9) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEEjSR_SR_SR_SR_SR_SR_EEEEEESH_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1016", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %a2, %"class.thrust::zip_iterator.1007"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %a3, %"struct.thrust::detail::wrapped_function.1014"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.1016"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %agg.result, %"class.thrust::tuple.1016"* dereferenceable(48) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEEjEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.1016"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %t1, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t2, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj(%"class.thrust::tuple.1016"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEEjSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %this, %"class.thrust::tuple.1016"* dereferenceable(48) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1016"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1016"* %args, %"class.thrust::tuple.1016"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1016"*, %"class.thrust::tuple.1016"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1016"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1016"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 48, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEEjSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKj(%"class.thrust::tuple.1016"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1016"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1016"* %this, %"class.thrust::tuple.1016"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %t1, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t2, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1016"*, %"class.thrust::tuple.1016"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1016"* %this1 to %"struct.thrust::detail::cons.1017"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1017"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IjSO_EEEEEEEC2IKS8_KSQ_KS11_KjKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1017"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1017"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1017"* %this, %"struct.thrust::detail::cons.1017"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %t2, %"class.thrust::zip_iterator.1007"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t3, %"struct.thrust::detail::wrapped_function.1014"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1017"*, %"struct.thrust::detail::cons.1017"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1017", %"struct.thrust::detail::cons.1017"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1017", %"struct.thrust::detail::cons.1017"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1018"* %tail, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IjSK_EEEEEC2IKSM_KSX_KjKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1018"* %this, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1018"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1018"* %this, %"struct.thrust::detail::cons.1018"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.1007"* %t1, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t2, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1018"*, %"struct.thrust::detail::cons.1018"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1018", %"struct.thrust::detail::cons.1018"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.1007"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.1007"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1018", %"struct.thrust::detail::cons.1018"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1019"* %tail, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESC_EEEEvEENS1_IjNS_9null_typeEEEEC2IKSF_KjKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1019"* %this, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t1, i32* dereferenceable(4) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1019"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t2.addr = alloca i32*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1019"* %this, %"struct.thrust::detail::cons.1019"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.1014"* %t1, %"struct.thrust::detail::wrapped_function.1014"** %t1.addr, align 8, !tbaa !7
  store i32* %t2, i32** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1019"*, %"struct.thrust::detail::cons.1019"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1019", %"struct.thrust::detail::cons.1019"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 12, i32 4, i1 false), !tbaa.struct !538
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1019", %"struct.thrust::detail::cons.1019"* %this1, i32 0, i32 1
  %3 = load i32*, i32** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIjNS_9null_typeEEC2IKjEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.159"* %tail, i32* dereferenceable(4) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS9_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSE_INS_7pointerIjNS2_3tagENS_11use_defaultESM_EEEENSE_INSK_ISH_SL_SM_SM_EEEENS_9null_typeESR_SR_SR_SR_SR_SR_EEEENSD_16wrapped_functionINSD_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESH_SH_EEEEvEElSR_SR_SR_SR_SR_SR_EEEEEESH_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SQ_SQ_SQ_SQ_SQ_SQ_EEEES15_RKS16_RKS17_RKS18_RKS19_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %a2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1028", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %a2, %"class.thrust::zip_iterator.1007"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %a3, %"struct.thrust::detail::wrapped_function.1014"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.1028"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %agg.result, %"class.thrust::tuple.1028"* dereferenceable(56) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS3_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENSA_16wrapped_functionINSA_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEElEENSA_17make_tuple_mapperIT_T0_T1_T2_SO_SO_SO_SO_SO_SO_E4typeERKS13_RKS14_RKS15_RKS16_(%"class.thrust::tuple.1028"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %t1, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t2, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl(%"class.thrust::tuple.1028"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSD_INS_7pointerIjNS2_3tagENS_11use_defaultESL_EEEENSD_INSJ_ISG_SK_SL_SL_EEEENS_9null_typeESQ_SQ_SQ_SQ_SQ_SQ_EEEENSC_16wrapped_functionINSC_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESG_SG_EEEEvEElSQ_SQ_SQ_SQ_SQ_SQ_EEEC2ES7_RKS14_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %this, %"class.thrust::tuple.1028"* dereferenceable(56) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1028"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1028"* %args, %"class.thrust::tuple.1028"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1028"*, %"class.thrust::tuple.1028"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1028"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1028"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 56, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSA_INS_7pointerIjNS3_3tagENS_11use_defaultESI_EEEENSA_INSG_ISD_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEENS9_16wrapped_functionINS9_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS_6negateIjEESD_SD_EEEEvEElSN_SN_SN_SN_SN_SN_EC2ERKS7_RKSP_RKS10_RKl(%"class.thrust::tuple.1028"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1028"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1028"* %this, %"class.thrust::tuple.1028"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %t1, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t2, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1028"*, %"class.thrust::tuple.1028"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1028"* %this1 to %"struct.thrust::detail::cons.1029"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1029"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSB_INS_7pointerIjNS4_3tagENS_11use_defaultESJ_EEEENSB_INSH_ISE_SI_SJ_SJ_EEEENS_9null_typeESO_SO_SO_SO_SO_SO_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINS2_6detail7generic6detail12new_value_ifINS_6negateIjEESE_SE_EEEEvEENS1_IlSO_EEEEEEEC2IKS8_KSQ_KS11_KlKSO_S1B_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1029"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t2, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1029"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1029"* %this, %"struct.thrust::detail::cons.1029"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %t2, %"class.thrust::zip_iterator.1007"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t3, %"struct.thrust::detail::wrapped_function.1014"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1029"*, %"struct.thrust::detail::cons.1029"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1029", %"struct.thrust::detail::cons.1029"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1029", %"struct.thrust::detail::cons.1029"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1030"* %tail, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %3, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS1_INS0_16wrapped_functionINS0_24binary_transform_functorINSB_6detail7generic6detail12new_value_ifINS_6negateIjEES7_S7_EEEEvEENS1_IlSK_EEEEEC2IKSM_KSX_KlKSK_S15_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1030"* %this, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %t1, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1030"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1030"* %this, %"struct.thrust::detail::cons.1030"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.1007"* %t1, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.1014"* %t2, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1030"*, %"struct.thrust::detail::cons.1030"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1030", %"struct.thrust::detail::cons.1030"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.1007"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.1007"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1030", %"struct.thrust::detail::cons.1030"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1031"* %tail, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_24binary_transform_functorINS_6system6detail7generic6detail12new_value_ifINS_6negateIjEENS_4pairIiiEESC_EEEEvEENS1_IlNS_9null_typeEEEEC2IKSF_KlKSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1031"* %this, %"struct.thrust::detail::wrapped_function.1014"* dereferenceable(12) %t1, i64* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1031"*, align 8
  %t1.addr = alloca %"struct.thrust::detail::wrapped_function.1014"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1031"* %this, %"struct.thrust::detail::cons.1031"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::wrapped_function.1014"* %t1, %"struct.thrust::detail::wrapped_function.1014"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1031"*, %"struct.thrust::detail::cons.1031"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1031", %"struct.thrust::detail::cons.1031"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::wrapped_function.1014"*, %"struct.thrust::detail::wrapped_function.1014"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %head to i8*
  %2 = bitcast %"struct.thrust::detail::wrapped_function.1014"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 12, i32 4, i1 false), !tbaa.struct !538
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1031", %"struct.thrust::detail::cons.1031"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS_9null_typeEEC2IKlEERT_RKS2_S9_S9_S9_S9_S9_S9_S9_S9_(%"struct.thrust::detail::cons.165"* %tail, i64* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 64, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 64, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %task to i8*
  call void @llvm.lifetime.start(i64 96, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 64, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 96, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %task to i8*
  call void @llvm.lifetime.end(i64 96, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1032"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !539
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 96, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1033"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1027"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1037"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1034"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 96, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 96, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 96, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEElSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1036"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 56, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 56, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 56, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchESB_S1C_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 56, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1020"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 56, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !541
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1C_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1021"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEC2ESB_S1C_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1015"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 56, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1025"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1022"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE6launchEjjmP11CUstream_stS1E_EN10workaround14supported_pathEjjmS1H_S1E_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSL_INS_7pointerIjNS2_3tagENS_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_10device_ptrINS0_4pairIiiEEEEEENSL_INS0_7pointerIjNS3_3tagENS0_11use_defaultEST_EEEENSL_INSR_ISO_SS_ST_ST_EEEENS0_9null_typeESY_SY_SY_SY_SY_SY_EEEENSK_16wrapped_functionINSK_24binary_transform_functorINS1_6detail7generic6detail12new_value_ifINS0_6negateIjEESO_SO_EEEEvEEjSY_SY_SY_SY_SY_SY_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1024"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.1007"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElEpLEl(%"class.thrust::iterator_facade.1008"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1008"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.1008"* %this, %"class.thrust::iterator_facade.1008"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.1008"*, %"class.thrust::iterator_facade.1008"** %this.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::zip_iterator.1007"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1008"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE(%"class.thrust::zip_iterator.1007"* dereferenceable(24) %call, i64 %0)
  %call2 = call dereferenceable(24) %"class.thrust::zip_iterator.1007"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1008"* %this1)
  ret %"class.thrust::zip_iterator.1007"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEEEEvRT_NSO_15difference_typeE(%"class.thrust::zip_iterator.1007"* dereferenceable(24) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.1007"* %f, %"class.thrust::zip_iterator.1007"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl(%"class.thrust::zip_iterator.1007"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(24) %"class.thrust::zip_iterator.1007"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1008"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1008"*, align 8
  store %"class.thrust::iterator_facade.1008"* %this, %"class.thrust::iterator_facade.1008"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1008"*, %"class.thrust::iterator_facade.1008"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1008"* %this1 to %"class.thrust::zip_iterator.1007"*
  ret %"class.thrust::zip_iterator.1007"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE7advanceEl(%"class.thrust::zip_iterator.1007"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.1007"* %this, %"class.thrust::zip_iterator.1007"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.1007", %"class.thrust::zip_iterator.1007"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_(%"class.thrust::tuple.1009"* dereferenceable(24) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EENS0_16advance_iteratorIlEEEET0_RT_SO_(%"class.thrust::tuple.1009"* dereferenceable(24) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.1009"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.1009"* %t, %"class.thrust::tuple.1009"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.1009"*, %"class.thrust::tuple.1009"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1009"* %0 to %"struct.thrust::detail::cons.1010"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.1010"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.1009"*, %"class.thrust::tuple.1009"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.1009"* %2 to %"struct.thrust::detail::cons.1010"*
  %call1 = call dereferenceable(16) %"struct.thrust::detail::cons.1011"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.1010"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIiiEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_(%"struct.thrust::detail::cons.1011"* dereferenceable(16) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.870"* %it, %"class.thrust::detail::normal_iterator.870"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.870"* %0 to %"class.thrust::iterator_facade.872"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEpLEl(%"class.thrust::iterator_facade.872"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_headEv(%"struct.thrust::detail::cons.1010"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1010"*, align 8
  store %"struct.thrust::detail::cons.1010"* %this, %"struct.thrust::detail::cons.1010"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1010"*, %"struct.thrust::detail::cons.1010"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1010", %"struct.thrust::detail::cons.1010"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.870"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS3_INS4_INS5_INS_4pairIiiEES9_SA_SA_EEEENS_9null_typeEEEEENS0_16advance_iteratorIlEEEET0_RT_SM_(%"struct.thrust::detail::cons.1011"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.1011"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.1011"* %t, %"struct.thrust::detail::cons.1011"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1011"*, %"struct.thrust::detail::cons.1011"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.1011"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.1011"*, %"struct.thrust::detail::cons.1011"** %t.addr, align 8
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.1012"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.1011"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_(%"struct.thrust::detail::cons.1012"* dereferenceable(8) %call1, i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"struct.thrust::detail::cons.1011"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEE8get_tailEv(%"struct.thrust::detail::cons.1010"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1010"*, align 8
  store %"struct.thrust::detail::cons.1010"* %this, %"struct.thrust::detail::cons.1010"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1010"*, %"struct.thrust::detail::cons.1010"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1010", %"struct.thrust::detail::cons.1010"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.1011"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.199"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.1011"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1011"*, align 8
  store %"struct.thrust::detail::cons.1011"* %this, %"struct.thrust::detail::cons.1011"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1011"*, %"struct.thrust::detail::cons.1011"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1011", %"struct.thrust::detail::cons.1011"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.199"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SJ_(%"struct.thrust::detail::cons.1012"* dereferenceable(8) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"struct.thrust::detail::cons.1012"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"struct.thrust::detail::cons.1012"* %t, %"struct.thrust::detail::cons.1012"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1012"*, %"struct.thrust::detail::cons.1012"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.1012"* %0)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.1012"*, %"struct.thrust::detail::cons.1012"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.1012"* %1)
  %2 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp1, i32 0, i32 0
  %4 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_16advance_iteratorIlEEEET_NS_9null_typeES5_(i64 %4)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %5 = load i64, i64* %coerce.dive5, align 8
  ret i64 %5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.1012"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.1011"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1011"*, align 8
  store %"struct.thrust::detail::cons.1011"* %this, %"struct.thrust::detail::cons.1011"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1011"*, %"struct.thrust::detail::cons.1011"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1011", %"struct.thrust::detail::cons.1011"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.1012"* %tail
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::advance_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  store %"class.thrust::detail::advance_iterator"* %this, %"class.thrust::detail::advance_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.960"* %it, %"class.thrust::detail::normal_iterator.960"** %it.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::advance_iterator"*, %"class.thrust::detail::advance_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.960"* %0 to %"class.thrust::iterator_facade.962"*
  %m_step = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %this1, i32 0, i32 0
  %2 = load i64, i64* %m_step, align 8, !tbaa !204
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.962"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.1012"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1012"*, align 8
  store %"struct.thrust::detail::cons.1012"* %this, %"struct.thrust::detail::cons.1012"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1012"*, %"struct.thrust::detail::cons.1012"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1012", %"struct.thrust::detail::cons.1012"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.960"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.1012"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.1012"*, align 8
  store %"struct.thrust::detail::cons.1012"* %this, %"struct.thrust::detail::cons.1012"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1012"*, %"struct.thrust::detail::cons.1012"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.962"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.962"* %this, %"class.thrust::iterator_facade.962"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.962"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.962"* %this1)
  ret %"class.thrust::detail::normal_iterator.960"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.960"* %f, %"class.thrust::detail::normal_iterator.960"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.960"* %0 to %"class.thrust::iterator_adaptor.961"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.961"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.962"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  store %"class.thrust::iterator_facade.962"* %this, %"class.thrust::iterator_facade.962"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.962"* %this1 to %"class.thrust::detail::normal_iterator.960"*
  ret %"class.thrust::detail::normal_iterator.960"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.961"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.961"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.961"* %this, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.961"*, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.926"* %m_iterator to %"class.thrust::iterator_facade.928"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.928"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.926"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.928"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.928"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.928"* %this, %"class.thrust::iterator_facade.928"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.928"*, %"class.thrust::iterator_facade.928"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.928"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.926"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.928"* %this1)
  ret %"class.thrust::pointer.926"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.926"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.926"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.926"* %f, %"class.thrust::pointer.926"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %0 to %"class.thrust::iterator_adaptor.927"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.927"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.926"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.928"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.928"*, align 8
  store %"class.thrust::iterator_facade.928"* %this, %"class.thrust::iterator_facade.928"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.928"*, %"class.thrust::iterator_facade.928"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.928"* %this1 to %"class.thrust::pointer.926"*
  ret %"class.thrust::pointer.926"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.927"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.927"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.927"* %this, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.927"*, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !517
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %1, i64 %0
  store %"struct.thrust::pair.82"* %add.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !517
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS7_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESH_EEEENS7_INSD_ISA_SG_SH_SH_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_EEEEEENS_15iterator_traitsIT_E15difference_typeESQ_SQ_(%"class.thrust::zip_iterator.1007"* byval align 8 %first, %"class.thrust::zip_iterator.1007"* byval align 8 %last) #8 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.1007", align 8
  %agg.tmp2 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::zip_iterator.1007"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 8, i1 false)
  %2 = bitcast %"class.thrust::zip_iterator.1007"* %agg.tmp1 to i8*
  %3 = bitcast %"class.thrust::zip_iterator.1007"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp, %"class.thrust::zip_iterator.1007"* byval align 8 %agg.tmp1)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS8_INS_7pointerIjNS0_4cuda6detail3tagENS_11use_defaultESI_EEEENS8_INSE_ISB_SH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_EEEEEENS_15iterator_traitsIT_E15difference_typeESR_SR_NS_27random_access_traversal_tagE(%"class.thrust::zip_iterator.1007"* byval align 8 %first, %"class.thrust::zip_iterator.1007"* byval align 8 %last) #8 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = bitcast %"class.thrust::zip_iterator.1007"* %last to %"class.thrust::iterator_facade.1008"*
  %2 = bitcast %"class.thrust::zip_iterator.1007"* %first to %"class.thrust::iterator_facade.1008"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_(%"class.thrust::iterator_facade.1008"* dereferenceable(1) %1, %"class.thrust::iterator_facade.1008"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS4_INSA_IS7_SE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_EEEENS2_IS7_jS7_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EENSS_IS7_SI_SF_EESK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_SV_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSX_IT5_T6_T7_T8_T9_T10_EEE4typeERKS14_RKS1B_(%"class.thrust::iterator_facade.1008"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1008"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1008"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1008"*, align 8
  store %"class.thrust::iterator_facade.1008"* %lhs, %"class.thrust::iterator_facade.1008"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1008"* %rhs, %"class.thrust::iterator_facade.1008"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1008"*, %"class.thrust::iterator_facade.1008"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1008"* %0 to %"class.thrust::zip_iterator.1007"*
  %2 = load %"class.thrust::iterator_facade.1008"*, %"class.thrust::iterator_facade.1008"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1008"* %2 to %"class.thrust::zip_iterator.1007"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_(%"class.thrust::zip_iterator.1007"* dereferenceable(24) %1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENS4_20distance_from_resultIT_T0_E4typeERKSP_RKSQ_(%"class.thrust::zip_iterator.1007"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.1007"* %f1, %"class.thrust::zip_iterator.1007"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %f2, %"class.thrust::zip_iterator.1007"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.1007"* dereferenceable(24) %0, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS5_INSB_IS8_SF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_EEEESN_EENT_15difference_typeERKSO_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.1007"* dereferenceable(24) %f1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  store %"class.thrust::zip_iterator.1007"* %f1, %"class.thrust::zip_iterator.1007"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1007"* %f2, %"class.thrust::zip_iterator.1007"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.1007"* %1, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE11distance_toISK_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.1007"* %this, %"class.thrust::zip_iterator.1007"* dereferenceable(24) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  store %"class.thrust::zip_iterator.1007"* %this, %"class.thrust::zip_iterator.1007"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.1007"* %other, %"class.thrust::zip_iterator.1007"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %other.addr, align 8
  %call = call dereferenceable(24) %"class.thrust::tuple.1009"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1007"* %0)
  %1 = bitcast %"class.thrust::tuple.1009"* %call to %"struct.thrust::detail::cons.1010"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %call2 to %"class.thrust::iterator_facade.872"*
  %call3 = call dereferenceable(24) %"class.thrust::tuple.1009"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1007"* %this1)
  %3 = bitcast %"class.thrust::tuple.1009"* %call3 to %"struct.thrust::detail::cons.1010"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.870"* %call4 to %"class.thrust::iterator_facade.872"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElS7_S5_SB_SC_SE_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSG_IT5_T6_T7_T8_T9_T10_EEE4typeERKSN_RKSU_(%"class.thrust::iterator_facade.872"* dereferenceable(1) %2, %"class.thrust::iterator_facade.872"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_4consINS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS8_INS2_INS9_IS5_SD_SE_SE_EEEENS_9null_typeEEEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS8_IT0_T1_EEE4typeEE10const_typeERKSQ_(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1010"*, align 8
  store %"struct.thrust::detail::cons.1010"* %c, %"struct.thrust::detail::cons.1010"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1010"*, %"struct.thrust::detail::cons.1010"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %0)
  ret %"class.thrust::detail::normal_iterator.870"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES9_NS0_4consINS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESI_EEEENSC_INS4_INSD_IS7_SH_SI_SI_EEEENS_9null_typeEEEEEEET_RKNSC_IT0_T1_EE(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1010"*, align 8
  store %"struct.thrust::detail::cons.1010"* %t, %"struct.thrust::detail::cons.1010"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1010"*, %"struct.thrust::detail::cons.1010"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1010", %"struct.thrust::detail::cons.1010"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.870"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS3_INS9_IS6_SD_SE_SE_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.1007"* %this, %"class.thrust::tuple.1009"* byval align 8 %iterator_tuple) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.1007"*, align 8
  store %"class.thrust::zip_iterator.1007"* %this, %"class.thrust::zip_iterator.1007"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.1007"*, %"class.thrust::zip_iterator.1007"** %this.addr, align 8
  %0 = bitcast %"class.thrust::zip_iterator.1007"* %this1 to %"class.thrust::iterator_facade.1008"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.1007", %"class.thrust::zip_iterator.1007"* %this1, i32 0, i32 0
  %1 = bitcast %"class.thrust::tuple.1009"* %m_iterator_tuple to i8*
  %2 = bitcast %"class.thrust::tuple.1009"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_EC2ERKS7_RKSF_RKSH_(%"class.thrust::tuple.1009"* %this, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t2) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1009"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1009"* %this, %"class.thrust::tuple.1009"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.870"* %t0, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.960"* %t2, %"class.thrust::detail::normal_iterator.960"** %t2.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1009"*, %"class.thrust::tuple.1009"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1009"* %this1 to %"struct.thrust::detail::cons.1010"*
  %1 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t2.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1010"* %0, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS2_INS8_IS5_SC_SD_SD_EEEENS_9null_typeEEEEEEC2IKS7_KSF_KSH_KSI_SQ_SQ_SQ_SQ_SQ_SQ_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1010"* %this, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1010"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1010"* %this, %"struct.thrust::detail::cons.1010"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.870"* %t1, %"class.thrust::detail::normal_iterator.870"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.960"* %t3, %"class.thrust::detail::normal_iterator.960"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1010"*, %"struct.thrust::detail::cons.1010"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1010", %"struct.thrust::detail::cons.1010"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.870"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1010", %"struct.thrust::detail::cons.1010"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1011"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS1_INS2_INS3_INS_4pairIiiEES7_S8_S8_EEEENS_9null_typeEEEEC2IKSA_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1011"* %this, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1011"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1011"* %this, %"struct.thrust::detail::cons.1011"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.960"* %t2, %"class.thrust::detail::normal_iterator.960"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1011"*, %"struct.thrust::detail::cons.1011"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1011", %"struct.thrust::detail::cons.1011"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.199"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.199"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1011", %"struct.thrust::detail::cons.1011"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.1012"* %tail, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.1012"* %this, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1012"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.1012"* %this, %"struct.thrust::detail::cons.1012"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.960"* %t1, %"class.thrust::detail::normal_iterator.960"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.1012"*, %"struct.thrust::detail::cons.1012"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1012", %"struct.thrust::detail::cons.1012"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.960"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.960"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi2EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS_10device_ptrIS7_EEEENS0_4consINS4_INS5_IjSB_SC_SC_EEEENSK_ISE_NS_9null_typeEEEEEEET_RKNSK_IT0_T1_EE(%"struct.thrust::detail::cons.1010"* dereferenceable(24) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1010"*, align 8
  store %"struct.thrust::detail::cons.1010"* %t, %"struct.thrust::detail::cons.1010"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1010"*, %"struct.thrust::detail::cons.1010"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1010", %"struct.thrust::detail::cons.1010"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.1011"* dereferenceable(16) %tail)
  ret %"class.thrust::detail::normal_iterator.960"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.1011"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1011"*, align 8
  store %"struct.thrust::detail::cons.1011"* %t, %"struct.thrust::detail::cons.1011"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1011"*, %"struct.thrust::detail::cons.1011"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1011", %"struct.thrust::detail::cons.1011"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.1012"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.960"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.1012"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1012"*, align 8
  store %"struct.thrust::detail::cons.1012"* %t, %"struct.thrust::detail::cons.1012"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1012"*, %"struct.thrust::detail::cons.1012"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1012", %"struct.thrust::detail::cons.1012"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.960"* %head
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.872"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  store %"class.thrust::iterator_facade.872"* %this, %"class.thrust::iterator_facade.872"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.872"* %this1 to %"class.thrust::detail::normal_iterator.870"*
  ret %"class.thrust::detail::normal_iterator.870"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElEmIEl(%"class.thrust::iterator_facade.872"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.872"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.872"* %this, %"class.thrust::iterator_facade.872"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.872"*, %"class.thrust::iterator_facade.872"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.872"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %sub = sub nsw i64 0, %0
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_NS9_15difference_typeE(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %call, i64 %sub)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS5_EElE7derivedEv(%"class.thrust::iterator_facade.872"* %this1)
  ret %"class.thrust::detail::normal_iterator.870"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEixEl(%"class.thrust::iterator_facade.962"* %this, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  %n.addr = alloca i64, align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.960", align 8
  store %"class.thrust::iterator_facade.962"* %this, %"class.thrust::iterator_facade.962"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.962"* %this1)
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %call to %"class.thrust::iterator_facade.962"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.962"* dereferenceable(1) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.960"* %coerce to %"class.thrust::iterator_facade.962"*
  %call6 = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.962"* %2)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call6, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive11, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.82"* %3
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.962"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  store %"class.thrust::iterator_facade.962"* %this, %"class.thrust::iterator_facade.962"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.962"* %this1 to %"class.thrust::detail::normal_iterator.960"*
  ret %"class.thrust::detail::normal_iterator.960"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.962"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  store %"class.thrust::iterator_facade.962"* %this, %"class.thrust::iterator_facade.962"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.962"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  store %"class.thrust::detail::normal_iterator.960"* %f, %"class.thrust::detail::normal_iterator.960"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.960"* %0 to %"class.thrust::iterator_adaptor.961"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.961"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.961"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.961"*, align 8
  store %"class.thrust::iterator_adaptor.961"* %this, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.961"*, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.926"* %m_iterator to %"class.thrust::iterator_facade.928"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.928"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive5, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.928"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.928"*, align 8
  store %"class.thrust::iterator_facade.928"* %this, %"class.thrust::iterator_facade.928"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.928"*, %"class.thrust::iterator_facade.928"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.928"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.926"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.926"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %f.addr = alloca %"class.thrust::pointer.926"*, align 8
  store %"class.thrust::pointer.926"* %f, %"class.thrust::pointer.926"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %f.addr, align 8
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.926"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.926"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.928"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.928"*, align 8
  store %"class.thrust::iterator_facade.928"* %this, %"class.thrust::iterator_facade.928"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.928"*, %"class.thrust::iterator_facade.928"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.928"* %this1 to %"class.thrust::pointer.926"*
  ret %"class.thrust::pointer.926"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.926"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.963", align 8
  %this.addr = alloca %"class.thrust::pointer.926"*, align 8
  store %"class.thrust::pointer.926"* %this, %"class.thrust::pointer.926"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %this.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.963"* %retval, %"class.thrust::pointer.926"* dereferenceable(8) %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.963"* %this, %"class.thrust::pointer.926"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.963"*, align 8
  %ptr.addr = alloca %"class.thrust::pointer.926"*, align 8
  store %"class.thrust::reference.963"* %this, %"class.thrust::reference.963"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.926"* %ptr, %"class.thrust::pointer.926"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.963"*, %"class.thrust::reference.963"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIPKS2_EEvT_(%"class.thrust::reference.963"* %this, %"struct.thrust::pair.82"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.963"*, align 8
  %src.addr = alloca %"struct.thrust::pair.82"*, align 8
  %system1 = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  store %"class.thrust::reference.963"* %this, %"class.thrust::reference.963"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %src, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.963"*, %"class.thrust::reference.963"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  store %"struct.thrust::system::cuda::detail::tag"* null, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  store %"struct.thrust::system::cpp::detail::tag"* null, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %2 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1, align 8, !tbaa !1
  %3 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_(%"class.thrust::reference.963"* %this1, %"struct.thrust::system::cuda::detail::tag"* %2, %"struct.thrust::system::cpp::detail::tag"* %3, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"** %system2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %6 = bitcast %"struct.thrust::system::cuda::detail::tag"** %system1 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %6) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E11assign_fromIS7_NS4_3cpp6detail3tagEPKS2_EEvPT_PT0_T1_(%"class.thrust::reference.963"* %this, %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cpp::detail::tag"* %system2, %"struct.thrust::pair.82"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.963"*, align 8
  %system1.addr = alloca %"struct.thrust::system::cuda::detail::tag"*, align 8
  %system2.addr = alloca %"struct.thrust::system::cpp::detail::tag"*, align 8
  %src.addr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  store %"class.thrust::reference.963"* %this, %"class.thrust::reference.963"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::tag"* %system1, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cpp::detail::tag"* %system2, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %src, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.963"*, %"class.thrust::reference.963"** %this.addr, align 8
  %0 = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %system1.addr, align 8, !tbaa !1
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %0 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %system2.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %2 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call = call { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 0
  %6 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 0
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %4, i32 0, i32 1
  %8 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call, 1
  store %"struct.thrust::execution_policy.88"* %8, %"struct.thrust::execution_policy.88"** %7, align 8
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  call void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_(%"class.thrust::reference.963"* %this1, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %ref.tmp, %"struct.thrust::pair.82"* %9)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_E24strip_const_assign_valueINS6_12cross_systemIS7_NS4_3cpp6detail3tagEEEPKS2_EEvRKT_T0_(%"class.thrust::reference.963"* %this, %"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %system, %"struct.thrust::pair.82"* %src) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.963"*, align 8
  %system.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair.82"*, align 8
  %non_const_system = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  store %"class.thrust::reference.963"* %this, %"class.thrust::reference.963"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %system, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %src, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.963"*, %"class.thrust::reference.963"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %system.addr, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %1, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8, !tbaa !7
  %2 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %2 to %"struct.thrust::detail::execution_policy_base.229"*
  %call = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %3)
  %m_ptr = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.926"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  call void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %call, %"struct.thrust::pair.82"* %7, %"struct.thrust::pair.82"* %6)
  %8 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"** %non_const_system to i8*
  call void @llvm.lifetime.end(i64 8, i8* %8) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %dst.coerce, %"struct.thrust::pair.82"* %src) #8 comdat {
entry:
  %dst = alloca %"class.thrust::pointer.926", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair.82"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %dst.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %src, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %0, %"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"* %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail12assign_valueINS2_3tagENS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultESB_EEPKSA_EEvRNS2_12cross_systemIT_T0_EET1_T2_EN17war_nvbugs_8816319host_pathERNSF_IS4_S7_EESC_SE_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %dst.coerce, %"struct.thrust::pair.82"* %src) #8 comdat align 2 {
entry:
  %dst = alloca %"class.thrust::pointer.926", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %src.addr = alloca %"struct.thrust::pair.82"*, align 8
  %rotated_systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %dst, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %dst.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %src, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %call = call { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } @_ZNK6thrust6system4cuda6detail12cross_systemINS2_3tagENS0_3cpp6detail3tagEE6rotateEv(%"struct.thrust::system::cuda::detail::cross_system.227"* %1)
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %3 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 0
  %4 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 0
  store %"struct.thrust::execution_policy.88"* %4, %"struct.thrust::execution_policy.88"** %3, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %2, i32 0, i32 1
  %6 = extractvalue { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* } %call, 1
  store %"struct.thrust::execution_policy.120"* %6, %"struct.thrust::execution_policy.120"** %5, align 8
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to %"struct.thrust::detail::execution_policy_base.132"*
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %src.addr, align 8, !tbaa !1
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %9, i64 1
  %10 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.926"* %dst to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair.82"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIiiEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %7, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %add.ptr, %"struct.thrust::pair.82"* %12)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call4, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %13 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %rotated_systems to i8*
  call void @llvm.lifetime.end(i64 16, i8* %13) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS1_3cpp6detail3tagENS3_3tagEEEPKNS_4pairIiiEENS_7pointerISB_S8_NS_11use_defaultESF_EEEET1_RKNS_6detail21execution_policy_baseIT_EET0_SO_SH_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"* %last, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %result = alloca %"class.thrust::pointer.926", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.132"*, align 8
  %first.addr = alloca %"struct.thrust::pair.82"*, align 8
  %last.addr = alloca %"struct.thrust::pair.82"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.132"* %exec, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %last, %"struct.thrust::pair.82"** %last.addr, align 8, !tbaa !1
  %0 = load %"struct.thrust::detail::execution_policy_base.132"*, %"struct.thrust::detail::execution_policy_base.132"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.132"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %0)
  %call2 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS2_3cpp6detail3tagENS4_3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.132"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %last.addr, align 8, !tbaa !1
  %5 = bitcast %"class.thrust::pointer.926"* %agg.tmp3 to i8*
  %6 = bitcast %"class.thrust::pointer.926"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %8 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 0
  %9 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %8, align 8
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %7, i32 0, i32 1
  %11 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %10, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive4, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %9, %"struct.thrust::execution_policy.120"* %11, %"struct.thrust::pair.82"* %3, %"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"* %12)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call6, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive9, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %13
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail4copyINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"* %last, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.926", align 8
  %first.addr = alloca %"struct.thrust::pair.82"*, align 8
  %last.addr = alloca %"struct.thrust::pair.82"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.926", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %last, %"struct.thrust::pair.82"** %last.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %last.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.926"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.926"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"* %6, %"struct.thrust::pair.82"* %14)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  ret %"struct.thrust::pair.82"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %begin, %"struct.thrust::pair.82"* %end, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.926", align 8
  %begin.addr = alloca %"struct.thrust::pair.82"*, align 8
  %end.addr = alloca %"struct.thrust::pair.82"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp2 = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp3 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::pair.82"* %begin, %"struct.thrust::pair.82"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %end, %"struct.thrust::pair.82"** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %begin.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.926"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::pointer.926"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp2, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive5, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"* %6, %"struct.thrust::pair.82"* %14)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive9, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %begin, %"struct.thrust::pair.82"* %end, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.926", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %begin.addr = alloca %"struct.thrust::pair.82"*, align 8
  %end.addr = alloca %"struct.thrust::pair.82"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %agg.tmp3 = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp4 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp5 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp6 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::pair.82"* %begin, %"struct.thrust::pair.82"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %end, %"struct.thrust::pair.82"** %end.addr, align 8, !tbaa !1
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %begin.addr, align 8, !tbaa !1
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %end.addr, align 8, !tbaa !1
  %7 = bitcast %"class.thrust::pointer.926"* %agg.tmp3 to i8*
  %8 = bitcast %"class.thrust::pointer.926"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %agg.tmp to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp3, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %11, %"struct.thrust::execution_policy.120"* %13, %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"* %6, %"struct.thrust::pair.82"* %14)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive9, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive11, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.82"* %15
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEENS_7pointerIS9_S7_NS_11use_defaultESD_EEEET2_NS2_12cross_systemIT_T0_EET1_SK_SF_NS_27random_access_traversal_tagESL_NS_6detail17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::pair.82"* %begin, %"struct.thrust::pair.82"* %end, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system", align 8
  %result = alloca %"class.thrust::pointer.926", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %begin.addr = alloca %"struct.thrust::pair.82"*, align 8
  %end.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system"* %systems to { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.88"* %systems.coerce0, %"struct.thrust::execution_policy.88"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }, { %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.120"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.120"* %systems.coerce1, %"struct.thrust::execution_policy.120"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::pair.82"* %begin, %"struct.thrust::pair.82"** %begin.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %end, %"struct.thrust::pair.82"** %end.addr, align 8, !tbaa !1
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %end.addr, align 8, !tbaa !1
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %begin.addr, align 8, !tbaa !1
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.82"* %7 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.82"* %8 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  store i64 %sub.ptr.div, i64* %n, align 8, !tbaa !13
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %begin.addr, align 8, !tbaa !1
  %10 = load i64, i64* %n, align 8, !tbaa !13
  %11 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %12 = bitcast %"class.thrust::pointer.926"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive4, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %9, i64 %10, %"struct.thrust::pair.82"* %13)
  %14 = bitcast %"class.thrust::pointer.926"* %result to %"class.thrust::iterator_facade.928"*
  %15 = load i64, i64* %n, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.928"* dereferenceable(1) %14, i64 %15)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %16 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %16) #5
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive8, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.82"* %17
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS0_3cpp6detail3tagENS2_3tagEPKNS_4pairIiiEElNS_7pointerIS9_S7_NS_11use_defaultESD_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %first, i64 %n, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %result = alloca %"class.thrust::pointer.926", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system"*, align 8
  %first.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce = alloca %"class.thrust::reference.963", align 8
  %src = alloca i8*, align 8
  %ref.tmp9 = alloca %"struct.thrust::pair.82"*, align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %result, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::cross_system"* %systems, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::pointer.926"* %result to %"class.thrust::iterator_facade.928"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.928"* %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %coerce, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair.82"* @_ZNK6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.963"* %coerce)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %ref.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call5, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %call8 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.926"* dereferenceable(8) %ref.tmp)
  %2 = bitcast %"struct.thrust::pair.82"* %call8 to i8*
  store i8* %2, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"** %ref.tmp9, align 8, !tbaa !1
  %call10 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.82"** dereferenceable(8) %ref.tmp9)
  %5 = bitcast %"struct.thrust::pair.82"* %call10 to i8*
  store i8* %5, i8** %src, align 8, !tbaa !1
  %6 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %6) #5
  %7 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %7, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system1, align 8, !tbaa !7
  %8 = bitcast %"struct.thrust::execution_policy.88"* %ref to %"struct.thrust::detail::execution_policy_base.85"*
  %call11 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %8)
  %9 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call11 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %10 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %10, i32 0, i32 1
  %ref12 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system2, align 8, !tbaa !7
  %11 = bitcast %"struct.thrust::execution_policy.120"* %ref12 to %"struct.thrust::detail::execution_policy_base.121"*
  %call13 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %11)
  %12 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call13 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call14 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS0_3cpp6detail3tagENS2_3tagEEE14cudaMemcpyKindRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %9, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %12)
  store i32 %call14, i32* %kind, align 4, !tbaa !97
  %13 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  %14 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system115 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %14, i32 0, i32 0
  %ref16 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system115, align 8, !tbaa !7
  %15 = bitcast %"struct.thrust::execution_policy.88"* %ref16 to %"struct.thrust::detail::execution_policy_base.85"*
  %call17 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %15)
  %16 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call17 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %17 = load %"struct.thrust::system::cuda::detail::cross_system"*, %"struct.thrust::system::cuda::detail::cross_system"** %systems.addr, align 8
  %system218 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system", %"struct.thrust::system::cuda::detail::cross_system"* %17, i32 0, i32 1
  %ref19 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system218, align 8, !tbaa !7
  %18 = bitcast %"struct.thrust::execution_policy.120"* %ref19 to %"struct.thrust::detail::execution_policy_base.121"*
  %call20 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %18)
  %19 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call20 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call21 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS0_3cpp6detail3tagENS2_3tagEEEP11CUstream_stRKNS6_16execution_policyIT_EERKNS2_16execution_policyIT0_EE(%"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %16, %"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %19)
  store %struct.CUstream_st* %call21, %struct.CUstream_st** %s, align 8, !tbaa !1
  %20 = load i8*, i8** %dst, align 8, !tbaa !1
  %21 = load i8*, i8** %src, align 8, !tbaa !1
  %22 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %22, 8
  %23 = load i32, i32* %kind, align 4, !tbaa !97
  %24 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %20, i8* %21, i64 %mul, i32 %23, %struct.CUstream_st* %24)
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %25, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %26 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %26) #5
  %27 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %27) #5
  %28 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %28) #5
  %29 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrustplINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.928"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.928"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.926", align 8
  store %"class.thrust::iterator_facade.928"* %i, %"class.thrust::iterator_facade.928"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.926"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.928"*, %"class.thrust::iterator_facade.928"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.928"* %1 to %"class.thrust::pointer.926"*
  %3 = bitcast %"class.thrust::pointer.926"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.926"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.926"* %tmp to %"class.thrust::iterator_facade.928"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.928"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.926"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.926"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.926"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  ret %"struct.thrust::pair.82"* %10
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system4cuda6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.963"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %this.addr = alloca %"class.thrust::reference.963"*, align 8
  store %"class.thrust::reference.963"* %this, %"class.thrust::reference.963"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.963"*, %"class.thrust::reference.963"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.963", %"class.thrust::reference.963"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.926"* %retval to i8*
  %1 = bitcast %"class.thrust::pointer.926"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.964"* byval align 8 %result) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.964", align 8
  %first = alloca %"class.thrust::zip_iterator.968", align 8
  %last = alloca %"class.thrust::zip_iterator.968", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.964", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %0 = bitcast %"class.thrust::zip_iterator.968"* %first to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.968"* %last to { %"struct.thrust::pair.82"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %7 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::zip_iterator.968"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp1 to i8*
  %10 = bitcast %"class.thrust::zip_iterator.968"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 16, i32 8, i1 false)
  %11 = bitcast %"class.thrust::zip_iterator.964"* %agg.tmp2 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.964"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 16, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp3 to i8*
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp to { %"struct.thrust::pair.82"*, i32* }*
  %16 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %15, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %16, align 8
  %18 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %15, i32 0, i32 1
  %19 = load i32*, i32** %18, align 8
  %20 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp1 to { %"struct.thrust::pair.82"*, i32* }*
  %21 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %20, i32 0, i32 0
  %22 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %21, align 8
  %23 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %20, i32 0, i32 1
  %24 = load i32*, i32** %23, align 8
  %call = call { %"struct.thrust::pair.82"*, i32* } @_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %6, %"struct.thrust::pair.82"* %17, i32* %19, %"struct.thrust::pair.82"* %22, i32* %24, %"class.thrust::zip_iterator.964"* byval align 8 %agg.tmp2)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive, i32 0, i32 0
  %25 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive4 to { %"struct.thrust::pair.82"*, i32* }*
  %26 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %25, i32 0, i32 0
  %27 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call, 0
  store %"struct.thrust::pair.82"* %27, %"struct.thrust::pair.82"** %26, align 8
  %28 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %25, i32 0, i32 1
  %29 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call, 1
  store i32* %29, i32** %28, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive5, i32 0, i32 0
  %30 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive6 to { %"struct.thrust::pair.82"*, i32* }*
  %31 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %30, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %31
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZZN6thrust6system4cuda6detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES4_NS_11use_defaultESC_EEEENS8_INS9_IjS4_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS5_INS6_INS8_INS_10device_ptrISB_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS0_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S10_SV_T2_EN10workaround13parallel_pathERNSW_IS4_EESJ_SJ_SO_SU_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.964"* byval align 8 %result) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::zip_iterator.964", align 8
  %first = alloca %"class.thrust::zip_iterator.968", align 8
  %last = alloca %"class.thrust::zip_iterator.968", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.964", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %0 = bitcast %"class.thrust::zip_iterator.968"* %first to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.968"* %last to { %"struct.thrust::pair.82"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %7 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp to i8*
  %8 = bitcast %"class.thrust::zip_iterator.968"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp1 to i8*
  %10 = bitcast %"class.thrust::zip_iterator.968"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 16, i32 8, i1 false)
  %11 = bitcast %"class.thrust::zip_iterator.964"* %agg.tmp2 to i8*
  %12 = bitcast %"class.thrust::zip_iterator.964"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 16, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp3 to i8*
  %14 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp to { %"struct.thrust::pair.82"*, i32* }*
  %16 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %15, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %16, align 8
  %18 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %15, i32 0, i32 1
  %19 = load i32*, i32** %18, align 8
  %20 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp1 to { %"struct.thrust::pair.82"*, i32* }*
  %21 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %20, i32 0, i32 0
  %22 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %21, align 8
  %23 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %20, i32 0, i32 1
  %24 = load i32*, i32** %23, align 8
  %call = call { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %6, %"struct.thrust::pair.82"* %17, i32* %19, %"struct.thrust::pair.82"* %22, i32* %24, %"class.thrust::zip_iterator.964"* byval align 8 %agg.tmp2)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive, i32 0, i32 0
  %25 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive4 to { %"struct.thrust::pair.82"*, i32* }*
  %26 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %25, i32 0, i32 0
  %27 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call, 0
  store %"struct.thrust::pair.82"* %27, %"struct.thrust::pair.82"** %26, align 8
  %28 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %25, i32 0, i32 1
  %29 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call, 1
  store i32* %29, i32** %28, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive5, i32 0, i32 0
  %30 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive6 to { %"struct.thrust::pair.82"*, i32* }*
  %31 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %30, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %31
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrust6system4cuda6detail11scan_detail14inclusive_scanINS2_3tagENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEES5_NS_11use_defaultESD_EEEENS9_INSA_IjS5_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS6_INS7_INS9_INS_10device_ptrISC_EEEESH_SI_SI_SI_SI_SI_SI_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEEEET1_RNS2_16execution_policyIT_EET0_S11_SW_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce0, i32* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, i32* %last.coerce1, %"class.thrust::zip_iterator.964"* byval align 8 %result) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::zip_iterator.964", align 8
  %first = alloca %"class.thrust::zip_iterator.968", align 8
  %last = alloca %"class.thrust::zip_iterator.968", align 8
  %binary_op = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n = alloca i64, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %threshold_of_parallelism = alloca i64, align 8
  %groupsize = alloca i64, align 8
  %heap_size = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp5 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp6 = alloca %"class.thrust::zip_iterator.964", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %groupsize8 = alloca i64, align 8
  %grainsize = alloca i64, align 8
  %tile_size = alloca i64, align 8
  %num_tiles = alloca i64, align 8
  %subscription = alloca i64, align 8
  %num_groups = alloca i64, align 8
  %ref.tmp = alloca i64, align 8
  %decomp = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %carries = alloca %"class.thrust::detail::temporary_array.1039", align 8
  %heap_size11 = alloca i64, align 8
  %agg.tmp.ensured12 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp14 = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %agg.tmp15 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp16 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp17 = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %agg.tmp18 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %agg.tmp24 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %groupsize2 = alloca i64, align 8
  %grainsize2 = alloca i64, align 8
  %agg.tmp.ensured30 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp31 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", align 8
  %agg.tmp34 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %agg.tmp35 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp36 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %agg.tmp43 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %agg.tmp50 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %agg.tmp.ensured60 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp61 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp63 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %agg.tmp64 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %agg.tmp65 = alloca %"class.thrust::zip_iterator.968", align 8
  %agg.tmp66 = alloca %"class.thrust::system::cuda::detail::aligned_decomposition", align 8
  %agg.tmp67 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %agg.tmp74 = alloca %"class.thrust::zip_iterator.964", align 8
  %agg.tmp75 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %0 = bitcast %"class.thrust::zip_iterator.968"* %first to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %first.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.968"* %last to { %"struct.thrust::pair.82"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 1
  store i32* %last.coerce1, i32** %5, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::zip_iterator.968"* %last to %"class.thrust::iterator_facade.969"*
  %8 = bitcast %"class.thrust::zip_iterator.968"* %first to %"class.thrust::iterator_facade.969"*
  %call = call i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.969"* dereferenceable(1) %7, %"class.thrust::iterator_facade.969"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %9) #5
  %10 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %10 to %"struct.thrust::detail::execution_policy_base.121"*
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %11)
  %12 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call2 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %12)
  store %struct.CUstream_st* %call2, %struct.CUstream_st** %s, align 8, !tbaa !1
  %13 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.start(i64 8, i8* %13) #5
  store i64 20000, i64* %threshold_of_parallelism, align 8, !tbaa !13
  %14 = load i64, i64* %n, align 8, !tbaa !13
  %cmp = icmp slt i64 %14, 20000
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %15 = bitcast i64* %groupsize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %15) #5
  store i64 256, i64* %groupsize, align 8, !tbaa !13
  %16 = bitcast i64* %heap_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %16) #5
  store i64 9216, i64* %heap_size, align 8, !tbaa !13
  %17 = load i64, i64* %heap_size, align 8, !tbaa !13
  %18 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridILm256ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* sret %agg.tmp, i64 1, i64 %17, %struct.CUstream_st* %18)
  %19 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %19, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %20 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp5 to i8*
  %21 = bitcast %"class.thrust::zip_iterator.968"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %20, i8* %21, i64 16, i32 8, i1 false)
  %22 = load i64, i64* %n, align 8, !tbaa !13
  %23 = bitcast %"class.thrust::zip_iterator.964"* %agg.tmp6 to i8*
  %24 = bitcast %"class.thrust::zip_iterator.964"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %23, i8* %24, i64 16, i32 8, i1 false)
  %25 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp7 to i8*
  %26 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %25, i8* %26, i64 1, i32 1, i1 false), !tbaa.struct !41
  %27 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp5 to { %"struct.thrust::pair.82"*, i32* }*
  %28 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %27, i32 0, i32 0
  %29 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %28, align 8
  %30 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %27, i32 0, i32 1
  %31 = load i32*, i32** %30, align 8
  %32 = bitcast %"class.thrust::zip_iterator.964"* %agg.tmp6 to { %"struct.thrust::pair.82"*, i32* }*
  %33 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %32, i32 0, i32 0
  %34 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %33, align 8
  %35 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %32, i32 0, i32 1
  %36 = load i32*, i32** %35, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %agg.tmp, %"struct.thrust::pair.82"* %29, i32* %31, i64 %22, %"struct.thrust::pair.82"* %34, i32* %36)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %37 = bitcast i64* %heap_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %37) #5
  %38 = bitcast i64* %groupsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %38) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %39 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %39) #5
  store i64 128, i64* %groupsize8, align 8, !tbaa !13
  %40 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.start(i64 8, i8* %40) #5
  store i64 5, i64* %grainsize, align 8, !tbaa !13
  %41 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %41) #5
  store i64 640, i64* %tile_size, align 8, !tbaa !13
  %42 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.start(i64 8, i8* %42) #5
  %43 = load i64, i64* %n, align 8, !tbaa !13
  %add = add nsw i64 %43, 640
  %sub = sub nsw i64 %add, 1
  %div = sdiv i64 %sub, 640
  store i64 %div, i64* %num_tiles, align 8, !tbaa !13
  %44 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.start(i64 8, i8* %44) #5
  store i64 20, i64* %subscription, align 8, !tbaa !13
  %45 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %45) #5
  %46 = load i64, i64* %subscription, align 8, !tbaa !13
  %call9 = call i32 @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE20hardware_concurrencyEv()
  %conv = sext i32 %call9 to i64
  %mul = mul nsw i64 %46, %conv
  store i64 %mul, i64* %ref.tmp, align 8, !tbaa !13
  %call10 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %ref.tmp, i64* dereferenceable(8) %num_tiles)
  store i64 %call10, i64* %num_groups, align 8, !tbaa !13
  %47 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.start(i64 40, i8* %47) #5
  %48 = load i64, i64* %n, align 8, !tbaa !13
  %49 = load i64, i64* %num_groups, align 8, !tbaa !13
  call void @_ZN6thrust6system4cuda6detail21aligned_decompositionIlEC2Elll(%"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp, i64 %48, i64 %49, i64 640)
  %50 = bitcast %"class.thrust::detail::temporary_array.1039"* %carries to i8*
  call void @llvm.lifetime.start(i64 24, i8* %50) #5
  %51 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %52 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %51 to %"struct.thrust::execution_policy.120"*
  %53 = load i64, i64* %num_groups, align 8, !tbaa !13
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm(%"class.thrust::detail::temporary_array.1039"* %carries, %"struct.thrust::execution_policy.120"* dereferenceable(1) %52, i64 %53)
  %54 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %54) #5
  store i64 1536, i64* %heap_size11, align 8, !tbaa !13
  %55 = load i64, i64* %num_groups, align 8, !tbaa !13
  %56 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %57 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* sret %agg.tmp13, i64 %55, i64 %56, %struct.CUstream_st* %57)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.else
  %58 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp15 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %58, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %59 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp16 to i8*
  %60 = bitcast %"class.thrust::zip_iterator.968"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* %60, i64 16, i32 8, i1 false)
  %61 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %agg.tmp17 to i8*
  %62 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %61, i8* %62, i64 40, i32 8, i1 false), !tbaa.struct !220
  %63 = bitcast %"class.thrust::detail::temporary_array.1039"* %carries to %"class.thrust::detail::contiguous_storage.1040"*
  %call20 = invoke %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1040"* %63)
          to label %invoke.cont19 unwind label %lpad

invoke.cont19:                                    ; preds = %invoke.cont
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp18, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive22, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call20, %"class.thrust::tuple.1051"** %coerce.dive23, align 8
  %64 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp24 to i8*
  %65 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %64, i8* %65, i64 1, i32 1, i1 false), !tbaa.struct !41
  %66 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp16 to { %"struct.thrust::pair.82"*, i32* }*
  %67 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %66, i32 0, i32 0
  %68 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %67, align 8
  %69 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %66, i32 0, i32 1
  %70 = load i32*, i32** %69, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp18, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive27, i32 0, i32 0
  %71 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive28, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured12, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp13, %"struct.thrust::pair.82"* %68, i32* %70, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %agg.tmp17, %"class.thrust::tuple.1051"* %71)
          to label %invoke.cont29 unwind label %lpad

invoke.cont29:                                    ; preds = %invoke.cont19
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured12) #5
  %72 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %72) #5
  store i64 128, i64* %groupsize2, align 8, !tbaa !13
  %73 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.start(i64 8, i8* %73) #5
  store i64 3, i64* %grainsize2, align 8, !tbaa !13
  store i64 4608, i64* %heap_size11, align 8, !tbaa !13
  %74 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %75 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* sret %agg.tmp31, i64 1, i64 %74, %struct.CUstream_st* %75)
          to label %invoke.cont33 unwind label %lpad32

invoke.cont33:                                    ; preds = %invoke.cont29
  %76 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp35 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %76, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %77 = bitcast %"class.thrust::detail::temporary_array.1039"* %carries to %"class.thrust::detail::contiguous_storage.1040"*
  %call38 = invoke %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1040"* %77)
          to label %invoke.cont37 unwind label %lpad32

invoke.cont37:                                    ; preds = %invoke.cont33
  %coerce.dive39 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp36, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive41, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call38, %"class.thrust::tuple.1051"** %coerce.dive42, align 8
  %78 = load i64, i64* %num_groups, align 8, !tbaa !13
  %79 = bitcast %"class.thrust::detail::temporary_array.1039"* %carries to %"class.thrust::detail::contiguous_storage.1040"*
  %call45 = invoke %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1040"* %79)
          to label %invoke.cont44 unwind label %lpad32

invoke.cont44:                                    ; preds = %invoke.cont37
  %coerce.dive46 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp43, i32 0, i32 0
  %coerce.dive47 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive46, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive48, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call45, %"class.thrust::tuple.1051"** %coerce.dive49, align 8
  %80 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp50 to i8*
  %81 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %80, i8* %81, i64 1, i32 1, i1 false), !tbaa.struct !41
  %coerce.dive51 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp36, i32 0, i32 0
  %coerce.dive52 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive51, i32 0, i32 0
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive52, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive53, i32 0, i32 0
  %82 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive54, align 8
  %coerce.dive55 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp43, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive56, i32 0, i32 0
  %coerce.dive58 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive57, i32 0, i32 0
  %83 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive58, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured30, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* byval align 8 %agg.tmp31, %"class.thrust::tuple.1051"* %82, i64 %78, %"class.thrust::tuple.1051"* %83)
          to label %invoke.cont59 unwind label %lpad32

invoke.cont59:                                    ; preds = %invoke.cont44
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured30) #5
  store i64 7680, i64* %heap_size11, align 8, !tbaa !13
  %84 = load i64, i64* %num_groups, align 8, !tbaa !13
  %85 = load i64, i64* %heap_size11, align 8, !tbaa !13
  %86 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  invoke void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm5EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* sret %agg.tmp61, i64 %84, i64 %85, %struct.CUstream_st* %86)
          to label %invoke.cont62 unwind label %lpad32

invoke.cont62:                                    ; preds = %invoke.cont59
  %87 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %agg.tmp64 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %87, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %88 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp65 to i8*
  %89 = bitcast %"class.thrust::zip_iterator.968"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %88, i8* %89, i64 16, i32 8, i1 false)
  %90 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %agg.tmp66 to i8*
  %91 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %90, i8* %91, i64 40, i32 8, i1 false), !tbaa.struct !220
  %92 = bitcast %"class.thrust::detail::temporary_array.1039"* %carries to %"class.thrust::detail::contiguous_storage.1040"*
  %call69 = invoke %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1040"* %92)
          to label %invoke.cont68 unwind label %lpad32

invoke.cont68:                                    ; preds = %invoke.cont62
  %coerce.dive70 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp67, i32 0, i32 0
  %coerce.dive71 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive70, i32 0, i32 0
  %coerce.dive72 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive71, i32 0, i32 0
  %coerce.dive73 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive72, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call69, %"class.thrust::tuple.1051"** %coerce.dive73, align 8
  %93 = bitcast %"class.thrust::zip_iterator.964"* %agg.tmp74 to i8*
  %94 = bitcast %"class.thrust::zip_iterator.964"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %93, i8* %94, i64 16, i32 8, i1 false)
  %95 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %agg.tmp75 to i8*
  %96 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %binary_op to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %95, i8* %96, i64 1, i32 1, i1 false), !tbaa.struct !41
  %97 = bitcast %"class.thrust::zip_iterator.968"* %agg.tmp65 to { %"struct.thrust::pair.82"*, i32* }*
  %98 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %97, i32 0, i32 0
  %99 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %98, align 8
  %100 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %97, i32 0, i32 1
  %101 = load i32*, i32** %100, align 8
  %coerce.dive76 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp67, i32 0, i32 0
  %coerce.dive77 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive76, i32 0, i32 0
  %coerce.dive78 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive77, i32 0, i32 0
  %coerce.dive79 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive78, i32 0, i32 0
  %102 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive79, align 8
  %103 = bitcast %"class.thrust::zip_iterator.964"* %agg.tmp74 to { %"struct.thrust::pair.82"*, i32* }*
  %104 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %103, i32 0, i32 0
  %105 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %104, align 8
  %106 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %103, i32 0, i32 1
  %107 = load i32*, i32** %106, align 8
  invoke void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured60, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp61, %"struct.thrust::pair.82"* %99, i32* %101, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %agg.tmp66, %"class.thrust::tuple.1051"* %102, %"struct.thrust::pair.82"* %105, i32* %107)
          to label %invoke.cont80 unwind label %lpad32

invoke.cont80:                                    ; preds = %invoke.cont68
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured60) #5
  %108 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %108) #5
  %109 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %109) #5
  %110 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %110) #5
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.1039"* %carries) #5
  %111 = bitcast %"class.thrust::detail::temporary_array.1039"* %carries to i8*
  call void @llvm.lifetime.end(i64 24, i8* %111) #5
  %112 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.end(i64 40, i8* %112) #5
  %113 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %113) #5
  %114 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.end(i64 8, i8* %114) #5
  %115 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.end(i64 8, i8* %115) #5
  %116 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %116) #5
  %117 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %117) #5
  %118 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %118) #5
  br label %if.end

lpad:                                             ; preds = %invoke.cont19, %invoke.cont, %if.else
  %119 = landingpad { i8*, i32 }
          cleanup
  %120 = extractvalue { i8*, i32 } %119, 0
  store i8* %120, i8** %exn.slot, align 8
  %121 = extractvalue { i8*, i32 } %119, 1
  store i32 %121, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad32:                                           ; preds = %invoke.cont68, %invoke.cont62, %invoke.cont59, %invoke.cont44, %invoke.cont37, %invoke.cont33, %invoke.cont29
  %122 = landingpad { i8*, i32 }
          cleanup
  %123 = extractvalue { i8*, i32 } %122, 0
  store i8* %123, i8** %exn.slot, align 8
  %124 = extractvalue { i8*, i32 } %122, 1
  store i32 %124, i32* %ehselector.slot, align 4
  %125 = bitcast i64* %grainsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %125) #5
  %126 = bitcast i64* %groupsize2 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %126) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad32, %lpad
  %127 = bitcast i64* %heap_size11 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %127) #5
  call void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.1039"* %carries) #5
  %128 = bitcast %"class.thrust::detail::temporary_array.1039"* %carries to i8*
  call void @llvm.lifetime.end(i64 24, i8* %128) #5
  %129 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %decomp to i8*
  call void @llvm.lifetime.end(i64 40, i8* %129) #5
  %130 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %130) #5
  %131 = bitcast i64* %subscription to i8*
  call void @llvm.lifetime.end(i64 8, i8* %131) #5
  %132 = bitcast i64* %num_tiles to i8*
  call void @llvm.lifetime.end(i64 8, i8* %132) #5
  %133 = bitcast i64* %tile_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %133) #5
  %134 = bitcast i64* %grainsize to i8*
  call void @llvm.lifetime.end(i64 8, i8* %134) #5
  %135 = bitcast i64* %groupsize8 to i8*
  call void @llvm.lifetime.end(i64 8, i8* %135) #5
  %136 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.end(i64 8, i8* %136) #5
  %137 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %137) #5
  %138 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %138) #5
  br label %eh.resume

if.end:                                           ; preds = %invoke.cont80, %if.then
  %139 = bitcast %"class.thrust::zip_iterator.964"* %result to %"class.thrust::iterator_facade.965"*
  %140 = load i64, i64* %n, align 8, !tbaa !13
  %call90 = call { %"struct.thrust::pair.82"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE(%"class.thrust::iterator_facade.965"* dereferenceable(1) %139, i64 %140)
  %coerce.dive91 = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive92 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive91, i32 0, i32 0
  %141 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive92 to { %"struct.thrust::pair.82"*, i32* }*
  %142 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %141, i32 0, i32 0
  %143 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call90, 0
  store %"struct.thrust::pair.82"* %143, %"struct.thrust::pair.82"** %142, align 8
  %144 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %141, i32 0, i32 1
  %145 = extractvalue { %"struct.thrust::pair.82"*, i32* } %call90, 1
  store i32* %145, i32** %144, align 8
  %146 = bitcast i64* %threshold_of_parallelism to i8*
  call void @llvm.lifetime.end(i64 8, i8* %146) #5
  %147 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %147) #5
  %148 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %148) #5
  %coerce.dive96 = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive97 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive96, i32 0, i32 0
  %149 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive97 to { %"struct.thrust::pair.82"*, i32* }*
  %150 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %149, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %150

eh.resume:                                        ; preds = %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val98 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val98
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElSJ_SK_SB_SL_SQ_lEENS3_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSS_IT5_T6_T7_T8_T9_T10_EEE4typeERKSZ_RKS16_(%"class.thrust::iterator_facade.969"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.969"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.969"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.969"*, align 8
  store %"class.thrust::iterator_facade.969"* %lhs, %"class.thrust::iterator_facade.969"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.969"* %rhs, %"class.thrust::iterator_facade.969"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.969"*, %"class.thrust::iterator_facade.969"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.969"* %0 to %"class.thrust::zip_iterator.968"*
  %2 = load %"class.thrust::iterator_facade.969"*, %"class.thrust::iterator_facade.969"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.969"* %2 to %"class.thrust::zip_iterator.968"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_(%"class.thrust::zip_iterator.968"* dereferenceable(16) %1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce0, i32* %arg2.coerce1, i64 %arg3, %"struct.thrust::pair.82"* %arg4.coerce0, i32* %arg4.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.968", align 8
  %arg4 = alloca %"class.thrust::zip_iterator.964", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %arg3.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.323", align 8
  %agg.tmp3 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", align 8
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %0 = bitcast %"class.thrust::zip_iterator.968"* %arg2 to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.964"* %arg4 to { %"struct.thrust::pair.82"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg4.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 1
  store i32* %arg4.coerce1, i32** %5, align 8
  store i64 %arg3, i64* %arg3.addr, align 8, !tbaa !13
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* sret %agg.tmp3, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %arg2, i64* dereferenceable(8) %arg3.addr, %"class.thrust::zip_iterator.964"* dereferenceable(16) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %agg.tmp3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EEm(%"class.thrust::detail::temporary_array.1039"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system, i64 %n) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.1039"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.1041", align 8
  %ref.tmp2 = alloca %"class.thrust::detail::temporary_allocator.1042", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_array.1039"* %this, %"class.thrust::detail::temporary_array.1039"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_array.1039"*, %"class.thrust::detail::temporary_array.1039"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.1039"* %this1 to %"class.thrust::detail::contiguous_storage.1040"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE(%"class.thrust::detail::temporary_allocator.1042"* %ref.tmp2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_(%"struct.thrust::detail::no_throw_allocator.1041"* %ref.tmp, %"class.thrust::detail::temporary_allocator.1042"* dereferenceable(8) %ref.tmp2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_(%"class.thrust::detail::contiguous_storage.1040"* %0, i64 %1, %"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont4 unwind label %lpad3

invoke.cont4:                                     ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1043"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1041"*)*)(%"struct.thrust::detail::no_throw_allocator.1041"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1043"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.1042"*)*)(%"class.thrust::detail::temporary_allocator.1042"* %ref.tmp2) #5
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.1039"* dereferenceable(24) %this1, i64 %3)
          to label %invoke.cont6 unwind label %lpad5

invoke.cont6:                                     ; preds = %invoke.cont4
  ret void

lpad:                                             ; preds = %entry
  %4 = landingpad { i8*, i32 }
          cleanup
  %5 = extractvalue { i8*, i32 } %4, 0
  store i8* %5, i8** %exn.slot, align 8
  %6 = extractvalue { i8*, i32 } %4, 1
  store i32 %6, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad3:                                            ; preds = %invoke.cont
  %7 = landingpad { i8*, i32 }
          cleanup
  %8 = extractvalue { i8*, i32 } %7, 0
  store i8* %8, i8** %exn.slot, align 8
  %9 = extractvalue { i8*, i32 } %7, 1
  store i32 %9, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1043"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1041"*)*)(%"struct.thrust::detail::no_throw_allocator.1041"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad3, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1043"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.1042"*)*)(%"class.thrust::detail::temporary_allocator.1042"* %ref.tmp2) #5
  br label %eh.resume

lpad5:                                            ; preds = %invoke.cont4
  %10 = landingpad { i8*, i32 }
          cleanup
  %11 = extractvalue { i8*, i32 } %10, 0
  store i8* %11, i8** %exn.slot, align 8
  %12 = extractvalue { i8*, i32 } %10, 1
  store i32 %12, i32* %ehselector.slot, align 4
  %13 = bitcast %"class.thrust::detail::temporary_array.1039"* %this1 to %"class.thrust::detail::contiguous_storage.1040"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1040"* %13) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad5, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val8 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail16accumulate_tilesENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce0, i32* %arg2.coerce1, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %arg3, %"class.thrust::tuple.1051"* %arg4.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.968", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp6 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %0 = bitcast %"class.thrust::zip_iterator.968"* %arg2 to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %arg4, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg4.coerce, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* sret %agg.tmp6, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %arg2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %arg3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %agg.tmp6)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1040"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.1045"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.1045"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %2 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  ret %"class.thrust::tuple.1051"* %2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEENS2_11scan_detail16inclusive_scan_nENS3_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* byval align 8 %g, %"class.thrust::tuple.1051"* %arg2.coerce, i64 %arg3, %"class.thrust::tuple.1051"* %arg4.coerce) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %arg5 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %arg3.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", align 8
  %agg.tmp11 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg2.coerce, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %arg4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive7, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg4.coerce, %"class.thrust::tuple.1051"** %coerce.dive8, align 8
  store i64 %arg3, i64* %arg3.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* sret %agg.tmp10, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %arg2, i64* dereferenceable(8) %arg3.addr, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %arg4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %arg5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %agg.tmp10)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_4gridILm128ELm3EEENS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEELm0EEEEEmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* noalias sret %agg.result, i64 %num_groups, i64 %heap_size, %struct.CUstream_st* %stream) #0 comdat {
entry:
  %num_groups.addr = alloca i64, align 8
  %heap_size.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %1 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm128ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %1)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 12, i32 4, i1 false)
  %4 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %5 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %8 = load i64, i64* %7, align 4
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %10 = load i32, i32* %9, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* sret %agg.result, %struct.CUstream_st* %0, i64 %8, i32 %10, i64 %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEENS2_11scan_detail19inclusive_downsweepENS3_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSJ_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSI_INSJ_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEEEENS3_6futureIvEET_T0_T1_T2_T3_T4_T5_T6_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce0, i32* %arg2.coerce1, %"class.thrust::system::cuda::detail::aligned_decomposition"* byval align 8 %arg3, %"class.thrust::tuple.1051"* %arg4.coerce, %"struct.thrust::pair.82"* %arg5.coerce0, i32* %arg5.coerce1) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27", align 1
  %arg2 = alloca %"class.thrust::zip_iterator.968", align 8
  %arg4 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %arg5 = alloca %"class.thrust::zip_iterator.964", align 8
  %arg6 = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972", align 1
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.316", align 8
  %agg.tmp6 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", align 8
  %agg.tmp7 = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %0 = bitcast %"class.thrust::zip_iterator.968"* %arg2 to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %arg2.coerce1, i32** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %arg4, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg4.coerce, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  %3 = bitcast %"class.thrust::zip_iterator.964"* %arg5 to { %"struct.thrust::pair.82"*, i32* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg5.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %3, i32 0, i32 1
  store i32* %arg5.coerce1, i32** %5, align 8
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* sret %agg.tmp6, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %arg1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %arg2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %arg3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %arg4, %"class.thrust::zip_iterator.964"* dereferenceable(16) %arg5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %arg6)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %agg.tmp6)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.1039"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.1039"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  store %"class.thrust::detail::temporary_array.1039"* %this, %"class.thrust::detail::temporary_array.1039"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.1039"*, %"class.thrust::detail::temporary_array.1039"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.1039"* %this1 to %"class.thrust::detail::contiguous_storage.1040"*
  %1 = bitcast %"class.thrust::detail::temporary_array.1039"* %this1 to %"class.thrust::detail::contiguous_storage.1040"*
  %call = invoke %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1040"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.1039"* %this1 to %"class.thrust::detail::contiguous_storage.1040"*
  %call7 = invoke %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.1040"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive10, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call7, %"class.thrust::tuple.1051"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive14, i32 0, i32 0
  %3 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive18, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_(%"class.thrust::detail::contiguous_storage.1040"* %0, %"class.thrust::tuple.1051"* %3, %"class.thrust::tuple.1051"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.1039"* %this1 to %"class.thrust::detail::contiguous_storage.1040"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1040"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.1039"* %this1 to %"class.thrust::detail::contiguous_storage.1040"*
  call void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1040"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i32* } @_ZN6thrustplINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEET_RKNS_15iterator_facadeIST_T0_T1_T2_T3_T4_EENST_15difference_typeE(%"class.thrust::iterator_facade.965"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.964", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.965"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::zip_iterator.964", align 8
  store %"class.thrust::iterator_facade.965"* %i, %"class.thrust::iterator_facade.965"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::zip_iterator.964"* %tmp to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.965"*, %"class.thrust::iterator_facade.965"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.965"* %1 to %"class.thrust::zip_iterator.964"*
  %3 = bitcast %"class.thrust::zip_iterator.964"* %tmp to i8*
  %4 = bitcast %"class.thrust::zip_iterator.964"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 1, i1 false)
  %5 = bitcast %"class.thrust::zip_iterator.964"* %tmp to %"class.thrust::iterator_facade.965"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.964"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl(%"class.thrust::iterator_facade.965"* %5, i64 %6)
  %7 = bitcast %"class.thrust::zip_iterator.964"* %retval to i8*
  %8 = bitcast %"class.thrust::zip_iterator.964"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 16, i32 8, i1 false)
  %9 = bitcast %"class.thrust::zip_iterator.964"* %tmp to i8*
  call void @llvm.lifetime.end(i64 16, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.966", %"class.thrust::tuple.966"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.967"* %coerce.dive1 to { %"struct.thrust::pair.82"*, i32* }*
  %11 = load { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %10, align 8
  ret { %"struct.thrust::pair.82"*, i32* } %11
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENS4_20distance_from_resultIT_T0_E4typeERKSM_RKSN_(%"class.thrust::zip_iterator.968"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::zip_iterator.968"* %f1, %"class.thrust::zip_iterator.968"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %f2, %"class.thrust::zip_iterator.968"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.968"* dereferenceable(16) %0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEESK_EENT_15difference_typeERKSL_RKT0_NS4_17integral_constantIbLb1EEE(%"class.thrust::zip_iterator.968"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  store %"class.thrust::zip_iterator.968"* %f1, %"class.thrust::zip_iterator.968"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %f2, %"class.thrust::zip_iterator.968"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %f1.addr, align 8
  %2 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %f2.addr, align 8
  %call = call i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.968"* %1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %2)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE11distance_toISH_EElRKNS0_IT_EE(%"class.thrust::zip_iterator.968"* %this, %"class.thrust::zip_iterator.968"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  store %"class.thrust::zip_iterator.968"* %this, %"class.thrust::zip_iterator.968"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.968"* %other, %"class.thrust::zip_iterator.968"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %this.addr, align 8
  %0 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %other.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.970"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.968"* %0)
  %1 = bitcast %"class.thrust::tuple.970"* %call to %"struct.thrust::detail::cons.971"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.971"* dereferenceable(16) %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.960"* %call2 to %"class.thrust::iterator_facade.962"*
  %call3 = call dereferenceable(16) %"class.thrust::tuple.970"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.968"* %this1)
  %3 = bitcast %"class.thrust::tuple.970"* %call3 to %"struct.thrust::detail::cons.971"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.971"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::normal_iterator.960"* %call4 to %"class.thrust::iterator_facade.962"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.962"* dereferenceable(1) %2, %"class.thrust::iterator_facade.962"* dereferenceable(1) %4)
  ret i64 %call5
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.962"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.962"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.962"*, align 8
  store %"class.thrust::iterator_facade.962"* %lhs, %"class.thrust::iterator_facade.962"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.962"* %rhs, %"class.thrust::iterator_facade.962"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.962"* %0 to %"class.thrust::detail::normal_iterator.960"*
  %2 = load %"class.thrust::iterator_facade.962"*, %"class.thrust::iterator_facade.962"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.962"* %2 to %"class.thrust::detail::normal_iterator.960"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust3getILi0ENS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_4consINS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSD_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.971"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.971"*, align 8
  store %"struct.thrust::detail::cons.971"* %c, %"struct.thrust::detail::cons.971"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.971"*, %"struct.thrust::detail::cons.971"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE(%"struct.thrust::detail::cons.971"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.960"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.970"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.968"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  store %"class.thrust::zip_iterator.968"* %this, %"class.thrust::zip_iterator.968"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.970"* %m_iterator_tuple
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.960"* %f1, %"class.thrust::detail::normal_iterator.960"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.960"* %f2, %"class.thrust::detail::normal_iterator.960"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  store %"class.thrust::detail::normal_iterator.960"* %f1, %"class.thrust::detail::normal_iterator.960"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.960"* %f2, %"class.thrust::detail::normal_iterator.960"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.960"* %1 to %"class.thrust::iterator_adaptor.961"*
  %3 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.960"* %3 to %"class.thrust::iterator_adaptor.961"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.961"* %2, %"class.thrust::iterator_adaptor.961"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.961"* %this, %"class.thrust::iterator_adaptor.961"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.961"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.961"*, align 8
  store %"class.thrust::iterator_adaptor.961"* %this, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.961"* %y, %"class.thrust::iterator_adaptor.961"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.961"*, %"class.thrust::iterator_adaptor.961"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.961"*, %"class.thrust::iterator_adaptor.961"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.961"* %0)
  %1 = bitcast %"class.thrust::pointer.926"* %call to %"class.thrust::iterator_facade.928"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.926"* %m_iterator to %"class.thrust::iterator_facade.928"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.928"* dereferenceable(1) %1, %"class.thrust::iterator_facade.928"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.928"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.928"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.928"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.928"*, align 8
  store %"class.thrust::iterator_facade.928"* %lhs, %"class.thrust::iterator_facade.928"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.928"* %rhs, %"class.thrust::iterator_facade.928"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.928"*, %"class.thrust::iterator_facade.928"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.928"* %0 to %"class.thrust::pointer.926"*
  %2 = load %"class.thrust::iterator_facade.928"*, %"class.thrust::iterator_facade.928"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.928"* %2 to %"class.thrust::pointer.926"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.926"* dereferenceable(8) %1, %"class.thrust::pointer.926"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.926"* dereferenceable(8) %f1, %"class.thrust::pointer.926"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.926"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.926"* %f1, %"class.thrust::pointer.926"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %f2, %"class.thrust::pointer.926"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.926"* dereferenceable(8) %0, %"class.thrust::pointer.926"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.926"* dereferenceable(8) %f1, %"class.thrust::pointer.926"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.926"*, align 8
  store %"class.thrust::pointer.926"* %f1, %"class.thrust::pointer.926"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %f2, %"class.thrust::pointer.926"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.926"* %1 to %"class.thrust::iterator_adaptor.927"*
  %3 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.926"* %3 to %"class.thrust::iterator_adaptor.927"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.927"* %2, %"class.thrust::iterator_adaptor.927"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.927"* %this, %"class.thrust::iterator_adaptor.927"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.927"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.927"*, align 8
  store %"class.thrust::iterator_adaptor.927"* %this, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.927"* %y, %"class.thrust::iterator_adaptor.927"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.927"*, %"class.thrust::iterator_adaptor.927"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.927"*, %"class.thrust::iterator_adaptor.927"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.927"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !517
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.82"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.82"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEESE_NS0_4consINS4_INS5_IjSB_SC_SC_EEEENS_9null_typeEEEEET_RKNSH_IT0_T1_EE(%"struct.thrust::detail::cons.971"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.971"*, align 8
  store %"struct.thrust::detail::cons.971"* %t, %"struct.thrust::detail::cons.971"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.971"*, %"struct.thrust::detail::cons.971"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.971", %"struct.thrust::detail::cons.971"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.960"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 64, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.323"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %a2, i64* dereferenceable(8) %a3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %a3.addr = alloca i64*, align 8
  %a4.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1060", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %a2, %"class.thrust::zip_iterator.968"** %a2.addr, align 8, !tbaa !7
  store i64* %a3, i64** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %a4, %"class.thrust::zip_iterator.964"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %a2.addr, align 8
  %2 = load i64*, i64** %a3.addr, align 8
  %3 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.1060"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %1, i64* dereferenceable(8) %2, %"class.thrust::zip_iterator.964"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %agg.result, %"class.thrust::tuple.1060"* dereferenceable(56) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 64, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %task to i8*
  call void @llvm.lifetime.start(i64 88, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 64, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %task to i8*
  call void @llvm.lifetime.end(i64 88, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.328"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1067"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.325"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm256EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.326"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.324", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !543
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1068"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj256ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 64, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1072"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.324"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1069"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 88, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 88, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj256ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 88, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm256EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEElNSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1071"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEElNS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.1060"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t3, %"class.thrust::zip_iterator.964"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %2 = load i64*, i64** %t2.addr, align 8
  %3 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_(%"class.thrust::tuple.1060"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %1, i64* dereferenceable(8) %2, %"class.thrust::zip_iterator.964"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEElNSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %this, %"class.thrust::tuple.1060"* dereferenceable(56) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1060"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1060"* %args, %"class.thrust::tuple.1060"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1059"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1060"*, %"class.thrust::tuple.1060"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1060"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1060"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 56, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEElNS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKlRKSR_RKSX_(%"class.thrust::tuple.1060"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1060"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1060"* %this, %"class.thrust::tuple.1060"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t3, %"class.thrust::zip_iterator.964"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1060"*, %"class.thrust::tuple.1060"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1060"* %this1 to %"struct.thrust::detail::cons.1061"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1061"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %2, i64* dereferenceable(8) %3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_IlNS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KlKSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1061"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t2, i64* dereferenceable(8) %t3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1061"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1061"* %this, %"struct.thrust::detail::cons.1061"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t2, %"class.thrust::zip_iterator.968"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t4, %"class.thrust::zip_iterator.964"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1061"*, %"struct.thrust::detail::cons.1061"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1061", %"struct.thrust::detail::cons.1061"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1061", %"struct.thrust::detail::cons.1061"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1062"* %tail, %"class.thrust::zip_iterator.968"* dereferenceable(16) %3, i64* dereferenceable(8) %4, %"class.thrust::zip_iterator.964"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_IlNS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KlKSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1062"* %this, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, i64* dereferenceable(8) %t2, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1062"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1062"* %this, %"struct.thrust::detail::cons.1062"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t3, %"class.thrust::zip_iterator.964"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1062"*, %"struct.thrust::detail::cons.1062"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1062", %"struct.thrust::detail::cons.1062"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.968"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.968"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1062", %"struct.thrust::detail::cons.1062"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1063"* %tail, i64* dereferenceable(8) %3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEC2IKlKSK_KSQ_KSI_SY_SY_SY_SY_SY_SY_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1063"* %this, i64* dereferenceable(8) %t1, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1063"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1063"* %this, %"struct.thrust::detail::cons.1063"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t2, %"class.thrust::zip_iterator.964"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1063"*, %"struct.thrust::detail::cons.1063"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1063", %"struct.thrust::detail::cons.1063"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !545
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1063", %"struct.thrust::detail::cons.1063"* %this1, i32 0, i32 1
  %2 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t2.addr, align 8
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1064"* %tail, %"class.thrust::zip_iterator.964"* dereferenceable(16) %2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1064"* %this, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1064"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t2.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1064"* %this, %"struct.thrust::detail::cons.1064"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.964"* %t1, %"class.thrust::zip_iterator.964"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1064"*, %"struct.thrust::detail::cons.1064"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1064", %"struct.thrust::detail::cons.1064"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.964"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.964"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1064", %"struct.thrust::detail::cons.1064"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.1065"* %tail, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.1065"* %this, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1065"*, align 8
  %t1.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.1065"* %this, %"struct.thrust::detail::cons.1065"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.1065"*, %"struct.thrust::detail::cons.1065"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1065", %"struct.thrust::detail::cons.1065"* %this9, i32 0, i32 0
  %9 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t1.addr, align 8
  %10 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %head to i8*
  %11 = bitcast %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERNS_16execution_policyISA_EE(%"class.thrust::detail::temporary_allocator.1042"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1042"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.1042"* %this, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %system, %"struct.thrust::execution_policy.120"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.1042"*, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.1042"* %this1 to %"class.thrust::detail::tagged_allocator.1043"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.1043"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1042", %"class.thrust::detail::temporary_allocator.1042"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cuda::detail::tag"* %call, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.1042"* %this1 to %"class.thrust::detail::tagged_allocator.1043"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev(%"class.thrust::detail::tagged_allocator.1043"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSC_(%"struct.thrust::detail::no_throw_allocator.1041"* %this, %"class.thrust::detail::temporary_allocator.1042"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.1042"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %this, %"struct.thrust::detail::no_throw_allocator.1041"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.1042"* %other, %"class.thrust::detail::temporary_allocator.1042"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.1041"* %this1 to %"class.thrust::detail::temporary_allocator.1042"*
  %1 = load %"class.thrust::detail::temporary_allocator.1042"*, %"class.thrust::detail::temporary_allocator.1042"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.1042"* %0, %"class.thrust::detail::temporary_allocator.1042"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEC2EmRKSE_(%"class.thrust::detail::contiguous_storage.1040"* %this, i64 %n, %"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  %n.addr = alloca i64, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  store %"struct.thrust::detail::no_throw_allocator.1041"* %alloc, %"struct.thrust::detail::no_throw_allocator.1041"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_(%"struct.thrust::detail::no_throw_allocator.1041"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.1048"* %agg.tmp, %"class.thrust::tuple.1051"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  %1 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.1045"* %m_begin, %"class.thrust::tuple.1051"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !552
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.1040"* %this1, i64 %2)
          to label %invoke.cont4 unwind label %lpad

invoke.cont4:                                     ; preds = %invoke.cont3
  ret void

lpad:                                             ; preds = %invoke.cont3, %invoke.cont, %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1043"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1041"*)*)(%"struct.thrust::detail::no_throw_allocator.1041"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val5 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val5
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev(%"class.thrust::detail::tagged_allocator.1043"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.1043"*, align 8
  store %"class.thrust::detail::tagged_allocator.1043"* %this, %"class.thrust::detail::tagged_allocator.1043"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.1043"*, %"class.thrust::detail::tagged_allocator.1043"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22temporary_array_detail16construct_valuesINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS0_15temporary_arrayIS7_NS_6system4cuda6detail3tagEEEmEENS0_9enable_ifIXsr20avoid_initializationIT_EE5valueEvE4typeERT0_T1_(%"class.thrust::detail::temporary_array.1039"* dereferenceable(24), i64) #1 comdat {
entry:
  %.addr = alloca %"class.thrust::detail::temporary_array.1039"*, align 8
  %.addr1 = alloca i64, align 8
  store %"class.thrust::detail::temporary_array.1039"* %0, %"class.thrust::detail::temporary_array.1039"** %.addr, align 8, !tbaa !7
  store i64 %1, i64* %.addr1, align 8, !tbaa !13
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1040"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.1040"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1043"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1041"*)*)(%"struct.thrust::detail::no_throw_allocator.1041"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1043"*)* @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1041"*)*)(%"struct.thrust::detail::no_throw_allocator.1041"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.1043"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.1043"*, align 8
  store %"class.thrust::detail::tagged_allocator.1043"* %this, %"class.thrust::detail::tagged_allocator.1043"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.1043"*, %"class.thrust::detail::tagged_allocator.1043"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.1042"* %this, %"class.thrust::detail::temporary_allocator.1042"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1042"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.1042"*, align 8
  store %"class.thrust::detail::temporary_allocator.1042"* %this, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.1042"* %other, %"class.thrust::detail::temporary_allocator.1042"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.1042"*, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.1042"* %this1 to %"class.thrust::detail::tagged_allocator.1043"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_7pointerIS6_SA_NS_11use_defaultESC_EEEC2Ev(%"class.thrust::detail::tagged_allocator.1043"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1042", %"class.thrust::detail::temporary_allocator.1042"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.1042"*, %"class.thrust::detail::temporary_allocator.1042"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1042", %"class.thrust::detail::temporary_allocator.1042"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::tag"* %ref, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEC2ERKSD_(%"struct.thrust::detail::no_throw_allocator.1041"* %this, %"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %this, %"struct.thrust::detail::no_throw_allocator.1041"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.1041"* %0, %"struct.thrust::detail::no_throw_allocator.1041"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.1041"* %this1 to %"class.thrust::detail::temporary_allocator.1042"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.1041"* %2 to %"class.thrust::detail::temporary_allocator.1042"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEEC2ERKSB_(%"class.thrust::detail::temporary_allocator.1042"* %1, %"class.thrust::detail::temporary_allocator.1042"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.1048"* %this, %"class.thrust::tuple.1051"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %other.addr = alloca %"class.thrust::tuple.1051"*, align 8
  store %"class.thrust::pointer.1048"* %this, %"class.thrust::pointer.1048"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1051"* %other, %"class.thrust::tuple.1051"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.1048"* %this1 to %"class.thrust::iterator_adaptor.1049"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_(%"class.thrust::iterator_adaptor.1049"* %0, %"class.thrust::tuple.1051"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.1045"* %this, %"class.thrust::tuple.1051"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.1045"* %this, %"class.thrust::detail::normal_iterator.1045"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.1045"* %this2 to %"class.thrust::iterator_adaptor.1046"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_(%"class.thrust::iterator_adaptor.1046"* %0, %"class.thrust::pointer.1048"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.1040"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.1048", align 8
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.1051"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call, %"class.thrust::tuple.1051"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %2 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.1045"* %ref.tmp, %"class.thrust::tuple.1051"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.1045"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1045"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !552
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.1048"* %agg.tmp7, %"class.thrust::tuple.1051"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive8, i32 0, i32 0
  %6 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.1045"* %ref.tmp6, %"class.thrust::tuple.1051"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1045"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1045"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !552
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEC2ERKSD_(%"class.thrust::iterator_adaptor.1049"* %this, %"class.thrust::tuple.1051"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1049"*, align 8
  %iter.addr = alloca %"class.thrust::tuple.1051"**, align 8
  store %"class.thrust::iterator_adaptor.1049"* %this, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1051"** %iter, %"class.thrust::tuple.1051"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1049"*, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.1049"* %this1 to %"class.thrust::iterator_facade.1050"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::tuple.1051"**, %"class.thrust::tuple.1051"*** %iter.addr, align 8
  %2 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %1, align 8, !tbaa !1
  store %"class.thrust::tuple.1051"* %2, %"class.thrust::tuple.1051"** %m_iterator, align 8, !tbaa !556
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_EC2ERKSE_(%"class.thrust::iterator_adaptor.1046"* %this, %"class.thrust::pointer.1048"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1046"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.1048"*, align 8
  store %"class.thrust::iterator_adaptor.1046"* %this, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.1048"* %iter, %"class.thrust::pointer.1048"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1046"*, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.1046"* %this1 to %"class.thrust::iterator_facade.1047"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.1048"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.1048"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_m(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.1051"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  %2 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.1051"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE8allocateERSE_mEN19workaround_warnings8allocateESG_m(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.1041"* %0 to %"class.thrust::detail::temporary_allocator.1042"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.1051"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.1042"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  %3 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.1051"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.1042"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1042"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.1074", align 8
  %ref.tmp = alloca %"struct.thrust::pair.1075", align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.1042"* %this, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.1042"*, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.1074"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1042"* %this1)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.1075"* %ref.tmp to { %"class.thrust::tuple.1051"*, i64 }*
  %4 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call2, 0
  store %"class.thrust::tuple.1051"* %5, %"class.thrust::tuple.1051"** %4, align 8
  %6 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.1074"* %result, %"struct.thrust::pair.1075"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.1074", %"struct.thrust::pair.1074"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !558
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.1074", %"struct.thrust::pair.1074"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  %13 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.1042"* %this1, %"class.thrust::tuple.1051"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.1074"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.1074", %"struct.thrust::pair.1074"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.1048"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.1048"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.1074"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive11, i32 0, i32 0
  %25 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive12, align 8
  ret %"class.thrust::tuple.1051"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust20get_temporary_bufferINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS2_INS_7pointerIT_T0_NS_11use_defaultESD_EENSE_15difference_typeEEERKNS_6detail21execution_policy_baseISC_EESF_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1075", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.1075", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.1075"* %agg.tmp to { %"class.thrust::tuple.1051"*, i64 }*
  %4 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call2, 0
  store %"class.thrust::tuple.1051"* %5, %"class.thrust::tuple.1051"** %4, align 8
  %6 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.1075"* %agg.tmp to { %"class.thrust::tuple.1051"*, i64 }*
  %9 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %8, i32 0, i32 0
  %10 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %9, align 8
  %11 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_(%"class.thrust::tuple.1051"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.1075"* %retval to { %"class.thrust::tuple.1051"*, i64 }*
  %14 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call3, 0
  store %"class.thrust::tuple.1051"* %15, %"class.thrust::tuple.1051"** %14, align 8
  %16 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.1075"* %retval to { %"class.thrust::tuple.1051"*, i64 }*
  %19 = load { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %18, align 8
  ret { %"class.thrust::tuple.1051"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1042"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1042"*, align 8
  store %"class.thrust::detail::temporary_allocator.1042"* %this, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.1042"*, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1042", %"class.thrust::detail::temporary_allocator.1042"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cuda::detail::tag"*, %"struct.thrust::system::cuda::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cuda::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEC2ISB_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.1074"* %this, %"struct.thrust::pair.1075"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.1074"*, align 8
  %p.addr = alloca %"struct.thrust::pair.1075"*, align 8
  store %"struct.thrust::pair.1074"* %this, %"struct.thrust::pair.1074"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.1075"* %p, %"struct.thrust::pair.1075"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.1074"*, %"struct.thrust::pair.1074"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1074", %"struct.thrust::pair.1074"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.1075"*, %"struct.thrust::pair.1075"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.1075", %"struct.thrust::pair.1075"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.1074", %"struct.thrust::pair.1074"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.1075"*, %"struct.thrust::pair.1075"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.1075", %"struct.thrust::pair.1075"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !561
  store i64 %4, i64* %second, align 8, !tbaa !558
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.1042"* %this, %"class.thrust::tuple.1051"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1042"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.1042"* %this, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.1042"*, %"class.thrust::detail::temporary_allocator.1042"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1042"* %this2)
  %0 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %3 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0, %"class.thrust::tuple.1051"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS4_INS_7pointerIS7_SB_NS_11use_defaultESD_EElEEEENS4_INSC_IT_T0_SD_SD_EENSI_15difference_typeEEET1_(%"class.thrust::tuple.1051"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1075", align 8
  %p = alloca %"struct.thrust::pair.1075", align 8
  %ptr = alloca %"class.thrust::pointer.1048", align 8
  %0 = bitcast %"struct.thrust::pair.1075"* %p to { %"class.thrust::tuple.1051"*, i64 }*
  %1 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %0, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce0, %"class.thrust::tuple.1051"** %1, align 8
  %2 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.1048"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.1075", %"struct.thrust::pair.1075"* %p, i32 0, i32 0
  %call = call %"class.thrust::tuple.1051"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.1048"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.1048"* %ptr, %"class.thrust::tuple.1051"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.1075", %"struct.thrust::pair.1075"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.1075"* %retval, %"class.thrust::pointer.1048"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.1048"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.1075"* %retval to { %"class.thrust::tuple.1051"*, i64 }*
  %6 = load { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %5, align 8
  ret { %"class.thrust::tuple.1051"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS5_INS_7pointerIT_T0_NS_11use_defaultESF_EENSG_15difference_typeEEERNS_16execution_policyISE_EESH_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1075", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.1048"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"class.thrust::tuple.1051"* @_ZN6thrust6mallocINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  %call2 = call %"class.thrust::tuple.1051"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.1048"* %ptr)
  %tobool = icmp ne %"class.thrust::tuple.1051"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.1048"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %7 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  %call5 = call { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_(%"class.thrust::tuple.1051"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.1075"* %retval to { %"class.thrust::tuple.1051"*, i64 }*
  %9 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call5, 0
  store %"class.thrust::tuple.1051"* %10, %"class.thrust::tuple.1051"** %9, align 8
  %11 = getelementptr inbounds { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"class.thrust::tuple.1051"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.1048"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.1075"* %retval to { %"class.thrust::tuple.1051"*, i64 }*
  %15 = load { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %14, align 8
  ret { %"class.thrust::tuple.1051"*, i64 } %15
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.1048"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  store %"class.thrust::pointer.1048"* %ptr, %"class.thrust::pointer.1048"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  %3 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  %call = call %"class.thrust::tuple.1051"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_(%"class.thrust::tuple.1051"* %3)
  ret %"class.thrust::tuple.1051"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.1075"* %this, %"class.thrust::pointer.1048"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.1075"*, align 8
  %x.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.1075"* %this, %"struct.thrust::pair.1075"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.1048"* %x, %"class.thrust::pointer.1048"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.1075"*, %"struct.thrust::pair.1075"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1075", %"struct.thrust::pair.1075"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.1075", %"struct.thrust::pair.1075"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !561
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEE3getESD_(%"class.thrust::tuple.1051"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %ptr.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  %call = call %"class.thrust::tuple.1051"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.1048"* %ptr)
  ret %"class.thrust::tuple.1051"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZNK6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_E3getEv(%"class.thrust::pointer.1048"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.1048"*, align 8
  store %"class.thrust::pointer.1048"* %this, %"class.thrust::pointer.1048"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.1048"* %this1 to %"class.thrust::iterator_adaptor.1049"*
  %call = call dereferenceable(8) %"class.thrust::tuple.1051"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.1049"* %0)
  %1 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %call, align 8, !tbaa !1
  ret %"class.thrust::tuple.1051"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::tuple.1051"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.1049"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1049"*, align 8
  store %"class.thrust::iterator_adaptor.1049"* %this, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1049"*, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.1051"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6mallocINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESD_EERKNS_6detail21execution_policy_baseISC_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"class.thrust::tuple.1051"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.1048", align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::tuple.1051"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call1 to %"struct.thrust::execution_policy.120"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"class.thrust::tuple.1051"* @_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call2, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  %call4 = call %"class.thrust::tuple.1051"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.1048"* dereferenceable(8) %ref.tmp)
  store %"class.thrust::tuple.1051"* %call4, %"class.thrust::tuple.1051"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.1048"* %retval, %"class.thrust::tuple.1051"* %4)
  %5 = bitcast %"class.thrust::tuple.1051"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive5, i32 0, i32 0
  %6 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive6, align 8
  ret %"class.thrust::tuple.1051"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"class.thrust::tuple.1051"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EElEENS3_IT_T0_EESD_SE_(%"class.thrust::tuple.1051"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1075", align 8
  %x = alloca %"class.thrust::pointer.1048", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %x.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEC2ERKSB_RKl(%"struct.thrust::pair.1075"* %retval, %"class.thrust::pointer.1048"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.1075"* %retval to { %"class.thrust::tuple.1051"*, i64 }*
  %1 = load { %"class.thrust::tuple.1051"*, i64 }, { %"class.thrust::tuple.1051"*, i64 }* %0, align 8
  ret { %"class.thrust::tuple.1051"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6system6detail7generic6mallocINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS0_4cuda6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESF_EERNS_16execution_policyISE_EEm(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.129", align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.120"* %1 to %"struct.thrust::detail::execution_policy_base.121"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 12, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system4cuda6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.129", %"class.thrust::pointer.129"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.130", %"class.thrust::iterator_adaptor.130"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.129"* %void_ptr)
  %4 = bitcast i8* %call2 to %"class.thrust::tuple.1051"*
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.1048"* %retval, %"class.thrust::tuple.1051"* %4)
  %5 = bitcast %"class.thrust::pointer.129"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %6 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  ret %"class.thrust::tuple.1051"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.1051"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::execution_policy.120"*
  %2 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %1, %"class.thrust::tuple.1051"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EES6_NS_11use_defaultESD_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %exec, %"class.thrust::tuple.1051"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.120"* %exec, %"struct.thrust::execution_policy.120"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"class.thrust::tuple.1051"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.1051"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.1048", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %ptr.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1048"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  call void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::tuple.1051"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail4freeINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1), %"class.thrust::tuple.1051"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.1048", align 8
  %.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %ptr.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %0, %"struct.thrust::system::cuda::detail::execution_policy.119"** %.addr, align 8, !tbaa !7
  %call = call %"class.thrust::tuple.1051"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSF_(%"class.thrust::pointer.1048"* dereferenceable(8) %ptr)
  %1 = bitcast %"class.thrust::tuple.1051"* %call to i8*
  %call2 = call i32 @cudaFree(i8* %1)
  call void @_ZN6thrust6system4cuda6detail14throw_on_errorE9cudaErrorPKc(i32 %call2, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i32 0, i32 0))
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.1040"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.1048", align 8
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1040"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.1045"* %m_begin to %"class.thrust::iterator_adaptor.1046"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.1048"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.1046"* %0)
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1040"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  %3 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %m_allocator, %"class.thrust::tuple.1051"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EC2IS5_EEPT_(%"class.thrust::pointer.1048"* %agg.tmp6, %"class.thrust::tuple.1051"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive7, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEC2ESD_(%"class.thrust::detail::normal_iterator.1045"* %ref.tmp, %"class.thrust::tuple.1051"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1045"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1045"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !552
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1040"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !552
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEm(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a, %"class.thrust::tuple.1051"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %0, %"class.thrust::tuple.1051"* %4, i64 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1048"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.1046"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1046"*, align 8
  store %"class.thrust::iterator_adaptor.1046"* %this, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1046"*, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.1048"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE10deallocateERSE_NS_7pointerIS8_SC_NS_11use_defaultESI_EEmEN19workaround_warnings10deallocateESG_SJ_m(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a, %"class.thrust::tuple.1051"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.1041"* %0, %"class.thrust::tuple.1051"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEE10deallocateENS_7pointerIS7_SB_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.1041"* %this, %"class.thrust::tuple.1051"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %this, %"struct.thrust::detail::no_throw_allocator.1041"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.1041"* %this2 to %"class.thrust::detail::temporary_allocator.1042"*
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE10deallocateENS_7pointerIS6_SA_NS_11use_defaultESD_EEm(%"class.thrust::detail::temporary_allocator.1042"* %0, %"class.thrust::tuple.1051"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 88, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 88, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16accumulate_tilesENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_SN_SN_SN_SN_SN_EEEES12_RKS13_RKS14_RKS15_RKS16_RKS17_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %a2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %a3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %a3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1077", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %a2, %"class.thrust::zip_iterator.968"** %a2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %a3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %a4, %"class.thrust::detail::normal_iterator.1045"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %a2.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.1077"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %agg.result, %"class.thrust::tuple.1077"* dereferenceable(80) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 88, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 88, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchESB_S19_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %task to i8*
  call void @llvm.lifetime.start(i64 112, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 88, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 112, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %task to i8*
  call void @llvm.lifetime.end(i64 112, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1083"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 88, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !563
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S19_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 112, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1084"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEC2ESB_S19_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 88, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1088"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1085"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 112, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1B_EN10workaround14supported_pathEjjmS1E_S1B_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 112, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 112, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16accumulate_tilesENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1087"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_SL_SL_SL_SL_SL_E4typeERKS10_RKS11_RKS12_RKS13_RKS14_(%"class.thrust::tuple.1077"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_(%"class.thrust::tuple.1077"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_SN_EEEC2ES7_RKS11_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %this, %"class.thrust::tuple.1077"* dereferenceable(80) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::accumulate_tiles", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1077"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1077"* %args, %"class.thrust::tuple.1077"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1076"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1077"*, %"class.thrust::tuple.1077"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1077"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1077"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 80, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSX_(%"class.thrust::tuple.1077"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1077"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1077"* %this, %"class.thrust::tuple.1077"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1077"*, %"class.thrust::tuple.1077"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1077"* %this1 to %"struct.thrust::detail::cons.1078"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1078"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEC2IKS8_KSN_KSP_KSS_KSY_KSL_S1A_S1A_S1A_S1A_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1078"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1078"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1078"* %this, %"struct.thrust::detail::cons.1078"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t2, %"class.thrust::zip_iterator.968"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t4, %"class.thrust::detail::normal_iterator.1045"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1078"*, %"struct.thrust::detail::cons.1078"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1078", %"struct.thrust::detail::cons.1078"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1078", %"struct.thrust::detail::cons.1078"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t2.addr, align 8
  %4 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1079"* %tail, %"class.thrust::zip_iterator.968"* dereferenceable(16) %3, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %4, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEC2IKSJ_KSL_KSO_KSU_KSH_S14_S14_S14_S14_S14_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1079"* %this, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1079"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1079"* %this, %"struct.thrust::detail::cons.1079"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1079"*, %"struct.thrust::detail::cons.1079"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1079", %"struct.thrust::detail::cons.1079"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.968"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.968"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1079", %"struct.thrust::detail::cons.1079"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1080"* %tail, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEC2IKS6_KSH_KSN_KSC_SV_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1080"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1080"*, align 8
  %t1.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1080"* %this, %"struct.thrust::detail::cons.1080"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t2, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1080"*, %"struct.thrust::detail::cons.1080"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1080", %"struct.thrust::detail::cons.1080"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %head to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false), !tbaa.struct !220
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1080", %"struct.thrust::detail::cons.1080"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1081"* %tail, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1081"* %this, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t1, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1081"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t2.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1081"* %this, %"struct.thrust::detail::cons.1081"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.1045"* %t1, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1081"*, %"struct.thrust::detail::cons.1081"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1081", %"struct.thrust::detail::cons.1081"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1045"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.1045"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1081", %"struct.thrust::detail::cons.1081"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.1065"* %tail, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 48, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail16inclusive_scan_nENS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEEEENS4_7closureIT_NSD_IT0_T1_T2_T3_T4_SG_SG_SG_SG_SG_EEEEST_RKSU_RKSV_RKSW_RKSX_RKSY_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %a2, i64* dereferenceable(8) %a3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %a4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %a5) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %a3.addr = alloca i64*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %a5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1091", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %a2, %"class.thrust::detail::normal_iterator.1045"** %a2.addr, align 8, !tbaa !7
  store i64* %a3, i64** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %a4, %"class.thrust::detail::normal_iterator.1045"** %a4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %a2.addr, align 8
  %2 = load i64*, i64** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %a4.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a5.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_(%"class.thrust::tuple.1091"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %1, i64* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %agg.result, %"class.thrust::tuple.1091"* dereferenceable(40) %ref.tmp)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 0
  %0 = load i8, i8* %stream_valid, align 8, !tbaa !565, !range !77
  %tobool = trunc i8 %0 to i1
  ret i1 %tobool
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 48, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.result to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %e to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8
  %s = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 2
  %0 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !568
  ret %struct.CUstream_st* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8
  %be = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 3
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %be, align 8, !tbaa !569
  ret %struct.CUevent_st* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 48, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchESB_S10_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 48, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1095"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_size, align 4, !tbaa !570
  ret i32 %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"** %this.addr, align 8
  ret i32 128
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"** %this.addr, align 8
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this1, i32 0, i32 1
  %0 = load i32, i32* %m_heap_size, align 4, !tbaa !573
  ret i32 %0
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !574
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S10_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* sret %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %tmp2 = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %size.addr, align 4, !tbaa !11
  %1 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 4, i32 4, i1 false), !tbaa.struct !151
  %4 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %5 = load i32, i32* %coerce.dive1, align 4
  %call = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEE4makeEiiS8_i(i32 %0, i32 %1, i32 %5, i32 %4)
  store { i64, i32 } %call, { i64, i32 }* %tmp, align 8
  %6 = bitcast { i64, i32 }* %tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %6, i64 12, i32 4, i1 false)
  %8 = bitcast { i64, i32 }* %tmp2 to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = load { i64, i32 }, { i64, i32 }* %tmp2, align 8
  ret { i64, i32 } %10
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1096"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail10grid_makerINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEE4makeEiSA_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* noalias sret %agg.result, i32 %size, i64 %block.coerce0, i32 %block.coerce1, i32 %index) #0 comdat align 2 {
entry:
  %block = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %block.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %block.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %block to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %4 = load i32, i32* %size.addr, align 4, !tbaa !11
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %block to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load i32, i32* %index.addr, align 4, !tbaa !11
  %8 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 12, i32 4, i1 false)
  %10 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %11 = load i64, i64* %10, align 4
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %13 = load i32, i32* %12, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.result, i32 %4, i64 %11, i32 %13, i32 %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %this, i32 %size, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"*, align 8
  %size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"** %this.addr, align 8, !tbaa !1
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"** %this.addr, align 8
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*
  %5 = load i32, i32* %size.addr, align 4, !tbaa !11
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 12, i32 4, i1 false)
  %8 = load i32, i32* %i.addr, align 4, !tbaa !11
  %9 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %10 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 12, i32 4, i1 false)
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %12 = load i64, i64* %11, align 4
  %13 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %14 = load i32, i32* %13, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %4, i32 %5, i64 %12, i32 %14, i32 %8)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEC2EiSA_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this, i32 %sz, i64 %exec.coerce0, i32 %exec.coerce1, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %coerce = alloca { i64, i32 }, align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*, align 8
  %sz.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"** %this.addr, align 8, !tbaa !1
  store i32 %sz, i32* %sz.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this_exec to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this1, i32 0, i32 1
  %6 = load i32, i32* %sz.addr, align 4, !tbaa !11
  store i32 %6, i32* %m_size, align 4, !tbaa !570
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1055"* %this1, i32 0, i32 2
  %7 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %7, i32* %m_index, align 4, !tbaa !576
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail11block_makerINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEE4makeEiiS8_i(i32 %size, i32 %heap_size, i32 %thread.coerce, i32 %index) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %thread = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %size.addr = alloca i32, align 4
  %heap_size.addr = alloca i32, align 4
  %index.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread, i32 0, i32 0
  store i32 %thread.coerce, i32* %coerce.dive, align 4
  store i32 %size, i32* %size.addr, align 4, !tbaa !11
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %index, i32* %index.addr, align 4, !tbaa !11
  %0 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %thread to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %index.addr, align 4, !tbaa !11
  %coerce.dive1 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive1, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %retval, i32 %0, i32 %4, i32 %3)
  %5 = bitcast { i64, i32 }* %tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %7
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this, i32 %heap_size, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"*, align 8
  %heap_size.addr = alloca i32, align 4
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"** %this.addr, align 8, !tbaa !1
  store i32 %heap_size, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"*, %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this1 to %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm128EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"* %0, i32 %4, i32 %3)
  %m_heap_size = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %this1, i32 0, i32 1
  %5 = load i32, i32* %heap_size.addr, align 4, !tbaa !11
  store i32 %5, i32* %m_heap_size, align 4, !tbaa !573
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_5agentILm3EEELm128EEC2ES6_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #0 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"*, align 8
  %i.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"*, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1057"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 4, i32 4, i1 false), !tbaa.struct !151
  %3 = load i32, i32* %i.addr, align 4, !tbaa !11
  %coerce.dive2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %4 = load i32, i32* %coerce.dive2, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %0, i32 %4, i32 %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EEC2ES8_i(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %this, i32 %exec.coerce, i32 %i) unnamed_addr #1 comdat align 2 {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"*, align 8
  %i.addr = alloca i32, align 4
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec, i32 0, i32 0
  store i32 %exec.coerce, i32* %coerce.dive, align 4
  store %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"** %this.addr, align 8, !tbaa !1
  store i32 %i, i32* %i.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"*, %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"** %this.addr, align 8
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %this_exec to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::agent.301"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 4, i32 4, i1 false), !tbaa.struct !151
  %m_index = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.1058"* %this1, i32 0, i32 1
  %2 = load i32, i32* %i.addr, align 4, !tbaa !11
  store i32 %2, i32* %m_index, align 4, !tbaa !577
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEC2ESB_S10_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1100"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1097"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE6launchEjjmP11CUstream_stS12_EN10workaround14supported_pathEjjmS15_S12_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS2_3tagENS_11use_defaultESR_EEEElST_NS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm3EEELm128EEELm0EEENS5_7closureINS3_11scan_detail16inclusive_scan_nENS0_5tupleINS5_6cursorILj1EEENS0_6detail15normal_iteratorINS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESO_SO_SO_SO_SO_SO_SO_EENS3_3tagENS0_11use_defaultESR_EEEElST_NS1_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESO_SO_SO_SO_SO_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1099"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS3_3tagENS_11use_defaultESH_EEEElSJ_NS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEEEENS8_17make_tuple_mapperIT_T0_T1_T2_T3_SE_SE_SE_SE_SE_E4typeERKSR_RKSS_RKST_RKSU_RKSV_(%"class.thrust::tuple.1091"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t1, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8
  %2 = load i64*, i64** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_(%"class.thrust::tuple.1091"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %1, i64* dereferenceable(8) %2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS2_3tagENS_11use_defaultESJ_EEEElSL_NS0_6detail7generic6detail22segmented_scan_functorISF_j9add_pairsEESG_SG_SG_SG_SG_EEEC2ES7_RKSS_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %this, %"class.thrust::tuple.1091"* dereferenceable(40) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_scan_n", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1091"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1091"* %args, %"class.thrust::tuple.1091"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1090"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1091"*, %"class.thrust::tuple.1091"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1091"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1091"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS3_3tagENS_11use_defaultESG_EEEElSI_NS1_6detail7generic6detail22segmented_scan_functorISC_j9add_pairsEESD_SD_SD_SD_SD_EC2ERKS7_RKSI_RKlST_RKSO_(%"class.thrust::tuple.1091"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1091"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1091"* %this, %"class.thrust::tuple.1091"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t1, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1091"*, %"class.thrust::tuple.1091"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1091"* %this1 to %"struct.thrust::detail::cons.1092"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1092"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %2, i64* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS4_3tagENS_11use_defaultESH_EEEENS1_IlNS1_ISJ_NS1_INS2_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESE_EEEEEEEEEC2IKS8_KSJ_KlSX_KSP_KSE_S10_S10_S10_S10_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1092"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t2, i64* dereferenceable(8) %t3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1092"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1092"* %this, %"struct.thrust::detail::cons.1092"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t2, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t4, %"class.thrust::detail::normal_iterator.1045"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1092"*, %"struct.thrust::detail::cons.1092"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1092", %"struct.thrust::detail::cons.1092"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1092", %"struct.thrust::detail::cons.1092"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1093"* %tail, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, i64* dereferenceable(8) %4, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_IlNS1_ISF_NS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEEEC2IKSF_KlSR_KSL_KS7_SU_SU_SU_SU_SU_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1093"* %this, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t1, i64* dereferenceable(8) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1093"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t2.addr = alloca i64*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1093"* %this, %"struct.thrust::detail::cons.1093"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.1045"* %t1, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8, !tbaa !7
  store i64* %t2, i64** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1093"*, %"struct.thrust::detail::cons.1093"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1093", %"struct.thrust::detail::cons.1093"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1045"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.1045"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1093", %"struct.thrust::detail::cons.1093"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1094"* %tail, i64* dereferenceable(8) %3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKlKSF_KSL_KS7_ST_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1094"* %this, i64* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1094"*, align 8
  %t1.addr = alloca i64*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1094"* %this, %"struct.thrust::detail::cons.1094"** %this.addr, align 8, !tbaa !1
  store i64* %t1, i64** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t2, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1094"*, %"struct.thrust::detail::cons.1094"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1094", %"struct.thrust::detail::cons.1094"* %this1, i32 0, i32 0
  %0 = load i64*, i64** %t1.addr, align 8
  %1 = load i64, i64* %0, align 8, !tbaa !13
  store i64 %1, i64* %head, align 8, !tbaa !579
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1094", %"struct.thrust::detail::cons.1094"* %this1, i32 0, i32 1
  %2 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8
  %3 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEC2IKSF_KSL_KS7_SR_SR_SR_SR_SR_SR_SR_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1081"* %tail, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEENS3_12async_launchINS3_14parallel_groupIT_Lm0EEEEEP11CUstream_stSB_m(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* noalias sret %agg.result, %struct.CUstream_st* %s, i64 %exec.coerce0, i32 %exec.coerce1, i64 %num_groups) #8 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %coerce = alloca { i64, i32 }, align 4
  %s.addr = alloca %struct.CUstream_st*, align 8
  %num_groups.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store i64 %num_groups, i64* %num_groups.addr, align 8, !tbaa !13
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp1 to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = load i64, i64* %num_groups.addr, align 8, !tbaa !13
  %7 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* sret %agg.tmp, i64 %10, i32 %12, i64 %6)
  %13 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %agg.tmp, %struct.CUstream_st* %13, %struct.CUevent_st* null)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_3conILm128ELm3EEENS3_16concurrent_groupINS3_5agentIXT0_EEEXT_EEEm(i64 %heap_size) #0 comdat {
entry:
  %retval = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %heap_size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::agent.301", align 4
  %tmp = alloca { i64, i32 }, align 8
  store i64 %heap_size, i64* %heap_size.addr, align 8, !tbaa !13
  %0 = load i64, i64* %heap_size.addr, align 8, !tbaa !13
  %conv = trunc i64 %0 to i32
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm3EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.301", %"class.thrust::system::cuda::detail::bulk_::agent.301"* %agg.tmp, i32 0, i32 0
  %1 = load i32, i32* %coerce.dive, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EEC2EiS6_i(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %retval, i32 %conv, i32 %1, i32 2147483647)
  %2 = bitcast { i64, i32 }* %tmp to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %retval to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  %4 = load { i64, i32 }, { i64, i32 }* %tmp, align 8
  ret { i64, i32 } %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_3parINS3_16concurrent_groupINS3_5agentILm3EEELm128EEEEENS3_14parallel_groupIT_Lm0EEESA_m(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* noalias sret %agg.result, i64 %exec.coerce0, i32 %exec.coerce1, i64 %size) #0 comdat {
entry:
  %exec = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %coerce = alloca { i64, i32 }, align 4
  %size.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056", align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0
  store i64 %exec.coerce0, i64* %0, align 4
  %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1
  store i32 %exec.coerce1, i32* %1, align 4
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  %3 = bitcast { i64, i32 }* %coerce to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 12, i32 4, i1 false)
  store i64 %size, i64* %size.addr, align 8, !tbaa !13
  %4 = load i64, i64* %size.addr, align 8, !tbaa !13
  %conv = trunc i64 %4 to i32
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 12, i32 4, i1 false)
  %7 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.1056"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 12, i32 4, i1 false)
  %9 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %10 = load i64, i64* %9, align 4
  %11 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %12 = load i32, i32* %11, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEC2EiS8_i(%"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %agg.result, i32 %conv, i64 %10, i32 %12, i32 2147483647)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEC2ESA_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* byval align 8 %exec, %struct.CUstream_st* %s, %struct.CUevent_st* %be) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, align 8
  %s.addr = alloca %struct.CUstream_st*, align 8
  %be.addr = alloca %struct.CUevent_st*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %be, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"*, %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"** %this.addr, align 8
  %stream_valid = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 0
  store i8 1, i8* %stream_valid, align 8, !tbaa !565
  %e = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %e to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.1054"* %exec to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 20, i32 4, i1 false)
  %s2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 2
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %2, %struct.CUstream_st** %s2, align 8, !tbaa !568
  %be3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::async_launch.1053", %"class.thrust::system::cuda::detail::bulk_::async_launch.1053"* %this1, i32 0, i32 3
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %be.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %3, %struct.CUevent_st** %be3, align 8, !tbaa !569
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 104, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 104, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch.316"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_11scan_detail19inclusive_downsweepENS4_6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INSB_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSA_INSB_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEEEENS4_7closureIT_NSB_IT0_T1_T2_T3_T4_T5_SN_SN_SN_SN_EEEES17_RKS18_RKS19_RKS1A_RKS1B_RKS1C_RKS1D_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %a1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %a2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %a3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %a4, %"class.thrust::zip_iterator.964"* dereferenceable(16) %a5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %a6) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %a2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %a3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %a4.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %a5.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %a6.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1103", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %a2, %"class.thrust::zip_iterator.968"** %a2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %a3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %a4, %"class.thrust::detail::normal_iterator.1045"** %a4.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %a5, %"class.thrust::zip_iterator.964"** %a5.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %a6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a6.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %a1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %a2.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %a3.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %a4.addr, align 8
  %4 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %a5.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %a6.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_(%"class.thrust::tuple.1103"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %agg.result, %"class.thrust::tuple.1103"* dereferenceable(96) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 20, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 104, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 20, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 104, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchESB_S1E_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.start(i64 20, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %task to i8*
  call void @llvm.lifetime.start(i64 128, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 20, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 104, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 128, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %task to i8*
  call void @llvm.lifetime.end(i64 128, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.lifetime.end(i64 20, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent.322", align 4
  %tmp = alloca { i64, i32 }, align 8
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.321"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1108"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.318"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm5EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent.322", %"class.thrust::system::cuda::detail::bulk_::agent.322"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i32 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm5EEELm128EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  store { i64, i32 } %call8, { i64, i32 }* %tmp, align 8
  %14 = bitcast { i64, i32 }* %tmp to i8*
  %15 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %15, i8* %14, i64 12, i32 4, i1 false)
  %16 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group.319"* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 12, i32 4, i1 false)
  %18 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %19 = load i64, i64* %18, align 4
  %20 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %21 = load i32, i32* %20, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* sret %agg.result, i32 %10, i64 %19, i32 %21, i32 2147483647)
  %22 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %22) #5
  %23 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %23) #5
  %24 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group.317", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 20, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 104, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 4, !tbaa !582
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_S1E_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 128, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1109"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj128ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEC2ESB_S1E_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 104, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1113"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group.317"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 20, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1110"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 128, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE6launchEjjmP11CUstream_stS1G_EN10workaround14supported_pathEjjmS1J_S1G_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 128, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj128ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSG_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS2_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS0_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 128, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm5EEELm128EEELm0EEENS5_7closureINS3_11scan_detail19inclusive_downsweepENS0_5tupleINS5_6cursorILj1EEENS0_12zip_iteratorINSG_INS0_6detail15normal_iteratorINS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESQ_EEEENSL_INSM_IjSP_SQ_SQ_EEEENS0_9null_typeESV_SV_SV_SV_SV_SV_SV_EEEENS3_21aligned_decompositionIlEENSL_INSM_INSG_ISO_jSV_SV_SV_SV_SV_SV_SV_SV_EESP_SQ_SQ_EEEENSJ_INSG_INSL_INS0_10device_ptrISO_EEEESU_SV_SV_SV_SV_SV_SV_SV_SV_EEEENS1_6detail7generic6detail22segmented_scan_functorISO_j9add_pairsEESV_SV_SV_SV_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1112"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS3_21aligned_decompositionIlEENSB_INSC_INS9_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS8_INS9_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEEEENSA_17make_tuple_mapperIT_T0_T1_T2_T3_T4_SL_SL_SL_SL_E4typeERKS15_RKS16_RKS17_RKS18_RKS19_RKS1A_(%"class.thrust::tuple.1103"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t5) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t4, %"class.thrust::zip_iterator.964"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %2 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %4 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t4.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_(%"class.thrust::tuple.1103"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINS8_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESI_EEEENSD_INSE_IjSH_SI_SI_EEEENS_9null_typeESN_SN_SN_SN_SN_SN_SN_EEEENS2_21aligned_decompositionIlEENSD_INSE_INS8_ISG_jSN_SN_SN_SN_SN_SN_SN_SN_EESH_SI_SI_EEEENSB_INS8_INSD_INS_10device_ptrISG_EEEESM_SN_SN_SN_SN_SN_SN_SN_SN_EEEENS0_6detail7generic6detail22segmented_scan_functorISG_j9add_pairsEESN_SN_SN_SN_EEEC2ES7_RKS16_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %this, %"class.thrust::tuple.1103"* dereferenceable(96) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::scan_detail::inclusive_downsweep", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1103"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1103"* %args, %"class.thrust::tuple.1103"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1102"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1103"*, %"class.thrust::tuple.1103"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1103"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1103"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 96, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS_12zip_iteratorINS0_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESF_EEEENSA_INSB_IjSE_SF_SF_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS3_21aligned_decompositionIlEENSA_INSB_INS0_ISD_jSK_SK_SK_SK_SK_SK_SK_SK_EESE_SF_SF_EEEENS8_INS0_INSA_INS_10device_ptrISD_EEEESJ_SK_SK_SK_SK_SK_SK_SK_SK_EEEENS1_6detail7generic6detail22segmented_scan_functorISD_j9add_pairsEESK_SK_SK_SK_EC2ERKS7_RKSM_RKSO_RKSR_RKSW_RKS12_(%"class.thrust::tuple.1103"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t0, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t5) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1103"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1103"* %this, %"class.thrust::tuple.1103"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t4, %"class.thrust::zip_iterator.964"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1103"*, %"class.thrust::tuple.1103"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1103"* %this1 to %"struct.thrust::detail::cons.1104"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t0.addr, align 8
  %2 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1104"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %4, %"class.thrust::zip_iterator.964"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj1EEENS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESG_EEEENSB_INSC_IjSF_SG_SG_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEENS1_INS4_21aligned_decompositionIlEENS1_INSB_INSC_INSA_ISE_jSL_SL_SL_SL_SL_SL_SL_SL_EESF_SG_SG_EEEENS1_INS9_INSA_INSB_INS_10device_ptrISE_EEEESK_SL_SL_SL_SL_SL_SL_SL_SL_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISE_j9add_pairsEESL_EEEEEEEEEEEC2IKS8_KSN_KSP_KSS_KSX_KS13_KSL_S1H_S1H_S1H_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1104"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* dereferenceable(1) %t1, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t4, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1104"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t3.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t4.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t5.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t6.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1104"* %this, %"struct.thrust::detail::cons.1104"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.968"* %t2, %"class.thrust::zip_iterator.968"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t3, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t4, %"class.thrust::detail::normal_iterator.1045"** %t4.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t5, %"class.thrust::zip_iterator.964"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1104"*, %"struct.thrust::detail::cons.1104"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1104", %"struct.thrust::detail::cons.1104"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor.27"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1104", %"struct.thrust::detail::cons.1104"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t2.addr, align 8
  %4 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t3.addr, align 8
  %5 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t4.addr, align 8
  %6 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t5.addr, align 8
  %7 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1105"* %tail, %"class.thrust::zip_iterator.968"* dereferenceable(16) %3, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %4, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %5, %"class.thrust::zip_iterator.964"* dereferenceable(16) %6, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS1_INSA_21aligned_decompositionIlEENS1_INS4_INS5_INS3_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_SC_SC_EEEENS1_INS2_INS3_INS4_INS_10device_ptrIS7_EEEESG_SH_SH_SH_SH_SH_SH_SH_SH_EEEENS1_INS8_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESH_EEEEEEEEEC2IKSJ_KSL_KSO_KST_KSZ_KSH_S1B_S1B_S1B_S1B_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1105"* %this, %"class.thrust::zip_iterator.968"* dereferenceable(16) %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t2, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1105"*, align 8
  %t1.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %t2.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t3.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t4.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t5.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1105"* %this, %"struct.thrust::detail::cons.1105"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.968"* %t1, %"class.thrust::zip_iterator.968"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t2, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t3, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t4, %"class.thrust::zip_iterator.964"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1105"*, %"struct.thrust::detail::cons.1105"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1105", %"struct.thrust::detail::cons.1105"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::zip_iterator.968"* %head to i8*
  %2 = bitcast %"class.thrust::zip_iterator.968"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1105", %"struct.thrust::detail::cons.1105"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t2.addr, align 8
  %4 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t3.addr, align 8
  %5 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t4.addr, align 8
  %6 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1106"* %tail, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %3, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %4, %"class.thrust::zip_iterator.964"* dereferenceable(16) %5, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail21aligned_decompositionIlEENS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS4_3tagENS_11use_defaultESF_EEEENS1_INS_12zip_iteratorINS9_INS7_INS_10device_ptrISB_EEEENS7_INS8_IjSE_SF_SF_EEEESC_SC_SC_SC_SC_SC_SC_SC_EEEENS1_INS2_6detail7generic6detail22segmented_scan_functorISB_j9add_pairsEESC_EEEEEEEC2IKS6_KSH_KSP_KSV_KSC_S15_S15_S15_S15_S15_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1106"* %this, %"class.thrust::system::cuda::detail::aligned_decomposition"* dereferenceable(40) %t1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t2, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1106"*, align 8
  %t1.addr = alloca %"class.thrust::system::cuda::detail::aligned_decomposition"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t3.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t4.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1106"* %this, %"struct.thrust::detail::cons.1106"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::system::cuda::detail::aligned_decomposition"* %t1, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %t2, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t3, %"class.thrust::zip_iterator.964"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1106"*, %"struct.thrust::detail::cons.1106"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1106", %"struct.thrust::detail::cons.1106"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::system::cuda::detail::aligned_decomposition"*, %"class.thrust::system::cuda::detail::aligned_decomposition"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %head to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::aligned_decomposition"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 40, i32 8, i1 false), !tbaa.struct !220
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1106", %"struct.thrust::detail::cons.1106"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t2.addr, align 8
  %4 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t3.addr, align 8
  %5 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1107"* %tail, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3, %"class.thrust::zip_iterator.964"* dereferenceable(16) %4, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS_12zip_iteratorINS4_INS2_INS_10device_ptrIS6_EEEENS2_INS3_IjSC_SD_SD_EEEES7_S7_S7_S7_S7_S7_S7_S7_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEC2IKSF_KSN_KST_KS7_S11_S11_S11_S11_S11_S11_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1107"* %this, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %t1, %"class.thrust::zip_iterator.964"* dereferenceable(16) %t2, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1107"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %t2.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %t3.addr = alloca %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1107"* %this, %"struct.thrust::detail::cons.1107"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.1045"* %t1, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.964"* %t2, %"class.thrust::zip_iterator.964"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* %t3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1107"*, %"struct.thrust::detail::cons.1107"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1107", %"struct.thrust::detail::cons.1107"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1045"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.1045"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1107", %"struct.thrust::detail::cons.1107"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %t2.addr, align 8
  %4 = load %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"*, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEC2IKSK_KSQ_KSI_SW_SW_SW_SW_SW_SW_SW_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1064"* %tail, %"class.thrust::zip_iterator.964"* dereferenceable(16) %3, %"struct.thrust::system::detail::generic::detail::segmented_scan_functor.972"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS6_SC_NS_11use_defaultESI_EEEESK_(%"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::tuple.1051"* %first.coerce, %"class.thrust::tuple.1051"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %first.coerce, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive6, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %last.coerce, %"class.thrust::tuple.1051"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.1045"* %first to %"class.thrust::iterator_adaptor.1046"*
  %call = call dereferenceable(8) %"class.thrust::pointer.1048"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.1046"* %0)
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.1045"* %last to %"class.thrust::iterator_facade.1047"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1045"* %first to %"class.thrust::iterator_facade.1047"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_(%"class.thrust::iterator_facade.1047"* dereferenceable(1) %3, %"class.thrust::iterator_facade.1047"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive10, i32 0, i32 0
  %5 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %m_allocator, %"class.thrust::tuple.1051"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.1040"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1040"*, align 8
  store %"class.thrust::detail::contiguous_storage.1040"* %this, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1040"*, %"class.thrust::detail::contiguous_storage.1040"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1040", %"class.thrust::detail::contiguous_storage.1040"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.1045"* %m_begin to %"class.thrust::iterator_facade.1047"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1040"* %this1)
  %call2 = call %"class.thrust::tuple.1051"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE(%"class.thrust::iterator_facade.1047"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive4, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call2, %"class.thrust::tuple.1051"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive8, i32 0, i32 0
  %1 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive9, align 8
  ret %"class.thrust::tuple.1051"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS8_SC_NS_11use_defaultESG_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a, %"class.thrust::tuple.1051"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %0, %"class.thrust::tuple.1051"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElSF_S8_SC_SG_SI_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSK_IT5_T6_T7_T8_T9_T10_EEE4typeERKSR_RKSY_(%"class.thrust::iterator_facade.1047"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1047"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1047"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1047"*, align 8
  store %"class.thrust::iterator_facade.1047"* %lhs, %"class.thrust::iterator_facade.1047"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1047"* %rhs, %"class.thrust::iterator_facade.1047"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1047"*, %"class.thrust::iterator_facade.1047"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1047"* %0 to %"class.thrust::detail::normal_iterator.1045"*
  %2 = load %"class.thrust::iterator_facade.1047"*, %"class.thrust::iterator_facade.1047"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1047"* %2 to %"class.thrust::detail::normal_iterator.1045"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_(%"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEENS_7pointerIS9_SD_NS_11use_defaultESH_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSK_SL_T1_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a, %"class.thrust::tuple.1051"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1048", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.1048", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %p.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1048"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %5 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  %call5 = call %"class.thrust::tuple.1051"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"class.thrust::tuple.1051"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive6, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call5, %"class.thrust::tuple.1051"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSD_21execution_policy_baseIT_EESG_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"class.thrust::tuple.1051"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %first = alloca %"class.thrust::pointer.1048", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %first.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive4, i32 0, i32 0
  %5 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive5, align 8
  %call6 = call %"class.thrust::tuple.1051"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"class.thrust::tuple.1051"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive7, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call6, %"class.thrust::tuple.1051"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive9, i32 0, i32 0
  %6 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive10, align 8
  ret %"class.thrust::tuple.1051"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagEEEEEE3getERSE_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::tuple.1051"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %first = alloca %"class.thrust::pointer.1048", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %first.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive3, i32 0, i32 0
  %4 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive4, align 8
  %call = call %"class.thrust::tuple.1051"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"class.thrust::tuple.1051"* %4, i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive5, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call, %"class.thrust::tuple.1051"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive7, i32 0, i32 0
  %5 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive8, align 8
  ret %"class.thrust::tuple.1051"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES9_S9_S9_S9_S9_S9_S9_EES4_NS_11use_defaultESB_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESG_T1_T2_EN10workaround13parallel_pathERNSH_IS4_EESC_lSF_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"class.thrust::tuple.1051"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %first = alloca %"class.thrust::pointer.1048", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp5 = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp6 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce13 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp16 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp17 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp18 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp19 = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp20 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp25 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp28 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp31 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp32 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp33 = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp34 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp37 = alloca i32, align 4
  %agg.tmp.ensured40 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp41 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp46 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp47 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp48 = alloca %"class.thrust::pointer.1048", align 8
  %agg.tmp49 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %first.coerce, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive2 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::pointer.1048"* %agg.tmp5 to i8*
  %12 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp6 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp5, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive7, i32 0, i32 0
  %16 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive8, align 8
  %call9 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEESD_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::tuple.1051"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call9, i64* %17, align 4
  %call10 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call11 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call11, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call12 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce13, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive14 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call12, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call12, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp16, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::pointer.1048"* %agg.tmp19 to i8*
  %30 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp20 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp19, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive21, i32 0, i32 0
  %34 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive22, align 8
  %call23 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEESD_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp16, %"class.thrust::tuple.1051"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp15 to i64*
  store i64 %call23, i64* %35, align 4
  %call24 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce13, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp15)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call26 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call26, i64* %ref.tmp25, align 8, !tbaa !13
  %call27 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp25)
  store i64 %call27, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call29 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call30 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp28, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call30)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp32 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::pointer.1048"* %agg.tmp33 to i8*
  %45 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp34 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp33, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive35, i32 0, i32 0
  %49 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive36, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp28, %"class.thrust::tuple.1051"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call38 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call38, i32* %ref.tmp37, align 4, !tbaa !11
  %call39 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp37)
  store i32 %call39, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv42 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv43 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call44 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call44 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call45 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp41, i64 %conv42, i64 %conv43, i64 0, %struct.CUstream_st* %call45)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp47 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::pointer.1048"* %agg.tmp48 to i8*
  %61 = bitcast %"class.thrust::pointer.1048"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp49 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %agg.tmp48, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive50, i32 0, i32 0
  %65 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive51, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured40, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp41, %"class.thrust::tuple.1051"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured40) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::pointer.1048"* %first to %"class.thrust::iterator_facade.1050"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call52 = call %"class.thrust::tuple.1051"* @_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.1050"* dereferenceable(1) %66, i64 %67)
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive53, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %call52, %"class.thrust::tuple.1051"** %coerce.dive54, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive55, i32 0, i32 0
  %72 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive56, align 8
  ret %"class.thrust::tuple.1051"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEESD_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::tuple.1051"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.1048", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg2.coerce, %"class.thrust::tuple.1051"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.1048"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIiiEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEESD_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::tuple.1051"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.1048", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg2.coerce, %"class.thrust::tuple.1051"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.1048"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIiiEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::tuple.1051"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.1048", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg2.coerce, %"class.thrust::tuple.1051"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.1048"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"class.thrust::tuple.1051"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.1048", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  store %"class.thrust::tuple.1051"* %arg2.coerce, %"class.thrust::tuple.1051"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.1048"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrustplINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.1050"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1048", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.1050"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.1048", align 8
  store %"class.thrust::iterator_facade.1050"* %i, %"class.thrust::iterator_facade.1050"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.1048"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.1050"*, %"class.thrust::iterator_facade.1050"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.1050"* %1 to %"class.thrust::pointer.1048"*
  %3 = bitcast %"class.thrust::pointer.1048"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.1048"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.1048"* %tmp to %"class.thrust::iterator_facade.1050"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.1048"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.1050"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.1048"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.1048"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.1048"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive, i32 0, i32 0
  %10 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive1, align 8
  ret %"class.thrust::tuple.1051"* %10
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIiiEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEEjSF_SF_SF_SF_SF_SF_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.1048"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1116", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %a2, %"class.thrust::pointer.1048"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.1116"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.1048"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %agg.result, %"class.thrust::tuple.1116"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.1116"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.1048"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %t1, %"class.thrust::pointer.1048"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj(%"class.thrust::tuple.1116"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.1048"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEEjSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %this, %"class.thrust::tuple.1116"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1116"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1116"* %args, %"class.thrust::tuple.1116"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1116"*, %"class.thrust::tuple.1116"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1116"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1116"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKj(%"class.thrust::tuple.1116"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.1048"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1116"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1116"* %this, %"class.thrust::tuple.1116"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %t1, %"class.thrust::pointer.1048"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1116"*, %"class.thrust::tuple.1116"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1116"* %this1 to %"struct.thrust::detail::cons.1117"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1117"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.1048"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjSD_EEEEEEEC2IKS8_KSH_KSL_KjKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1117"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.1048"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1117"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1117"* %this, %"struct.thrust::detail::cons.1117"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %t2, %"class.thrust::pointer.1048"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1117"*, %"struct.thrust::detail::cons.1117"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1117", %"struct.thrust::detail::cons.1117"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1117", %"struct.thrust::detail::cons.1117"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1118"* %tail, %"class.thrust::pointer.1048"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjS6_EEEEEC2IKSD_KSH_KjKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1118"* %this, %"class.thrust::pointer.1048"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1118"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1118"* %this, %"struct.thrust::detail::cons.1118"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.1048"* %t1, %"class.thrust::pointer.1048"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1118"*, %"struct.thrust::detail::cons.1118"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1118", %"struct.thrust::detail::cons.1118"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1118", %"struct.thrust::detail::cons.1118"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS9_INS_4pairIiiEEjNS_9null_typeESF_SF_SF_SF_SF_SF_SF_EENS2_3tagENS_11use_defaultESI_EENS_6detail16wrapped_functionINSK_23allocator_traits_detail5gozerEvEElSF_SF_SF_SF_SF_SF_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NSB_IT0_T1_T2_T3_SE_SE_SE_SE_SE_SE_EEEESP_RKSQ_RKSR_RKSS_RKST_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.1048"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1127", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %a2, %"class.thrust::pointer.1048"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.1127"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.1048"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %agg.result, %"class.thrust::tuple.1127"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESC_SC_SC_SC_SC_SC_SC_EENS3_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElEENSH_17make_tuple_mapperIT_T0_T1_T2_SC_SC_SC_SC_SC_SC_E4typeERKSN_RKSO_RKSP_RKSQ_(%"class.thrust::tuple.1127"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.1048"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %t1, %"class.thrust::pointer.1048"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl(%"class.thrust::tuple.1127"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.1048"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS8_INS_4pairIiiEEjNS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS2_3tagENS_11use_defaultESH_EENS_6detail16wrapped_functionINSJ_23allocator_traits_detail5gozerEvEElSE_SE_SE_SE_SE_SE_EEEC2ES7_RKSO_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %this, %"class.thrust::tuple.1127"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1127"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1127"* %args, %"class.thrust::tuple.1127"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1127"*, %"class.thrust::tuple.1127"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1127"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1127"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS0_INS_4pairIiiEEjNS_9null_typeESB_SB_SB_SB_SB_SB_SB_EENS3_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElSB_SB_SB_SB_SB_SB_EC2ERKS7_RKSF_RKSK_RKl(%"class.thrust::tuple.1127"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.1048"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1127"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1127"* %this, %"class.thrust::tuple.1127"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %t1, %"class.thrust::pointer.1048"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1127"*, %"class.thrust::tuple.1127"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1127"* %this1 to %"struct.thrust::detail::cons.1128"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1128"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.1048"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeESD_SD_SD_SD_SD_SD_SD_EENS4_3tagENS_11use_defaultESG_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlSD_EEEEEEEC2IKS8_KSH_KSL_KlKSD_SV_SV_SV_SV_SV_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1128"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.1048"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1128"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1128"* %this, %"struct.thrust::detail::cons.1128"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %t2, %"class.thrust::pointer.1048"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1128"*, %"struct.thrust::detail::cons.1128"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1128", %"struct.thrust::detail::cons.1128"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1128", %"struct.thrust::detail::cons.1128"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1129"* %tail, %"class.thrust::pointer.1048"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlS6_EEEEEC2IKSD_KSH_KlKS6_SP_SP_SP_SP_SP_SP_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1129"* %this, %"class.thrust::pointer.1048"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1129"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1129"* %this, %"struct.thrust::detail::cons.1129"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.1048"* %t1, %"class.thrust::pointer.1048"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1129"*, %"struct.thrust::detail::cons.1129"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1129", %"struct.thrust::detail::cons.1129"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.1048"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1129", %"struct.thrust::detail::cons.1129"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1130"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !584
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1131"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1126"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1135"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1132"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEElSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1134"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchESB_SW_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1119"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !586
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SW_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1120"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEC2ESB_SW_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1115"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1124"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1121"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE6launchEjjmP11CUstream_stSY_EN10workaround14supported_pathEjjmS11_SY_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSG_INS_4pairIiiEEjNS_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS2_3tagENS_11use_defaultESP_EENS_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINSG_INS0_4pairIiiEEjNS0_9null_typeESM_SM_SM_SM_SM_SM_SM_EENS3_3tagENS0_11use_defaultESP_EENS0_6detail16wrapped_functionINSR_23allocator_traits_detail5gozerEvEEjSM_SM_SM_SM_SM_SM_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1123"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1048"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.1050"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1050"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.1050"* %this, %"class.thrust::iterator_facade.1050"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.1050"*, %"class.thrust::iterator_facade.1050"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.1048"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.1050"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE(%"class.thrust::pointer.1048"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.1048"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.1050"* %this1)
  ret %"class.thrust::pointer.1048"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEvRT_NSE_15difference_typeE(%"class.thrust::pointer.1048"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.1048"* %f, %"class.thrust::pointer.1048"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1048"* %0 to %"class.thrust::iterator_adaptor.1049"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl(%"class.thrust::iterator_adaptor.1049"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1048"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7derivedEv(%"class.thrust::iterator_facade.1050"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1050"*, align 8
  store %"class.thrust::iterator_facade.1050"* %this, %"class.thrust::iterator_facade.1050"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1050"*, %"class.thrust::iterator_facade.1050"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1050"* %this1 to %"class.thrust::pointer.1048"*
  ret %"class.thrust::pointer.1048"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE7advanceEl(%"class.thrust::iterator_adaptor.1049"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1049"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.1049"* %this, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.1049"*, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %m_iterator, align 8, !tbaa !556
  %add.ptr = getelementptr inbounds %"class.thrust::tuple.1051", %"class.thrust::tuple.1051"* %1, i64 %0
  store %"class.thrust::tuple.1051"* %add.ptr, %"class.thrust::tuple.1051"** %m_iterator, align 8, !tbaa !556
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISH_E4typeEE4typeERSH_(%"struct.thrust::detail::no_throw_allocator.1041"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1041"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1041"* %a, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.1041"*, %"struct.thrust::detail::no_throw_allocator.1041"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.1041"* %0 to %"class.thrust::detail::temporary_allocator.1042"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1042"* %1)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENS2_20distance_from_resultIT_T0_E4typeERKSI_RKSJ_(%"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.1045"* %f1, %"class.thrust::detail::normal_iterator.1045"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %f2, %"class.thrust::detail::normal_iterator.1045"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEESG_EENT_15difference_typeERKSH_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  store %"class.thrust::detail::normal_iterator.1045"* %f1, %"class.thrust::detail::normal_iterator.1045"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1045"* %f2, %"class.thrust::detail::normal_iterator.1045"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.1045"* %1 to %"class.thrust::iterator_adaptor.1046"*
  %3 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.1045"* %3 to %"class.thrust::iterator_adaptor.1046"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1046"* %2, %"class.thrust::iterator_adaptor.1046"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E11distance_toISF_SE_SD_SD_SD_SD_SD_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1046"* %this, %"class.thrust::iterator_adaptor.1046"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1046"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.1046"*, align 8
  store %"class.thrust::iterator_adaptor.1046"* %this, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.1046"* %y, %"class.thrust::iterator_adaptor.1046"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1046"*, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.1046"*, %"class.thrust::iterator_adaptor.1046"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.1048"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E4baseEv(%"class.thrust::iterator_adaptor.1046"* %0)
  %1 = bitcast %"class.thrust::pointer.1048"* %call to %"class.thrust::iterator_facade.1050"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.1048"* %m_iterator to %"class.thrust::iterator_facade.1050"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_(%"class.thrust::iterator_facade.1050"* dereferenceable(1) %1, %"class.thrust::iterator_facade.1050"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElSC_S6_SA_SD_SF_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSI_IT5_T6_T7_T8_T9_T10_EEE4typeERKSP_RKSW_(%"class.thrust::iterator_facade.1050"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1050"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1050"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1050"*, align 8
  store %"class.thrust::iterator_facade.1050"* %lhs, %"class.thrust::iterator_facade.1050"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1050"* %rhs, %"class.thrust::iterator_facade.1050"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1050"*, %"class.thrust::iterator_facade.1050"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1050"* %0 to %"class.thrust::pointer.1048"*
  %2 = load %"class.thrust::iterator_facade.1050"*, %"class.thrust::iterator_facade.1050"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1050"* %2 to %"class.thrust::pointer.1048"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_(%"class.thrust::pointer.1048"* dereferenceable(8) %1, %"class.thrust::pointer.1048"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENS_6detail20distance_from_resultIT_T0_E4typeERKSG_RKSH_(%"class.thrust::pointer.1048"* dereferenceable(8) %f1, %"class.thrust::pointer.1048"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.1048"* %f1, %"class.thrust::pointer.1048"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %f2, %"class.thrust::pointer.1048"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.1048"* dereferenceable(8) %0, %"class.thrust::pointer.1048"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EESD_EENT_15difference_typeERKSE_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.1048"* dereferenceable(8) %f1, %"class.thrust::pointer.1048"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.1048"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.1048"*, align 8
  store %"class.thrust::pointer.1048"* %f1, %"class.thrust::pointer.1048"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1048"* %f2, %"class.thrust::pointer.1048"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.1048"* %1 to %"class.thrust::iterator_adaptor.1049"*
  %3 = load %"class.thrust::pointer.1048"*, %"class.thrust::pointer.1048"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.1048"* %3 to %"class.thrust::iterator_adaptor.1049"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1049"* %2, %"class.thrust::iterator_adaptor.1049"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE11distance_toISC_SD_S6_SA_SE_SG_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1049"* %this, %"class.thrust::iterator_adaptor.1049"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1049"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.1049"*, align 8
  store %"class.thrust::iterator_adaptor.1049"* %this, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.1049"* %y, %"class.thrust::iterator_adaptor.1049"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1049"*, %"class.thrust::iterator_adaptor.1049"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.1049"*, %"class.thrust::iterator_adaptor.1049"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::tuple.1051"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElE4baseEv(%"class.thrust::iterator_adaptor.1049"* %0)
  %1 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %this1, i32 0, i32 0
  %2 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %m_iterator, align 8, !tbaa !556
  %sub.ptr.lhs.cast = ptrtoint %"class.thrust::tuple.1051"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"class.thrust::tuple.1051"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 12
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"class.thrust::tuple.1051"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEET_RKNS_15iterator_facadeISJ_T0_T1_T2_T3_T4_EENSJ_15difference_typeE(%"class.thrust::iterator_facade.1047"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.1047"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.1045", align 8
  store %"class.thrust::iterator_facade.1047"* %i, %"class.thrust::iterator_facade.1047"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.1045"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.1047"*, %"class.thrust::iterator_facade.1047"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.1047"* %1 to %"class.thrust::detail::normal_iterator.1045"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1045"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1045"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1045"* %tmp to %"class.thrust::iterator_facade.1047"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1045"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl(%"class.thrust::iterator_facade.1047"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1045"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1045"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.1045"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1045", %"class.thrust::detail::normal_iterator.1045"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1048", %"class.thrust::pointer.1048"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1049", %"class.thrust::iterator_adaptor.1049"* %coerce.dive2, i32 0, i32 0
  %10 = load %"class.thrust::tuple.1051"*, %"class.thrust::tuple.1051"** %coerce.dive3, align 8
  ret %"class.thrust::tuple.1051"* %10
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1045"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElEpLEl(%"class.thrust::iterator_facade.1047"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1047"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.1047"* %this, %"class.thrust::iterator_facade.1047"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.1047"*, %"class.thrust::iterator_facade.1047"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1045"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.1047"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE(%"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1045"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.1047"* %this1)
  ret %"class.thrust::detail::normal_iterator.1045"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES8_S8_S8_S8_S8_S8_S8_EENS_6system4cuda6detail3tagENS_11use_defaultESE_EEEEEEvRT_NSH_15difference_typeE(%"class.thrust::detail::normal_iterator.1045"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.1045"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.1045"* %f, %"class.thrust::detail::normal_iterator.1045"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.1045"*, %"class.thrust::detail::normal_iterator.1045"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1045"* %0 to %"class.thrust::iterator_adaptor.1046"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl(%"class.thrust::iterator_adaptor.1046"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1045"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEES8_SC_NS_27random_access_traversal_tagENS_9referenceIS8_SE_SD_EElE7derivedEv(%"class.thrust::iterator_facade.1047"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1047"*, align 8
  store %"class.thrust::iterator_facade.1047"* %this, %"class.thrust::iterator_facade.1047"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1047"*, %"class.thrust::iterator_facade.1047"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1047"* %this1 to %"class.thrust::detail::normal_iterator.1045"*
  ret %"class.thrust::detail::normal_iterator.1045"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEESE_SD_SD_SD_SD_SD_E7advanceEl(%"class.thrust::iterator_adaptor.1046"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1046"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.1046"* %this, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.1046"*, %"class.thrust::iterator_adaptor.1046"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1046", %"class.thrust::iterator_adaptor.1046"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.1048"* %m_iterator to %"class.thrust::iterator_facade.1050"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.1048"* @_ZN6thrust15iterator_facadeINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EES6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEpLEl(%"class.thrust::iterator_facade.1050"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.964"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElEpLEl(%"class.thrust::iterator_facade.965"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.965"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.965"* %this, %"class.thrust::iterator_facade.965"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.965"*, %"class.thrust::iterator_facade.965"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.964"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.965"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE(%"class.thrust::zip_iterator.964"* dereferenceable(16) %call, i64 %0)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.964"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.965"* %this1)
  ret %"class.thrust::zip_iterator.964"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS5_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEEEEvRT_NSM_15difference_typeE(%"class.thrust::zip_iterator.964"* dereferenceable(16) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.964"* %f, %"class.thrust::zip_iterator.964"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl(%"class.thrust::zip_iterator.964"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.964"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS2_IS7_jSI_SI_SI_SI_SI_SI_SI_SI_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_16device_referenceIS7_EENS_9referenceIjSG_SF_EESI_SI_SI_SI_SI_SI_SI_SI_EElE7derivedEv(%"class.thrust::iterator_facade.965"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.965"*, align 8
  store %"class.thrust::iterator_facade.965"* %this, %"class.thrust::iterator_facade.965"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.965"*, %"class.thrust::iterator_facade.965"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.965"* %this1 to %"class.thrust::zip_iterator.964"*
  ret %"class.thrust::zip_iterator.964"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEE7advanceEl(%"class.thrust::zip_iterator.964"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.964"* %this, %"class.thrust::zip_iterator.964"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_(%"class.thrust::tuple.966"* dereferenceable(16) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_16advance_iteratorIlEEEET0_RT_SM_(%"class.thrust::tuple.966"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.966"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.966"* %t, %"class.thrust::tuple.966"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.966"*, %"class.thrust::tuple.966"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.966"* %0 to %"struct.thrust::detail::cons.967"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.967"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.966"*, %"class.thrust::tuple.966"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.966"* %2 to %"struct.thrust::detail::cons.967"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.967"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.870"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.967"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.967"*, align 8
  store %"struct.thrust::detail::cons.967"* %this, %"struct.thrust::detail::cons.967"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.967"*, %"struct.thrust::detail::cons.967"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.967", %"struct.thrust::detail::cons.967"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.870"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.967"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.967"*, align 8
  store %"struct.thrust::detail::cons.967"* %this, %"struct.thrust::detail::cons.967"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.967"*, %"struct.thrust::detail::cons.967"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.967", %"struct.thrust::detail::cons.967"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEEC2ESH_(%"class.thrust::zip_iterator.968"* %this, %"struct.thrust::pair.82"* %iterator_tuple.coerce0, i32* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.970", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %0 = bitcast %"class.thrust::tuple.970"* %iterator_tuple to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %iterator_tuple.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %iterator_tuple.coerce1, i32** %2, align 8
  store %"class.thrust::zip_iterator.968"* %this, %"class.thrust::zip_iterator.968"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.968"* %this1 to %"class.thrust::iterator_facade.969"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.970"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.970"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS2_INS3_IjS9_SA_SA_EEEENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKSC_RKSE_(%"class.thrust::tuple.970"* %this, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.970"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.970"* %this, %"class.thrust::tuple.970"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.960"* %t0, %"class.thrust::detail::normal_iterator.960"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.970"*, %"class.thrust::tuple.970"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.970"* %this1 to %"struct.thrust::detail::cons.971"*
  %1 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.971"* %0, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEEC2IKSC_KSE_KSF_SL_SL_SL_SL_SL_SL_SL_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.971"* %this, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.971"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.960"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.971"* %this, %"struct.thrust::detail::cons.971"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.960"* %t1, %"class.thrust::detail::normal_iterator.960"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.971"*, %"struct.thrust::detail::cons.971"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.971", %"struct.thrust::detail::cons.971"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.960"*, %"class.thrust::detail::normal_iterator.960"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.960"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.960"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.971", %"struct.thrust::detail::cons.971"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.968"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElEpLEl(%"class.thrust::iterator_facade.969"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.969"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.969"* %this, %"class.thrust::iterator_facade.969"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.969"*, %"class.thrust::iterator_facade.969"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.968"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.969"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE(%"class.thrust::zip_iterator.968"* dereferenceable(16) %call, i64 %0)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.968"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.969"* %this1)
  ret %"class.thrust::zip_iterator.968"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS5_INS6_IjSC_SD_SD_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEEEEvRT_NSL_15difference_typeE(%"class.thrust::zip_iterator.968"* dereferenceable(16) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::zip_iterator.968"* %f, %"class.thrust::zip_iterator.968"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %f.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl(%"class.thrust::zip_iterator.968"* %0, i64 %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.968"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEENS2_IS7_jSH_SH_SH_SH_SH_SH_SH_SH_EESB_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesINS_9referenceIS7_SD_SC_EENSN_IjSF_SC_EESH_SH_SH_SH_SH_SH_SH_SH_EElE7derivedEv(%"class.thrust::iterator_facade.969"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.969"*, align 8
  store %"class.thrust::iterator_facade.969"* %this, %"class.thrust::iterator_facade.969"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.969"*, %"class.thrust::iterator_facade.969"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.969"* %this1 to %"class.thrust::zip_iterator.968"*
  ret %"class.thrust::zip_iterator.968"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESB_EEEENS3_INS4_IjSA_SB_SB_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EEE7advanceEl(%"class.thrust::zip_iterator.968"* %this, i64 %n) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.968"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce = alloca %"class.thrust::detail::advance_iterator", align 8
  store %"class.thrust::zip_iterator.968"* %this, %"class.thrust::zip_iterator.968"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::zip_iterator.968"*, %"class.thrust::zip_iterator.968"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.968", %"class.thrust::zip_iterator.968"* %this1, i32 0, i32 0
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail16advance_iteratorIlEC2El(%"class.thrust::detail::advance_iterator"* %agg.tmp, i64 %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %1 = load i64, i64* %coerce.dive, align 8
  %call = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_(%"class.thrust::tuple.970"* dereferenceable(16) %m_iterator_tuple, i64 %1)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %coerce, i32 0, i32 0
  store i64 %call, i64* %coerce.dive2, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEENS4_INS5_IjSB_SC_SC_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EENS0_16advance_iteratorIlEEEET0_RT_SL_(%"class.thrust::tuple.970"* dereferenceable(16) %t, i64 %f.coerce) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::advance_iterator", align 8
  %f = alloca %"class.thrust::detail::advance_iterator", align 8
  %t.addr = alloca %"class.thrust::tuple.970"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::advance_iterator", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %f, i32 0, i32 0
  store i64 %f.coerce, i64* %coerce.dive, align 8
  store %"class.thrust::tuple.970"* %t, %"class.thrust::tuple.970"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.970"*, %"class.thrust::tuple.970"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.970"* %0 to %"struct.thrust::detail::cons.971"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.971"* %1)
  call void @_ZNK6thrust6detail16advance_iteratorIlEclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEEEEvRT_(%"class.thrust::detail::advance_iterator"* %f, %"class.thrust::detail::normal_iterator.960"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.970"*, %"class.thrust::tuple.970"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.970"* %2 to %"struct.thrust::detail::cons.971"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.971"* %3)
  %4 = bitcast %"class.thrust::detail::advance_iterator"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::detail::advance_iterator"* %f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false), !tbaa.struct !203
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %agg.tmp, i32 0, i32 0
  %6 = load i64, i64* %coerce.dive2, align 8
  %call3 = call i64 @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEENS0_16advance_iteratorIlEEEET0_RT_SH_(%"struct.thrust::detail::cons.220"* dereferenceable(8) %call1, i64 %6)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  store i64 %call3, i64* %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::advance_iterator", %"class.thrust::detail::advance_iterator"* %retval, i32 0, i32 0
  %7 = load i64, i64* %coerce.dive5, align 8
  ret i64 %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.960"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.971"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.971"*, align 8
  store %"struct.thrust::detail::cons.971"* %this, %"struct.thrust::detail::cons.971"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.971"*, %"struct.thrust::detail::cons.971"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.971", %"struct.thrust::detail::cons.971"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.960"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.220"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEENS1_INS2_INS3_IjS9_SA_SA_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.971"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.971"*, align 8
  store %"struct.thrust::detail::cons.971"* %this, %"struct.thrust::detail::cons.971"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.971"*, %"struct.thrust::detail::cons.971"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.971", %"struct.thrust::detail::cons.971"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.220"* %tail
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEC2ESI_(%"class.thrust::zip_iterator.964"* %this, %"struct.thrust::pair.82"* %iterator_tuple.coerce0, i32* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.966", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.964"*, align 8
  %0 = bitcast %"class.thrust::tuple.966"* %iterator_tuple to { %"struct.thrust::pair.82"*, i32* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %iterator_tuple.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i32* }, { %"struct.thrust::pair.82"*, i32* }* %0, i32 0, i32 1
  store i32* %iterator_tuple.coerce1, i32** %2, align 8
  store %"class.thrust::zip_iterator.964"* %this, %"class.thrust::zip_iterator.964"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.964"*, %"class.thrust::zip_iterator.964"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.964"* %this1 to %"class.thrust::iterator_facade.965"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.964", %"class.thrust::zip_iterator.964"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.966"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.966"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EC2ERKS7_RKSF_(%"class.thrust::tuple.966"* %this, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.966"*, align 8
  %t0.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.966"* %this, %"class.thrust::tuple.966"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.870"* %t0, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t1, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.966"*, %"class.thrust::tuple.966"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.966"* %this1 to %"struct.thrust::detail::cons.967"*
  %1 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.967"* %0, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS1_INS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeEEEEC2IKS7_KSF_KSG_SM_SM_SM_SM_SM_SM_SM_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.967"* %this, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.967"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.199"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.967"* %this, %"struct.thrust::detail::cons.967"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.870"* %t1, %"class.thrust::detail::normal_iterator.870"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.199"* %t2, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.967"*, %"struct.thrust::detail::cons.967"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.967", %"struct.thrust::detail::cons.967"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.870"* %head to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.870"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.967", %"struct.thrust::detail::cons.967"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.199"*, %"class.thrust::detail::normal_iterator.199"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES8_EEEENS_9null_typeEEC2IKSA_EERT_RKSB_SI_SI_SI_SI_SI_SI_SI_SI_(%"struct.thrust::detail::cons.220"* %tail, %"class.thrust::detail::normal_iterator.199"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.955"* %this, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %first to %"class.thrust::iterator_adaptor.961"*
  %call = call dereferenceable(8) %"class.thrust::pointer.926"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.961"* %0)
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.960"* %last to %"class.thrust::iterator_facade.962"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.960"* %first to %"class.thrust::iterator_facade.962"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.962"* dereferenceable(1) %3, %"class.thrust::iterator_facade.962"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive10, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.82"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.955"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.960", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.955"*, align 8
  store %"class.thrust::detail::contiguous_storage.955"* %this, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.955"*, %"class.thrust::detail::contiguous_storage.955"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.955", %"class.thrust::detail::contiguous_storage.955"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.960"* %m_begin to %"class.thrust::iterator_facade.962"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.955"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.962"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.960", %"class.thrust::detail::normal_iterator.960"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.961", %"class.thrust::iterator_adaptor.961"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive8, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.926", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.926", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.121"*
  %2 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.926"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call5, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system4cuda6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %first = alloca %"class.thrust::pointer.926", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.121"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.121"* %exec, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.121"*, %"struct.thrust::detail::execution_policy_base.121"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call2 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %2 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.926"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive4, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call6, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive9, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %first = alloca %"class.thrust::pointer.926", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %call = call %"struct.thrust::pair.82"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  ret %"struct.thrust::pair.82"* %5
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZZN6thrust6system4cuda6detail10for_each_nINS2_3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_EN10workaround13parallel_pathERNSE_IS4_EES9_lSC_(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.926", align 8
  %first = alloca %"class.thrust::pointer.926", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::system::cuda::detail::execution_policy.119"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %narrow_n = alloca i32, align 4
  %narrow_num_groups = alloca i32, align 4
  %narrow_group_size = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.147", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp3 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp4 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp5 = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp6 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %num_groups = alloca i64, align 8
  %group_size = alloca i64, align 8
  %coerce13 = alloca %"class.thrust::tuple.152", align 8
  %ref.tmp15 = alloca %"struct.thrust::pair.82", align 4
  %agg.tmp16 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp17 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp18 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp19 = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp20 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp25 = alloca i64, align 8
  %agg.tmp.ensured = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp28 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp31 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp32 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp33 = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp34 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %ref.tmp37 = alloca i32, align 4
  %agg.tmp.ensured40 = alloca %"class.thrust::system::cuda::detail::bulk_::future", align 8
  %agg.tmp41 = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp46 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %agg.tmp47 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %agg.tmp48 = alloca %"class.thrust::pointer.926", align 8
  %agg.tmp49 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::cuda::detail::execution_policy.119"* %exec, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %1 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.start(i64 4, i8* %1) #5
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %conv = trunc i64 %2 to i32
  store i32 %conv, i32* %narrow_n, align 4, !tbaa !11
  %3 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %narrow_num_groups, align 4, !tbaa !11
  %4 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %narrow_group_size, align 4, !tbaa !11
  %call = call { i32*, i32* } @_ZN6thrust3tieIjjEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %narrow_group_size)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.147", %"class.thrust::tuple.147"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.148"* %coerce.dive2 to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call, 1
  store i32* %9, i32** %8, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, i64 2147483647, i64 2147483647, i64 2147483647)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp4 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %11 = bitcast %"class.thrust::pointer.926"* %agg.tmp5 to i8*
  %12 = bitcast %"class.thrust::pointer.926"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp6 to i8*
  %14 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 1, i32 1, i1 false), !tbaa.struct !41
  %15 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp5, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive7, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %call9 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"struct.thrust::pair.82"* %16, i32 %15)
  %17 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call9, i64* %17, align 4
  %call10 = call dereferenceable(16) %"class.thrust::tuple.147"* @_ZN6thrust5tupleIRjS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.147"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %18 = load i64, i64* %n.addr, align 8, !tbaa !13
  %19 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %20 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %mul = mul i32 %19, %20
  %call11 = call zeroext i1 @_ZN6thrust6system4cuda6detail17for_each_n_detail16use_wide_counterIlEEbT_j(i64 %18, i32 %mul)
  br i1 %call11, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %21 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.start(i64 8, i8* %21) #5
  store i64 0, i64* %num_groups, align 8, !tbaa !13
  %22 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.start(i64 8, i8* %22) #5
  store i64 0, i64* %group_size, align 8, !tbaa !13
  %call12 = call { i64*, i64* } @_ZN6thrust3tieIllEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %group_size)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::tuple.152", %"class.thrust::tuple.152"* %coerce13, i32 0, i32 0
  %23 = bitcast %"struct.thrust::detail::cons.153"* %coerce.dive14 to { i64*, i64* }*
  %24 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 0
  %25 = extractvalue { i64*, i64* } %call12, 0
  store i64* %25, i64** %24, align 8
  %26 = getelementptr inbounds { i64*, i64* }, { i64*, i64* }* %23, i32 0, i32 1
  %27 = extractvalue { i64*, i64* } %call12, 1
  store i64* %27, i64** %26, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmm(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp16, i64 2147483647, i64 2147483647, i64 2147483647)
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp18 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %28, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %29 = bitcast %"class.thrust::pointer.926"* %agg.tmp19 to i8*
  %30 = bitcast %"class.thrust::pointer.926"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %29, i8* %30, i64 8, i32 8, i1 false)
  %31 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp20 to i8*
  %32 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %31, i8* %32, i64 1, i32 1, i1 false), !tbaa.struct !41
  %33 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp19, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive21, i32 0, i32 0
  %34 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %call23 = call i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp16, %"struct.thrust::pair.82"* %34, i64 %33)
  %35 = bitcast %"struct.thrust::pair.82"* %ref.tmp15 to i64*
  store i64 %call23, i64* %35, align 4
  %call24 = call dereferenceable(16) %"class.thrust::tuple.152"* @_ZN6thrust5tupleIRlS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.152"* %coerce13, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp15)
  %36 = load i64, i64* %n.addr, align 8, !tbaa !13
  %37 = load i64, i64* %group_size, align 8, !tbaa !13
  %call26 = call i64 @_ZN6thrust6detail4util9divide_riIllEET_S3_T0_(i64 %36, i64 %37)
  store i64 %call26, i64* %ref.tmp25, align 8, !tbaa !13
  %call27 = call i64 @_ZN6thrust3minIlEET_RKS1_S3_(i64* dereferenceable(8) %num_groups, i64* dereferenceable(8) %ref.tmp25)
  store i64 %call27, i64* %num_groups, align 8, !tbaa !13
  %38 = load i64, i64* %num_groups, align 8, !tbaa !13
  %39 = load i64, i64* %group_size, align 8, !tbaa !13
  %40 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %41 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %40 to %"struct.thrust::detail::execution_policy_base.121"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %41)
  %42 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call29 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call30 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %42)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp28, i64 %38, i64 %39, i64 0, %struct.CUstream_st* %call30)
  %43 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp32 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %43, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %44 = bitcast %"class.thrust::pointer.926"* %agg.tmp33 to i8*
  %45 = bitcast %"class.thrust::pointer.926"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %44, i8* %45, i64 8, i32 8, i1 false)
  %46 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp34 to i8*
  %47 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %46, i8* %47, i64 1, i32 1, i1 false), !tbaa.struct !41
  %48 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp33, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive35, i32 0, i32 0
  %49 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive36, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp28, %"struct.thrust::pair.82"* %49, i64 %48)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured) #5
  %50 = bitcast i64* %group_size to i8*
  call void @llvm.lifetime.end(i64 8, i8* %50) #5
  %51 = bitcast i64* %num_groups to i8*
  call void @llvm.lifetime.end(i64 8, i8* %51) #5
  br label %if.end

if.else:                                          ; preds = %entry
  %52 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %53 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %call38 = call i32 @_ZN6thrust6detail4util9divide_riIjjEET_S3_T0_(i32 %52, i32 %53)
  store i32 %call38, i32* %ref.tmp37, align 4, !tbaa !11
  %call39 = call i32 @_ZN6thrust3minIjEET_RKS1_S3_(i32* dereferenceable(4) %narrow_num_groups, i32* dereferenceable(4) %ref.tmp37)
  store i32 %call39, i32* %narrow_num_groups, align 4, !tbaa !11
  %54 = load i32, i32* %narrow_num_groups, align 4, !tbaa !11
  %conv42 = zext i32 %54 to i64
  %55 = load i32, i32* %narrow_group_size, align 4, !tbaa !11
  %conv43 = zext i32 %55 to i64
  %56 = load %"struct.thrust::system::cuda::detail::execution_policy.119"*, %"struct.thrust::system::cuda::detail::execution_policy.119"** %exec.addr, align 8
  %57 = bitcast %"struct.thrust::system::cuda::detail::execution_policy.119"* %56 to %"struct.thrust::detail::execution_policy_base.121"*
  %call44 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %57)
  %58 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call44 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %call45 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail6streamINS2_3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %58)
  call void @_ZN6thrust6system4cuda6detail5bulk_4gridEmmmP11CUstream_st(%"class.thrust::system::cuda::detail::bulk_::async_launch"* sret %agg.tmp41, i64 %conv42, i64 %conv43, i64 0, %struct.CUstream_st* %call45)
  %59 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %agg.tmp47 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %59, i8* getelementptr inbounds (%"struct.thrust::system::cuda::detail::bulk_::detail::cursor", %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* @_ZN6thrust6system4cuda6detail5bulk_L4rootE, i32 0, i32 0, i32 0, i32 0, i32 0), i64 1, i32 1, i1 false), !tbaa.struct !41
  %60 = bitcast %"class.thrust::pointer.926"* %agg.tmp48 to i8*
  %61 = bitcast %"class.thrust::pointer.926"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %60, i8* %61, i64 8, i32 8, i1 false)
  %62 = bitcast %"struct.thrust::detail::wrapped_function.146"* %agg.tmp49 to i8*
  %63 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %62, i8* %63, i64 1, i32 1, i1 false), !tbaa.struct !41
  %64 = load i32, i32* %narrow_n, align 4, !tbaa !11
  %coerce.dive50 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %agg.tmp48, i32 0, i32 0
  %coerce.dive51 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive50, i32 0, i32 0
  %65 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive51, align 8
  call void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.tmp.ensured40, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp41, %"struct.thrust::pair.82"* %65, i32 %64)
  call void @_ZN6thrust6system4cuda6detail5bulk_6futureIvED2Ev(%"class.thrust::system::cuda::detail::bulk_::future"* %agg.tmp.ensured40) #5
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %66 = bitcast %"class.thrust::pointer.926"* %first to %"class.thrust::iterator_facade.928"*
  %67 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call52 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.928"* dereferenceable(1) %66, i64 %67)
  %coerce.dive53 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive53, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call52, %"struct.thrust::pair.82"** %coerce.dive54, align 8
  %68 = bitcast i32* %narrow_group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %68) #5
  %69 = bitcast i32* %narrow_num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %69) #5
  %70 = bitcast i32* %narrow_n to i8*
  call void @llvm.lifetime.end(i64 4, i8* %70) #5
  %71 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %71) #5
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %retval, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive55, i32 0, i32 0
  %72 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive56, align 8
  ret %"struct.thrust::pair.82"* %72
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.926", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.926"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_12choose_sizesINS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEESC_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_T0_T1_T2_T3_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.926", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.926"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp4)
  %2 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call, i64* %2, align 4
  %3 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %4 = load i64, i64* %3, align 4
  ret i64 %4
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i64 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.926", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store i64 %arg4, i64* %arg4.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.926"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i64* dereferenceable(8) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_5asyncINS3_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEENS2_17for_each_n_detail15for_each_kernelENS3_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjEENS3_6futureIvEET_T0_T1_T2_T3_T4_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %g, %"struct.thrust::pair.82"* %arg2.coerce, i32 %arg4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %arg1 = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor", align 1
  %arg2 = alloca %"class.thrust::pointer.926", align 8
  %arg3 = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %arg4.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::async_launch", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  %agg.tmp5 = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.926", %"class.thrust::pointer.926"* %arg2, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.927", %"class.thrust::iterator_adaptor.927"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %arg2.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  store i32 %arg4, i32* %arg4.addr, align 4, !tbaa !11
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::async_launch"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 48, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* sret %agg.tmp4, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %arg1, %"class.thrust::pointer.926"* dereferenceable(8) %arg2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %arg3, i32* dereferenceable(4) %arg4.addr)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEEjNS_9null_typeESN_SN_SN_SN_SN_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEEjEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.926"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i32* dereferenceable(4) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.926"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i32*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1138", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %a2, %"class.thrust::pointer.926"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i32* %a4, i32** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i32*, i32** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.1138"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.926"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %agg.result, %"class.thrust::tuple.1138"* dereferenceable(24) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.1138"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.926"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %t1, %"class.thrust::pointer.926"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj(%"class.thrust::tuple.1138"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.926"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i32* dereferenceable(4) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEEjNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %this, %"class.thrust::tuple.1138"* dereferenceable(24) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1138"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1138"* %args, %"class.thrust::tuple.1138"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1138"*, %"class.thrust::tuple.1138"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1138"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1138"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEEjNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKj(%"class.thrust::tuple.1138"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.926"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1138"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1138"* %this, %"class.thrust::tuple.1138"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %t1, %"class.thrust::pointer.926"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1138"*, %"class.thrust::tuple.1138"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1138"* %this1 to %"struct.thrust::detail::cons.1139"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1139"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.926"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KjKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1139"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.926"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i32* dereferenceable(4) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1139"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i32*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1139"* %this, %"struct.thrust::detail::cons.1139"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %t2, %"class.thrust::pointer.926"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i32* %t4, i32** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1139"*, %"struct.thrust::detail::cons.1139"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1139", %"struct.thrust::detail::cons.1139"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1139", %"struct.thrust::detail::cons.1139"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i32*, i32** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1140"* %tail, %"class.thrust::pointer.926"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i32* dereferenceable(4) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEEEC2IKSA_KSE_KjKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1140"* %this, %"class.thrust::pointer.926"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i32* dereferenceable(4) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1140"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i32*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1140"* %this, %"struct.thrust::detail::cons.1140"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.926"* %t1, %"class.thrust::pointer.926"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i32* %t3, i32** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1140"*, %"struct.thrust::detail::cons.1140"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1140", %"struct.thrust::detail::cons.1140"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1140", %"struct.thrust::detail::cons.1140"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i32*, i32** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IjNS_9null_typeEEEEC2IKS5_KjKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.158"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i32* dereferenceable(4) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail12choose_sizesINS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESG_EENS_6detail16wrapped_functionINSI_23allocator_traits_detail5gozerEvEElNS_9null_typeESN_SN_SN_SN_SN_EEEEEESE_NS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEET_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152", align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %1) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %3, i32 0, i32 0
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call1 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %4)
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher, i32 %call, i32 %call1)
  %5 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call2, i64* %5, align 4
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %6) #5
  %7 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %8 = load i64, i64* %7, align 4
  ret i64 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail12make_closureINS2_17for_each_n_detail15for_each_kernelENS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESE_EENS_6detail16wrapped_functionINSG_23allocator_traits_detail5gozerEvEElEENS4_7closureIT_NS_5tupleIT0_T1_T2_T3_NS_9null_typeESS_SS_SS_SS_SS_EEEESM_RKSO_RKSP_RKSQ_RKSR_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %a1, %"class.thrust::pointer.926"* dereferenceable(8) %a2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %a3, i64* dereferenceable(8) %a4) #0 comdat {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %a1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %a2.addr = alloca %"class.thrust::pointer.926"*, align 8
  %a3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %a4.addr = alloca i64*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1149", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %a1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %a2, %"class.thrust::pointer.926"** %a2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %a3, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8, !tbaa !7
  store i64* %a4, i64** %a4.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %a1.addr, align 8
  %1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %a2.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %a3.addr, align 8
  %3 = load i64*, i64** %a4.addr, align 8
  call void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.1149"* sret %ref.tmp, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.926"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %agg.result, %"class.thrust::tuple.1149"* dereferenceable(32) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE12choose_sizesEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this, i32 %requested_num_groups, i32 %requested_group_size) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %requested_group_size.addr = alloca i32, align 4
  %group_size = alloca i32, align 4
  %num_groups = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %requested_group_size, i32* %requested_group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8
  %0 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  store i32 0, i32* %group_size, align 4, !tbaa !11
  %1 = load i32, i32* %group_size, align 4, !tbaa !11
  %cmp = icmp eq i32 %1, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*
  %3 = load i32, i32* %requested_group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %2, i32 %3)
  store i32 %call, i32* %group_size, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %num_groups, align 4, !tbaa !11
  %5 = load i32, i32* %num_groups, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %5, 0
  br i1 %cmp2, label %if.then3, label %if.end5

if.then3:                                         ; preds = %if.end
  %6 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*
  %7 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  %8 = load i32, i32* %group_size, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %6, i32 %7, i32 %8)
  store i32 %call4, i32* %num_groups, align 4, !tbaa !11
  br label %if.end5

if.end5:                                          ; preds = %if.then3, %if.end
  %9 = load i32, i32* %num_groups, align 4, !tbaa !11
  %10 = load i32, i32* %group_size, align 4, !tbaa !11
  %call6 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %9, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call6, i64* %11, align 4
  %12 = bitcast i32* %num_groups to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast i32* %group_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %15 = load i64, i64* %14, align 4
  ret i64 %15
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"*
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1, i32 0, i32 0
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %m_device_properties)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  %requested_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %3) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %call)
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1)
  %call3 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail43block_size_with_maximum_potential_occupancyERKNS4_21function_attributes_tERKNS4_19device_properties_tE(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %call2)
  %conv = trunc i64 %call3 to i32
  store i32 %conv, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %4) #5
  br label %cleanup

if.end:                                           ; preds = %entry
  %5 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %5, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %6 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = load i32, i32* %retval, align 4
  ret i32 %7
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_num_groupsEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, i32 %requested_num_groups, i32 %group_size) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  %requested_num_groups.addr = alloca i32, align 4
  %group_size.addr = alloca i32, align 4
  %result = alloca i32, align 4
  %subscription = alloca i32, align 4
  %ref.tmp = alloca i32, align 4
  %ref.tmp3 = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  store i32 %requested_num_groups, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %0 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load i32, i32* %requested_num_groups.addr, align 4, !tbaa !11
  store i32 %1, i32* %result, align 4, !tbaa !11
  %2 = load i32, i32* %result, align 4, !tbaa !11
  %cmp = icmp eq i32 %2, 2147483647
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %3 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1, i32 %4)
  store i32 %call, i32* %subscription, align 4, !tbaa !11
  %5 = load i32, i32* %subscription, align 4, !tbaa !11
  %call2 = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1)
  %multiProcessorCount = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call2, i32 0, i32 5
  %6 = load i32, i32* %multiProcessorCount, align 4, !tbaa !126
  %mul = mul nsw i32 %5, %6
  store i32 %mul, i32* %ref.tmp, align 4, !tbaa !11
  %call4 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1)
  store i32 %call4, i32* %ref.tmp3, align 4, !tbaa !11
  %call5 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %ref.tmp, i32* dereferenceable(4) %ref.tmp3)
  store i32 %call5, i32* %result, align 4, !tbaa !11
  %7 = bitcast i32* %subscription to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %8 = load i32, i32* %result, align 4, !tbaa !11
  %9 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %9) #5
  ret i32 %8
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* noalias sret %agg.result, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %kernel) #8 comdat {
entry:
  %kernel.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)*, align 8
  %fun_ptr = alloca void ()*, align 8
  %attributes = alloca %struct.cudaFuncAttributes, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %kernel, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)** %kernel.addr, align 8, !tbaa !1
  %0 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)** %kernel.addr, align 8, !tbaa !1
  %2 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %1 to void ()*
  store void ()* %2, void ()** %fun_ptr, align 8, !tbaa !1
  %3 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.start(i64 48, i8* %3) #5
  %4 = load void ()*, void ()** %fun_ptr, align 8, !tbaa !1
  %call = call i32 @_ZL21cudaFuncGetAttributesIFvvEE9cudaErrorP18cudaFuncAttributesPT_(%struct.cudaFuncAttributes* %attributes, void ()* %4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.34, i32 0, i32 0))
  %constSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 0
  %constSizeBytes1 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 1
  %5 = load i64, i64* %constSizeBytes1, align 8, !tbaa !127
  store i64 %5, i64* %constSizeBytes, align 8, !tbaa !129
  %localSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 1
  %localSizeBytes2 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 2
  %6 = load i64, i64* %localSizeBytes2, align 8, !tbaa !131
  store i64 %6, i64* %localSizeBytes, align 8, !tbaa !132
  %maxThreadsPerBlock = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 2
  %maxThreadsPerBlock3 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 3
  %7 = load i32, i32* %maxThreadsPerBlock3, align 8, !tbaa !133
  store i32 %7, i32* %maxThreadsPerBlock, align 8, !tbaa !134
  %numRegs = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 3
  %numRegs4 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 4
  %8 = load i32, i32* %numRegs4, align 4, !tbaa !135
  store i32 %8, i32* %numRegs, align 4, !tbaa !136
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 4
  %ptxVersion5 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 5
  %9 = load i32, i32* %ptxVersion5, align 8, !tbaa !137
  store i32 %9, i32* %ptxVersion, align 8, !tbaa !138
  %sharedSizeBytes = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %agg.result, i32 0, i32 5
  %sharedSizeBytes6 = getelementptr inbounds %struct.cudaFuncAttributes, %struct.cudaFuncAttributes* %attributes, i32 0, i32 0
  %10 = load i64, i64* %sharedSizeBytes6, align 8, !tbaa !139
  store i64 %10, i64* %sharedSizeBytes, align 8, !tbaa !140
  %11 = bitcast %struct.cudaFuncAttributes* %attributes to i8*
  call void @llvm.lifetime.end(i64 48, i8* %11) #5
  %12 = bitcast void ()** %fun_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv() #1 comdat align 2 {
entry:
  ret void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %m_device_properties = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153", %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1, i32 0, i32 0
  ret %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %m_device_properties
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %f) #0 comdat {
entry:
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %f to i8*
  %1 = call i32 @cudaSetupArgument(i8* %0, i64 ptrtoint (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* getelementptr (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* null, i32 1) to i64), i64 0)
  %2 = icmp eq i32 %1, 0
  br i1 %2, label %setup.next, label %setup.end

setup.next:                                       ; preds = %entry
  %3 = call i32 @cudaLaunch(i8* bitcast (void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail15launch_by_valueILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEvT0_ to i8*))
  br label %setup.end

setup.end:                                        ; preds = %setup.next, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE19choose_subscriptionEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, i32 %block_size) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  %block_size.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %0 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1)
  %maxThreadsPerMultiProcessor = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 3
  %1 = load i32, i32* %maxThreadsPerMultiProcessor, align 4, !tbaa !141
  %2 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %div = sdiv i32 %1, %2
  br label %cond.end

cond.false:                                       ; preds = %entry
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  %cond = phi i32 [ %div, %cond.true ], [ 0, %cond.false ]
  ret i32 %cond
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  %actual_limit = alloca i32, align 4
  %ptx_version = alloca i32, align 4
  %tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %ptx_limit = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %0 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %call = call dereferenceable(56) %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* @_ZNK6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1)
  %maxGridSize = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %call, i32 0, i32 1
  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* %maxGridSize, i64 0, i64 0
  %1 = load i32, i32* %arrayidx, align 4, !tbaa !11
  store i32 %1, i32* %actual_limit, align 4, !tbaa !11
  %2 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.start(i64 4, i8* %2) #5
  %call2 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %tmp, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %call2)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %tmp, i32 0, i32 4
  %3 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  store i32 %3, i32* %ptx_version, align 4, !tbaa !11
  %4 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %ptx_limit, align 4, !tbaa !11
  %5 = load i32, i32* %ptx_version, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 30
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  store i32 65535, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.else:                                          ; preds = %entry
  store i32 2147483647, i32* %ptx_limit, align 4, !tbaa !11
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  %call4 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %actual_limit, i32* dereferenceable(4) %ptx_limit)
  %6 = bitcast i32* %ptx_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %6) #5
  %7 = bitcast i32* %ptx_version to i8*
  call void @llvm.lifetime.end(i64 4, i8* %7) #5
  %8 = bitcast i32* %actual_limit to i8*
  call void @llvm.lifetime.end(i64 4, i8* %8) #5
  ret i32 %call4
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust10make_tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElEENSE_17make_tuple_mapperIT_T0_T1_T2_NS_9null_typeESO_SO_SO_SO_SO_E4typeERKSK_RKSL_RKSM_RKSN_(%"class.thrust::tuple.1149"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.926"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) #8 comdat {
entry:
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %t1, %"class.thrust::pointer.926"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %1 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t1.addr, align 8
  %2 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %3 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl(%"class.thrust::tuple.1149"* %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %0, %"class.thrust::pointer.926"* dereferenceable(8) %1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %2, i64* dereferenceable(8) %3)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESF_EENS_6detail16wrapped_functionINSH_23allocator_traits_detail5gozerEvEElNS_9null_typeESM_SM_SM_SM_SM_EEEC2ES7_RKSN_(%"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %this, %"class.thrust::tuple.1149"* dereferenceable(32) %args) unnamed_addr #1 comdat align 2 {
entry:
  %f = alloca %"struct.thrust::system::cuda::detail::for_each_n_detail::for_each_kernel", align 1
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"*, align 8
  %args.addr = alloca %"class.thrust::tuple.1149"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1149"* %args, %"class.thrust::tuple.1149"** %args.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"*, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"** %this.addr, align 8
  %f2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %this1, i32 0, i32 0
  %args3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %this1, i32 0, i32 1
  %0 = load %"class.thrust::tuple.1149"*, %"class.thrust::tuple.1149"** %args.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1149"* %args3 to i8*
  %2 = bitcast %"class.thrust::tuple.1149"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 32, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS_7pointerINS_4pairIiiEENS3_3tagENS_11use_defaultESC_EENS_6detail16wrapped_functionINSE_23allocator_traits_detail5gozerEvEElNS_9null_typeESJ_SJ_SJ_SJ_SJ_EC2ERKS7_RKSD_RKSI_RKl(%"class.thrust::tuple.1149"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t0, %"class.thrust::pointer.926"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1149"*, align 8
  %t0.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1149"* %this, %"class.thrust::tuple.1149"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %t1, %"class.thrust::pointer.926"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1149"*, %"class.thrust::tuple.1149"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1149"* %this1 to %"struct.thrust::detail::cons.1150"*
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t0.addr, align 8
  %2 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t1.addr, align 8
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  call void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1150"* %0, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %1, %"class.thrust::pointer.926"* dereferenceable(8) %2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_6system4cuda6detail5bulk_6detail6cursorILj0EEENS1_INS_7pointerINS_4pairIiiEENS4_3tagENS_11use_defaultESD_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEEEC2IKS8_KSE_KSI_KlKSJ_ST_ST_ST_ST_ST_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1150"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* dereferenceable(1) %t1, %"class.thrust::pointer.926"* dereferenceable(8) %t2, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t3, i64* dereferenceable(8) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1150"*, align 8
  %t1.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, align 8
  %t2.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t3.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t4.addr = alloca i64*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1150"* %this, %"struct.thrust::detail::cons.1150"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %t1, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.926"* %t2, %"class.thrust::pointer.926"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t3, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8, !tbaa !7
  store i64* %t4, i64** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1150"*, %"struct.thrust::detail::cons.1150"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1150", %"struct.thrust::detail::cons.1150"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"** %t1.addr, align 8
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %head to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cursor"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1150", %"struct.thrust::detail::cons.1150"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t2.addr, align 8
  %4 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t3.addr, align 8
  %5 = load i64*, i64** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1151"* %tail, %"class.thrust::pointer.926"* dereferenceable(8) %3, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %4, i64* dereferenceable(8) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EENS1_INS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEEEC2IKSA_KSE_KlKSF_SN_SN_SN_SN_SN_SN_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1151"* %this, %"class.thrust::pointer.926"* dereferenceable(8) %t1, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %t2, i64* dereferenceable(8) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1151"*, align 8
  %t1.addr = alloca %"class.thrust::pointer.926"*, align 8
  %t2.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %t3.addr = alloca i64*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1151"* %this, %"struct.thrust::detail::cons.1151"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.926"* %t1, %"class.thrust::pointer.926"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::wrapped_function.146"* %t2, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8, !tbaa !7
  store i64* %t3, i64** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1151"*, %"struct.thrust::detail::cons.1151"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1151", %"struct.thrust::detail::cons.1151"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.926"*, %"class.thrust::pointer.926"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::pointer.926"* %head to i8*
  %2 = bitcast %"class.thrust::pointer.926"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1151", %"struct.thrust::detail::cons.1151"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %t2.addr, align 8
  %4 = load i64*, i64** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_16wrapped_functionINS0_23allocator_traits_detail5gozerEvEENS1_IlNS_9null_typeEEEEC2IKS5_KlKS6_SC_SC_SC_SC_SC_SC_SC_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.164"* %tail, %"struct.thrust::detail::wrapped_function.146"* dereferenceable(1) %3, i64* dereferenceable(8) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 40, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 40, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 40, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %task to i8*
  call void @llvm.lifetime.start(i64 72, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 40, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %task to i8*
  call void @llvm.lifetime.end(i64 72, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1152"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 40, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !588
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 72, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1153"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1148"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 40, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1157"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1154"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 72, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 72, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 72, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEElNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1156"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEENS3_12async_launchIT_EET0_(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::async_launch"* byval align 8 %launch, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %c) #0 comdat {
entry:
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  %agg.tmp4 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp5 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  %call = call zeroext i1 @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE15is_stream_validEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  br i1 %call, label %cond.true, label %cond.false

cond.true:                                        ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %agg.tmp1 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %call2 = call %struct.CUstream_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE6streamEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %call3 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp1, %struct.CUstream_st* %call2, %struct.CUevent_st* %call3)
  br label %cond.end

cond.false:                                       ; preds = %entry
  call void @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE4execEv(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %agg.tmp5 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 32, i32 8, i1 false)
  %call6 = call %struct.CUevent_st* @_ZNK6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEE12before_eventEv(%"class.thrust::system::cuda::detail::bulk_::async_launch"* %launch)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp4, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp5, %struct.CUevent_st* %call6)
  br label %cond.end

cond.end:                                         ; preds = %cond.false, %cond.true
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail15async_in_streamINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P11CUstream_stP10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %c, %struct.CUstream_st* %s, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %s.addr = alloca %struct.CUstream_st*, align 8
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp1 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  store %struct.CUstream_st* %s, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %0, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  %2 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %1, %struct.CUevent_st* %2, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.35, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %3 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %3) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher)
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 24, i32 4, i1 false)
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %agg.tmp1 to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 32, i32 8, i1 false)
  %8 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp1, %struct.CUstream_st* %8)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s.addr, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %9, i1 zeroext false)
  %10 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %10) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail5asyncINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEENS3_6futureIvEET_T0_P10CUevent_st(%"class.thrust::system::cuda::detail::bulk_::future"* noalias sret %agg.result, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %c, %struct.CUevent_st* %before_event) #0 comdat {
entry:
  %before_event.addr = alloca %struct.CUevent_st*, align 8
  %s = alloca %struct.CUstream_st*, align 8
  %launcher = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141", align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  store %struct.CUevent_st* %before_event, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %0 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %call = call i32 @cudaStreamCreate(%struct.CUstream_st** %s)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call, i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.40, i32 0, i32 0))
  %1 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %cmp = icmp ne %struct.CUevent_st* %1, null
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %2 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  %3 = load %struct.CUevent_st*, %struct.CUevent_st** %before_event.addr, align 8, !tbaa !1
  %call1 = call i32 @cudaStreamWaitEvent(%struct.CUstream_st* %2, %struct.CUevent_st* %3, i32 0)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call1, i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.41, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher to i8*
  call void @llvm.lifetime.start(i64 56, i8* %4) #5
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2Ev(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher)
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 24, i32 4, i1 false)
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %agg.tmp2 to i8*
  %8 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 32, i32 8, i1 false)
  %9 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp2, %struct.CUstream_st* %9)
  %10 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18future_core_access6createEP11CUstream_stb(%"class.thrust::system::cuda::detail::bulk_::future"* sret %agg.result, %struct.CUstream_st* %10, i1 zeroext true)
  %11 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %launcher to i8*
  call void @llvm.lifetime.end(i64 56, i8* %11) #5
  %12 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %12) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchESB_SV_P11CUstream_st(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %request, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %c, %struct.CUstream_st* %stream) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %g = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %num_blocks = alloca i32, align 4
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %max_physical_grid_size = alloca i32, align 4
  %num_remaining_physical_blocks = alloca i32, align 4
  %block_offset = alloca i32, align 4
  %task = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145", align 8
  %agg.tmp10 = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp11 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  %num_physical_blocks = alloca i32, align 4
  %agg.tmp13 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8, !tbaa !1
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.start(i64 24, i8* %0) #5
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %request to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %g, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp)
  %3 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %4)
  store i32 %call, i32* %num_blocks, align 4, !tbaa !11
  %5 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %5) #5
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %6, i32 0, i32 0
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call2 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %7)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %8 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp = icmp sgt i32 %8, 0
  br i1 %cmp, label %land.lhs.true, label %if.end14

land.lhs.true:                                    ; preds = %entry
  %9 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp3 = icmp sgt i32 %9, 0
  br i1 %cmp3, label %if.then, label %if.end14

if.then:                                          ; preds = %land.lhs.true
  %10 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %10) #5
  %11 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec4 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %11, i32 0, i32 0
  %call5 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %12 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*
  %call6 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE22max_physical_grid_sizeEv(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %13)
  store i32 %call6, i32* %max_physical_grid_size, align 4, !tbaa !11
  %14 = load i32, i32* %block_size, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, 0
  br i1 %cmp7, label %if.then8, label %if.end

if.then8:                                         ; preds = %if.then
  %15 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %15) #5
  %16 = load i32, i32* %num_blocks, align 4, !tbaa !11
  store i32 %16, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %17 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.start(i64 4, i8* %17) #5
  store i32 0, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %if.then8
  %18 = load i32, i32* %block_offset, align 4, !tbaa !11
  %19 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %cmp9 = icmp slt i32 %18, %19
  br i1 %cmp9, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %20 = bitcast i32* %block_offset to i8*
  call void @llvm.lifetime.end(i64 4, i8* %20) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %21 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %task to i8*
  call void @llvm.lifetime.start(i64 64, i8* %21) #5
  %22 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp10 to i8*
  %23 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 24, i32 4, i1 false)
  %24 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %agg.tmp11 to i8*
  %25 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %24, i8* %25, i64 32, i32 8, i1 false)
  %26 = load i32, i32* %block_offset, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %task, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp10, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp11, i32 %26)
  %27 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %27) #5
  %call12 = call i32 @_ZN6thrust3minIiEET_RKS1_S3_(i32* dereferenceable(4) %num_remaining_physical_blocks, i32* dereferenceable(4) %max_physical_grid_size)
  store i32 %call12, i32* %num_physical_blocks, align 4, !tbaa !11
  %28 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*
  %29 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %30 = load i32, i32* %block_size, align 4, !tbaa !11
  %31 = load i32, i32* %heap_size, align 4, !tbaa !11
  %32 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %33 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %agg.tmp13 to i8*
  %34 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %33, i8* %34, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %28, i32 %29, i32 %30, i32 %31, %struct.CUstream_st* %32, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %agg.tmp13)
  %35 = load i32, i32* %num_physical_blocks, align 4, !tbaa !11
  %36 = load i32, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %sub = sub nsw i32 %36, %35
  store i32 %sub, i32* %num_remaining_physical_blocks, align 4, !tbaa !11
  %37 = bitcast i32* %num_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  %38 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %task to i8*
  call void @llvm.lifetime.end(i64 64, i8* %38) #5
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %39 = load i32, i32* %max_physical_grid_size, align 4, !tbaa !11
  %40 = load i32, i32* %block_offset, align 4, !tbaa !11
  %add = add nsw i32 %40, %39
  store i32 %add, i32* %block_offset, align 4, !tbaa !11
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %41 = bitcast i32* %num_remaining_physical_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %41) #5
  br label %if.end

if.end:                                           ; preds = %for.end, %if.then
  %42 = bitcast i32* %max_physical_grid_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %42) #5
  %43 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %43) #5
  br label %if.end14

if.end14:                                         ; preds = %if.end, %land.lhs.true, %entry
  %44 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %44) #5
  %45 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %45) #5
  %46 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.lifetime.end(i64 24, i8* %46) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail13cuda_launcherINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE9configureESB_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* noalias sret %agg.result, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, align 8
  %block_size = alloca i32, align 4
  %heap_size = alloca i32, align 4
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t", align 8
  %num_blocks = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::concurrent_group", align 4
  %agg.tmp7 = alloca %"class.thrust::system::cuda::detail::bulk_::agent", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"** %this.addr, align 8
  %0 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %2, i32 0, i32 0
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"*
  %call = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base.151"* %3)
  %call2 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE17choose_group_sizeEi(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %1, i32 %call)
  store i32 %call2, i32* %block_size, align 4, !tbaa !11
  %4 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  %5 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher.1141"* %this1 to %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail17device_propertiesEv(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* sret %ref.tmp)
  %6 = load i32, i32* %block_size, align 4, !tbaa !11
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %this_exec3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base", %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %7, i32 0, i32 0
  %call4 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EE9heap_sizeEv(%"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %this_exec3)
  %call5 = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %5, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %ref.tmp, i32 %6, i32 %call4)
  store i32 %call5, i32* %heap_size, align 4, !tbaa !11
  %8 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.start(i64 4, i8* %8) #5
  %9 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to %"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"*
  %call6 = call i32 @_ZNK6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EE4sizeEv(%"class.thrust::system::cuda::detail::bulk_::detail::group_detail::group_base"* %9)
  store i32 %call6, i32* %num_blocks, align 4, !tbaa !11
  %10 = load i32, i32* %num_blocks, align 4, !tbaa !11
  %11 = load i32, i32* %block_size, align 4, !tbaa !11
  %12 = load i32, i32* %heap_size, align 4, !tbaa !11
  call void @_ZN6thrust6system4cuda6detail5bulk_5agentILm1EEC2Ei(%"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 2147483647)
  %coerce.dive = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::agent", %"class.thrust::system::cuda::detail::bulk_::agent"* %agg.tmp7, i32 0, i32 0
  %13 = load i32, i32* %coerce.dive, align 4
  %call8 = call { i64, i64 } @_ZN6thrust6system4cuda6detail5bulk_6detail10make_blockINS3_16concurrent_groupINS3_5agentILm1EEELm0EEEEET_NSA_9size_typeESB_NSA_10agent_typeESB_(i32 %11, i32 %12, i32 %13, i32 2147483647)
  %14 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %15 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 0
  %16 = extractvalue { i64, i64 } %call8, 0
  store i64 %16, i64* %15, align 4
  %17 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %14, i32 0, i32 1
  %18 = extractvalue { i64, i64 } %call8, 1
  store i64 %18, i64* %17, align 4
  %19 = bitcast %"class.thrust::system::cuda::detail::bulk_::concurrent_group"* %agg.tmp to { i64, i64 }*
  %20 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 0
  %21 = load i64, i64* %20, align 4
  %22 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %19, i32 0, i32 1
  %23 = load i64, i64* %22, align 4
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9make_gridINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEET_NSC_9size_typeENSC_10agent_typeESD_(%"class.thrust::system::cuda::detail::bulk_::parallel_group"* sret %agg.result, i32 %10, i64 %21, i64 %23, i32 2147483647)
  %24 = bitcast i32* %num_blocks to i8*
  call void @llvm.lifetime.end(i64 4, i8* %24) #5
  %25 = bitcast i32* %heap_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %25) #5
  %26 = bitcast i32* %block_size to i8*
  call void @llvm.lifetime.end(i64 4, i8* %26) #5
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_i(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %c, i32 %offset) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*, align 8
  %offset.addr = alloca i32, align 4
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::parallel_group", align 8
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"** %this.addr, align 8, !tbaa !1
  store i32 %offset, i32* %offset.addr, align 4, !tbaa !11
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"** %this.addr, align 8
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 24, i32 4, i1 false)
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %agg.tmp2 to i8*
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 32, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"* %0, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %agg.tmp, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %agg.tmp2)
  %block_offset = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145", %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %this1, i32 0, i32 1
  %5 = load i32, i32* %offset.addr, align 4, !tbaa !11
  store i32 %5, i32* %block_offset, align 8, !tbaa !590
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE6launchEiiiP11CUstream_stNS4_9cuda_taskISB_SV_EE(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, i32 %num_blocks, i32 %block_size, i32 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %task) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i32, align 4
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145", align 8
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i32 %num_dynamic_smem_bytes, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %cmp = icmp sgt i32 %0, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %1 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this1 to %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"*
  %2 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %3 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_dynamic_smem_bytes.addr, align 4, !tbaa !11
  %conv = sext i32 %4 to i64
  %5 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %6 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %agg.tmp to i8*
  %7 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 64, i32 8, i1 false)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"* %1, i32 %2, i32 %3, i64 %conv, %struct.CUstream_st* %5, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %agg.tmp)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail22synchronize_if_enabledEPKc(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.36, i32 0, i32 0))
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE16choose_heap_sizeERKNS4_19device_properties_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, i32 %group_size, i32 %requested_size) #0 comdat align 2 {
entry:
  %retval = alloca i32, align 4
  %this.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, align 8
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %group_size.addr = alloca i32, align 4
  %requested_size.addr = alloca i32, align 4
  %attr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", align 8
  %cleanup.dest.slot = alloca i32
  %result = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %coerce = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp = alloca %"struct.thrust::pair.82", align 4
  %next_level_result = alloca i32, align 4
  %next_level_occupancy = alloca i32, align 4
  %coerce14 = alloca %"class.thrust::tuple.173", align 8
  %ref.tmp16 = alloca %"struct.thrust::pair.82", align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"* %this, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store i32 %group_size, i32* %group_size.addr, align 4, !tbaa !11
  store i32 %requested_size, i32* %requested_size.addr, align 4, !tbaa !11
  %this1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"*, %"struct.thrust::system::cuda::detail::bulk_::detail::cuda_launcher_base.1142"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.start(i64 40, i8* %0) #5
  %call = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail19function_attributesIPFvNS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEEEEENS4_21function_attributes_tET_(%"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* sret %attr, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %call)
  %ptxVersion = getelementptr inbounds %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t", %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, i32 0, i32 4
  %1 = load i32, i32* %ptxVersion, align 8, !tbaa !138
  %cmp = icmp slt i32 %1, 20
  br i1 %cmp, label %if.then, label %lor.lhs.false

lor.lhs.false:                                    ; preds = %entry
  %2 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp2 = icmp eq i32 %2, 0
  br i1 %cmp2, label %if.then, label %if.end

if.then:                                          ; preds = %lor.lhs.false, %entry
  store i32 0, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %lor.lhs.false
  %3 = bitcast i32* %result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %3) #5
  store i32 0, i32* %result, align 4, !tbaa !11
  %4 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %4) #5
  store i32 0, i32* %occupancy, align 4, !tbaa !11
  %call3 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %result, i32* dereferenceable(4) %occupancy)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive to { i32*, i32* }*
  %6 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 0
  %7 = extractvalue { i32*, i32* } %call3, 0
  store i32* %7, i32** %6, align 8
  %8 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %5, i32 0, i32 1
  %9 = extractvalue { i32*, i32* } %call3, 1
  store i32* %9, i32** %8, align 8
  %10 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %11 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %10, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %11, i32 0)
  %12 = bitcast %"struct.thrust::pair.82"* %ref.tmp to i64*
  store i64 %call4, i64* %12, align 4
  %call5 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp)
  %13 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %cmp6 = icmp ne i32 %13, 2147483647
  br i1 %cmp6, label %land.lhs.true, label %if.end23

land.lhs.true:                                    ; preds = %if.end
  %14 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %15 = load i32, i32* %result, align 4, !tbaa !11
  %cmp7 = icmp sgt i32 %14, %15
  br i1 %cmp7, label %land.lhs.true8, label %if.end23

land.lhs.true8:                                   ; preds = %land.lhs.true
  %16 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp9 = icmp sgt i32 %16, 1
  br i1 %cmp9, label %if.then10, label %if.end23

if.then10:                                        ; preds = %land.lhs.true8
  %17 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %add = add nsw i32 %17, 48
  store i32 %add, i32* %requested_size.addr, align 4, !tbaa !11
  %18 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %19 = load i32, i32* %result, align 4, !tbaa !11
  %cmp11 = icmp sgt i32 %18, %19
  br i1 %cmp11, label %if.then12, label %if.end22

if.then12:                                        ; preds = %if.then10
  %20 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.start(i64 4, i8* %20) #5
  store i32 0, i32* %next_level_result, align 4, !tbaa !11
  %21 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %21) #5
  store i32 0, i32* %next_level_occupancy, align 4, !tbaa !11
  %call13 = call { i32*, i32* } @_ZN6thrust3tieIiiEENS_5tupleIRT_RT0_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EES3_S5_(i32* dereferenceable(4) %next_level_result, i32* dereferenceable(4) %next_level_occupancy)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.173", %"class.thrust::tuple.173"* %coerce14, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.174"* %coerce.dive15 to { i32*, i32* }*
  %23 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 0
  %24 = extractvalue { i32*, i32* } %call13, 0
  store i32* %24, i32** %23, align 8
  %25 = getelementptr inbounds { i32*, i32* }, { i32*, i32* }* %22, i32 0, i32 1
  %26 = extractvalue { i32*, i32* } %call13, 1
  store i32* %26, i32** %25, align 8
  %27 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %28 = load i32, i32* %group_size.addr, align 4, !tbaa !11
  %29 = load i32, i32* %requested_size.addr, align 4, !tbaa !11
  %call17 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %27, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %28, i32 %29)
  %30 = bitcast %"struct.thrust::pair.82"* %ref.tmp16 to i64*
  store i64 %call17, i64* %30, align 4
  %call18 = call dereferenceable(16) %"class.thrust::tuple.173"* @_ZN6thrust5tupleIRiS1_NS_9null_typeES2_S2_S2_S2_S2_S2_S2_EaSIiiEERS3_RKNS_4pairIT_T0_EE(%"class.thrust::tuple.173"* %coerce14, %"struct.thrust::pair.82"* dereferenceable(8) %ref.tmp16)
  %31 = load i32, i32* %next_level_occupancy, align 4, !tbaa !11
  %cmp19 = icmp sgt i32 %31, 0
  br i1 %cmp19, label %if.then20, label %if.end21

if.then20:                                        ; preds = %if.then12
  %32 = load i32, i32* %next_level_result, align 4, !tbaa !11
  store i32 %32, i32* %result, align 4, !tbaa !11
  br label %if.end21

if.end21:                                         ; preds = %if.then20, %if.then12
  %33 = bitcast i32* %next_level_occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %33) #5
  %34 = bitcast i32* %next_level_result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %34) #5
  br label %if.end22

if.end22:                                         ; preds = %if.end21, %if.then10
  br label %if.end23

if.end23:                                         ; preds = %if.end22, %land.lhs.true8, %land.lhs.true, %if.end
  %35 = load i32, i32* %result, align 4, !tbaa !11
  store i32 %35, i32* %retval, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  %36 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %36) #5
  %37 = bitcast i32* %result to i8*
  call void @llvm.lifetime.end(i64 4, i8* %37) #5
  br label %cleanup

cleanup:                                          ; preds = %if.end23, %if.then
  %38 = bitcast %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr to i8*
  call void @llvm.lifetime.end(i64 40, i8* %38) #5
  %39 = load i32, i32* %retval, align 4
  ret i32 %39
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE28dynamic_smem_occupancy_limitERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::pair.82", align 4
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  %occupancy = alloca i32, align 4
  %cleanup.dest.slot = alloca i32
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.start(i64 4, i8* %0) #5
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %2 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %3 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %4 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %call = call i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %1, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %2, i32 %3, i32 %4)
  store i32 %call, i32* %occupancy, align 4, !tbaa !11
  %5 = load i32, i32* %occupancy, align 4, !tbaa !11
  %cmp = icmp slt i32 %5, 1
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %call1 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 0, i32 0)
  %6 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call1, i64* %6, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %entry
  %7 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %8 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %9 = load i32, i32* %occupancy, align 4, !tbaa !11
  %conv = sext i32 %9 to i64
  %call2 = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail28proportional_smem_allocationERKNS4_19device_properties_tERKNS4_21function_attributes_tEm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %7, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %8, i64 %conv)
  %conv3 = trunc i64 %call2 to i32
  %10 = load i32, i32* %occupancy, align 4, !tbaa !11
  %call4 = call i64 @_ZN6thrust9make_pairIiiEENS_4pairIT_T0_EES2_S3_(i32 %conv3, i32 %10)
  %11 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  store i64 %call4, i64* %11, align 4
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %if.end, %if.then
  %12 = bitcast i32* %occupancy to i8*
  call void @llvm.lifetime.end(i64 4, i8* %12) #5
  %13 = bitcast %"struct.thrust::pair.82"* %retval to i64*
  %14 = load i64, i64* %13, align 4
  ret i64 %14
}

; Function Attrs: uwtable
define linkonce_odr i32 @_ZN6thrust6system4cuda6detail5bulk_6detail18cuda_launcher_baseILj0ENS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEE36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEii(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %props, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %attr, i32 %num_threads_per_block, i32 %num_smem_bytes_per_block) #0 comdat align 2 {
entry:
  %props.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, align 8
  %attr.addr = alloca %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, align 8
  %num_threads_per_block.addr = alloca i32, align 4
  %num_smem_bytes_per_block.addr = alloca i32, align 4
  store %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* %props, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8, !tbaa !7
  store %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* %attr, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8, !tbaa !7
  store i32 %num_threads_per_block, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  store i32 %num_smem_bytes_per_block, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %0 = load %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"** %props.addr, align 8
  %1 = load %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"*, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"** %attr.addr, align 8
  %2 = load i32, i32* %num_threads_per_block.addr, align 4, !tbaa !11
  %conv = sext i32 %2 to i64
  %3 = load i32, i32* %num_smem_bytes_per_block.addr, align 4, !tbaa !11
  %conv1 = sext i32 %3 to i64
  %call = call i64 @_ZN6thrust6system4cuda6detail5bulk_6detail25cuda_launch_config_detail36max_active_blocks_per_multiprocessorERKNS4_19device_properties_tERKNS4_21function_attributes_tEmm(%"struct.thrust::system::cuda::detail::bulk_::detail::device_properties_t"* dereferenceable(56) %0, %"struct.thrust::system::cuda::detail::bulk_::detail::function_attributes_t"* dereferenceable(40) %1, i64 %conv, i64 %conv1)
  %conv2 = trunc i64 %call to i32
  ret i32 %conv2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail9task_baseINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEC2ESB_SV_(%"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"* %this, %"class.thrust::system::cuda::detail::bulk_::parallel_group"* byval align 8 %g, %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* byval align 8 %c) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"*, align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"*, %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"** %this.addr, align 8
  %c2 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c2 to i8*
  %1 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::closure.1137"* %c to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 32, i32 8, i1 false)
  %g3 = getelementptr inbounds %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146", %"class.thrust::system::cuda::detail::bulk_::detail::task_base.1146"* %this1, i32 0, i32 1
  %2 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g3 to i8*
  %3 = bitcast %"class.thrust::system::cuda::detail::bulk_::parallel_group"* %g to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 24, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_(%"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"* %this, i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %task) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"*, align 8
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145", align 8
  store %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"* %this, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"** %this.addr, align 8, !tbaa !1
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"*, %"class.thrust::system::cuda::detail::bulk_::detail::triple_chevron_launcher.1143"** %this.addr, align 8
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 64, i32 8, i1 false)
  call void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %0, i32 %1, i64 %2, %struct.CUstream_st* %3, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %agg.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6system4cuda6detail5bulk_6detail23triple_chevron_launcherILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE6launchEjjmP11CUstream_stSX_EN10workaround14supported_pathEjjmS10_SX_(i32 %num_blocks, i32 %block_size, i64 %num_dynamic_smem_bytes, %struct.CUstream_st* %stream, %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %task) #0 comdat align 2 {
entry:
  %num_blocks.addr = alloca i32, align 4
  %block_size.addr = alloca i32, align 4
  %num_dynamic_smem_bytes.addr = alloca i64, align 8
  %stream.addr = alloca %struct.CUstream_st*, align 8
  %agg.tmp = alloca %struct.dim3, align 4
  %agg.tmp1 = alloca %struct.dim3, align 4
  %agg.tmp.coerce = alloca { i64, i32 }, align 4
  %agg.tmp1.coerce = alloca { i64, i32 }, align 4
  %agg.tmp2 = alloca %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145", align 8
  store i32 %num_blocks, i32* %num_blocks.addr, align 4, !tbaa !11
  store i32 %block_size, i32* %block_size.addr, align 4, !tbaa !11
  store i64 %num_dynamic_smem_bytes, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  store %struct.CUstream_st* %stream, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %0 = load i32, i32* %num_blocks.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp, i32 %0, i32 1, i32 1)
  %1 = load i32, i32* %block_size.addr, align 4, !tbaa !11
  call void @_ZN4dim3C2Ejjj(%struct.dim3* %agg.tmp1, i32 %1, i32 1, i32 1)
  %2 = load i64, i64* %num_dynamic_smem_bytes.addr, align 8, !tbaa !13
  %3 = load %struct.CUstream_st*, %struct.CUstream_st** %stream.addr, align 8, !tbaa !1
  %4 = bitcast { i64, i32 }* %agg.tmp.coerce to i8*
  %5 = bitcast %struct.dim3* %agg.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 12, i32 4, i1 false)
  %6 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 0
  %7 = load i64, i64* %6, align 4
  %8 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp.coerce, i32 0, i32 1
  %9 = load i32, i32* %8, align 4
  %10 = bitcast { i64, i32 }* %agg.tmp1.coerce to i8*
  %11 = bitcast %struct.dim3* %agg.tmp1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 12, i32 4, i1 false)
  %12 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 0
  %13 = load i64, i64* %12, align 4
  %14 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %agg.tmp1.coerce, i32 0, i32 1
  %15 = load i32, i32* %14, align 4
  %call = call i32 @cudaConfigureCall(i64 %7, i32 %9, i64 %13, i32 %15, i64 %2, %struct.CUstream_st* %3)
  %16 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %agg.tmp2 to i8*
  %17 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %task to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 64, i32 8, i1 false)
  %call3 = call i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %agg.tmp2, i64 0)
  %call4 = call void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* @_ZN6thrust6system4cuda6detail5bulk_6detail28triple_chevron_launcher_baseILj0ENS4_9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESN_EENS_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS_9null_typeESU_SU_SU_SU_SU_EEEEEELb1EE23global_function_pointerEv()
  %call5 = call i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %call4)
  call void @_ZN6thrust6system4cuda6detail5bulk_6detail14throw_on_errorE9cudaErrorPKc(i32 %call5, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.37, i32 0, i32 0))
  ret void
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL17cudaSetupArgumentIN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEE9cudaErrorT_m(%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* byval align 8 %arg, i64 %offset) #8 {
entry:
  %offset.addr = alloca i64, align 8
  store i64 %offset, i64* %offset.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"* %arg to i8*
  %1 = load i64, i64* %offset.addr, align 8, !tbaa !13
  %call = call i32 @cudaSetupArgument(i8* %0, i64 64, i64 %1)
  ret i32 %call
}

; Function Attrs: inlinehint uwtable
define internal i32 @_ZL10cudaLaunchIFvN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS4_14parallel_groupINS4_16concurrent_groupINS4_5agentILm1EEELm0EEELm0EEENS5_7closureINS3_17for_each_n_detail15for_each_kernelENS0_5tupleINS5_6cursorILj0EEENS0_7pointerINS0_4pairIiiEENS3_3tagENS0_11use_defaultESN_EENS0_6detail16wrapped_functionINSP_23allocator_traits_detail5gozerEvEEjNS0_9null_typeESU_SU_SU_SU_SU_EEEEEEEE9cudaErrorPT_(void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %func) #8 {
entry:
  %func.addr = alloca void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)*, align 8
  store void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %func, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)** %func.addr, align 8, !tbaa !1
  %0 = load void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)*, void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)** %func.addr, align 8, !tbaa !1
  %1 = bitcast void (%"class.thrust::system::cuda::detail::bulk_::detail::cuda_task.1145"*)* %0 to i8*
  %call = call i32 @cudaLaunch(i8* %1)
  ret i32 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.956"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.956"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.956"* %a, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.956"*, %"struct.thrust::detail::no_throw_allocator.956"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.956"* %0 to %"class.thrust::detail::temporary_allocator.957"*
  %call = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.957"* %1)
  ret %"struct.thrust::system::cuda::detail::tag"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEE4sizeEv(%"class.thrust::detail::vector_base.854"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.854"*, align 8
  store %"class.thrust::detail::vector_base.854"* %this, %"class.thrust::detail::vector_base.854"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.854"*, %"class.thrust::detail::vector_base.854"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.854", %"class.thrust::detail::vector_base.854"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !493
  ret i64 %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_4pairIiiEESaIS2_ES2_NS_23device_malloc_allocatorIS2_EEEEbRKNS_6detail11vector_baseIT_T0_EERKNS7_IT1_T2_EE(%"class.thrust::detail::vector_base.845"* dereferenceable(32) %lhs, %"class.thrust::detail::vector_base.866"* dereferenceable(32) %rhs) #0 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  %rhs.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp4 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  store %"class.thrust::detail::vector_base.845"* %lhs, %"class.thrust::detail::vector_base.845"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::detail::vector_base.866"* %rhs, %"class.thrust::detail::vector_base.866"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %lhs.addr, align 8
  %call = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.845"* %0)
  %1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %rhs.addr, align 8
  %call1 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.866"* %1)
  %cmp = icmp eq i64 %call, %call1
  br i1 %cmp, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %2 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %lhs.addr, align 8
  %call2 = call %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %3 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %lhs.addr, align 8
  %call5 = call %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.845"* %3)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp4, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call5, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %4 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %rhs.addr, align 8
  %call9 = call %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.866"* %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp8, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive13, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call9, %"struct.thrust::pair.82"** %coerce.dive14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive15, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp4, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive17, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp8, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive22, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %call24 = call zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIiiEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_(%"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"* %6, %"struct.thrust::pair.82"* %7)
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %8 = phi i1 [ false, %entry ], [ %call24, %land.rhs ]
  ret i1 %8
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN8unittest9type_nameIN6thrust11host_vectorINS1_4pairIiiEESaIS4_EEEEESsv(%"class.std::basic_string"* noalias sret %agg.result) #0 comdat {
entry:
  %call = call i8* @_ZNKSt9type_info4nameEv(%"class.std::type_info"* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust11host_vectorINS_4pairIiiEESaIS2_EEE to %"class.std::type_info"*)) #5
  call void @_ZN8unittest8demangleEPKc(%"class.std::basic_string"* sret %agg.result, i8* %call)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.866"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 1
  %0 = load i64, i64* %m_size, align 8, !tbaa !507
  ret i64 %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIiiEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_(%"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp11 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %ref.tmp = alloca %"struct.thrust::detail::is_same", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp9 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp10 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"struct.thrust::detail::is_same"* %ref.tmp to %"struct.thrust::detail::integral_constant.197"*
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive12, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp9, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive14, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp10, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive19, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive20, align 8
  %call = call zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIiiEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE(%"struct.thrust::pair.82"* %7, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.866"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %m_storage = getelementptr inbounds %"class.thrust::detail::vector_base.866", %"class.thrust::detail::vector_base.866"* %this1, i32 0, i32 0
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.867"* %m_storage)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive9, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12vector_equalINS0_15normal_iteratorIPKNS_4pairIiiEEEENS2_INS_10device_ptrIS5_EEEEEEbT_SB_T0_NS0_17integral_constantIbLb0EEE(%"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first1 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last1 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %0 = alloca %"struct.thrust::detail::integral_constant.197", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp9 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %from_system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %from_system2 = alloca %"struct.thrust::system::cuda::detail::tag", align 1
  %to_system = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %rng1 = alloca %"class.thrust::detail::move_to_system.1162", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp15 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %rng2 = alloca %"class.thrust::detail::move_to_system.1167", align 8
  %agg.tmp20 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp21 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp38 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp44 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp51 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first2, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %1 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %1) #5
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp9 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive10, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp9, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive12, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  %call = call i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEENS_15iterator_traitsIT_E15difference_typeES9_S9_(%"struct.thrust::pair.82"* %6, %"struct.thrust::pair.82"* %7)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %8 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %8) #5
  %9 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %9) #5
  %10 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.start(i64 1, i8* %10) #5
  %11 = bitcast %"class.thrust::detail::move_to_system.1162"* %rng1 to i8*
  call void @llvm.lifetime.start(i64 16, i8* %11) #5
  %12 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to %"struct.thrust::execution_policy.88"*
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to %"struct.thrust::execution_policy.88"*
  %14 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp14 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.919"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp15 to i8*
  %17 = bitcast %"class.thrust::detail::normal_iterator.919"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp14, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive16, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp15, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive18, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  call void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_(%"class.thrust::detail::move_to_system.1162"* %rng1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %12, %"struct.thrust::execution_policy.88"* dereferenceable(1) %13, %"struct.thrust::pair.82"* %18, %"struct.thrust::pair.82"* %19)
  %20 = bitcast %"class.thrust::detail::move_to_system.1167"* %rng2 to i8*
  call void @llvm.lifetime.start(i64 24, i8* %20) #5
  %21 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to %"struct.thrust::execution_policy.120"*
  %22 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to %"struct.thrust::execution_policy.88"*
  %23 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp20 to i8*
  %24 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %23, i8* %24, i64 8, i32 8, i1 false)
  %25 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first2 to %"class.thrust::iterator_facade.1161"*
  %26 = load i64, i64* %n, align 8, !tbaa !13
  %call22 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.1161"* dereferenceable(1) %25, i64 %26)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp21, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive26, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call22, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp20, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive28, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive29, i32 0, i32 0
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive30, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive31, i32 0, i32 0
  %27 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp21, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive36, i32 0, i32 0
  %28 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive37, align 8
  call void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_(%"class.thrust::detail::move_to_system.1167"* %rng2, %"struct.thrust::execution_policy.120"* dereferenceable(1) %21, %"struct.thrust::execution_policy.88"* dereferenceable(1) %22, %"struct.thrust::pair.82"* %27, %"struct.thrust::pair.82"* %28)
  %29 = bitcast %"class.thrust::detail::move_to_system.1162"* %rng1 to %"class.thrust::detail::tagged_iterator_range.1163"*
  %call39 = invoke %"struct.thrust::pair.82"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEE5beginEv(%"class.thrust::detail::tagged_iterator_range.1163"* %29)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive40 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp38, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive40, i32 0, i32 0
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive41, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive42, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call39, %"struct.thrust::pair.82"** %coerce.dive43, align 8
  %30 = bitcast %"class.thrust::detail::move_to_system.1162"* %rng1 to %"class.thrust::detail::tagged_iterator_range.1163"*
  %call46 = invoke %"struct.thrust::pair.82"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEE3endEv(%"class.thrust::detail::tagged_iterator_range.1163"* %30)
          to label %invoke.cont45 unwind label %lpad

invoke.cont45:                                    ; preds = %invoke.cont
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp44, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive49, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call46, %"struct.thrust::pair.82"** %coerce.dive50, align 8
  %31 = bitcast %"class.thrust::detail::move_to_system.1167"* %rng2 to %"class.thrust::detail::contiguous_storage.1169"*
  %call53 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1169"* %31)
          to label %invoke.cont52 unwind label %lpad

invoke.cont52:                                    ; preds = %invoke.cont45
  %coerce.dive54 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp51, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive55, i32 0, i32 0
  %coerce.dive57 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive56, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call53, %"struct.thrust::pair.82"** %coerce.dive57, align 8
  %coerce.dive58 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp38, i32 0, i32 0
  %coerce.dive59 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive58, i32 0, i32 0
  %coerce.dive60 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive59, i32 0, i32 0
  %coerce.dive61 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive60, i32 0, i32 0
  %32 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive61, align 8
  %coerce.dive62 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp44, i32 0, i32 0
  %coerce.dive63 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive62, i32 0, i32 0
  %coerce.dive64 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive63, i32 0, i32 0
  %coerce.dive65 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive64, i32 0, i32 0
  %33 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive65, align 8
  %coerce.dive66 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp51, i32 0, i32 0
  %coerce.dive67 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive66, i32 0, i32 0
  %coerce.dive68 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive67, i32 0, i32 0
  %coerce.dive69 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive68, i32 0, i32 0
  %34 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive69, align 8
  %call71 = invoke zeroext i1 @_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_(%"struct.thrust::pair.82"* %32, %"struct.thrust::pair.82"* %33, %"struct.thrust::pair.82"* %34)
          to label %invoke.cont70 unwind label %lpad

invoke.cont70:                                    ; preds = %invoke.cont52
  call void bitcast (void (%"class.thrust::detail::temporary_array.1168"*)* @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system3cpp6detail3tagEED2Ev to void (%"class.thrust::detail::move_to_system.1167"*)*)(%"class.thrust::detail::move_to_system.1167"* %rng2) #5
  %35 = bitcast %"class.thrust::detail::move_to_system.1167"* %rng2 to i8*
  call void @llvm.lifetime.end(i64 24, i8* %35) #5
  %36 = bitcast %"class.thrust::detail::move_to_system.1162"* %rng1 to i8*
  call void @llvm.lifetime.end(i64 16, i8* %36) #5
  %37 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %37) #5
  %38 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %38) #5
  %39 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %39) #5
  %40 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %40) #5
  ret i1 %call71

lpad:                                             ; preds = %invoke.cont52, %invoke.cont45, %invoke.cont, %entry
  %41 = landingpad { i8*, i32 }
          cleanup
  %42 = extractvalue { i8*, i32 } %41, 0
  store i8* %42, i8** %exn.slot, align 8
  %43 = extractvalue { i8*, i32 } %41, 1
  store i32 %43, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::temporary_array.1168"*)* @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system3cpp6detail3tagEED2Ev to void (%"class.thrust::detail::move_to_system.1167"*)*)(%"class.thrust::detail::move_to_system.1167"* %rng2) #5
  %44 = bitcast %"class.thrust::detail::move_to_system.1167"* %rng2 to i8*
  call void @llvm.lifetime.end(i64 24, i8* %44) #5
  %45 = bitcast %"class.thrust::detail::move_to_system.1162"* %rng1 to i8*
  call void @llvm.lifetime.end(i64 16, i8* %45) #5
  %46 = bitcast %"struct.thrust::system::cpp::detail::tag"* %to_system to i8*
  call void @llvm.lifetime.end(i64 1, i8* %46) #5
  %47 = bitcast %"struct.thrust::system::cuda::detail::tag"* %from_system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %47) #5
  %48 = bitcast %"struct.thrust::system::cpp::detail::tag"* %from_system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %48) #5
  %49 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %49) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val72 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val72
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagESB_EC2ERNS_16execution_policyISB_EESF_S7_S7_(%"class.thrust::detail::move_to_system.1162"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %from_system, %"struct.thrust::execution_policy.88"* dereferenceable(1) %to_system, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::move_to_system.1162"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %to_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store %"class.thrust::detail::move_to_system.1162"* %this, %"class.thrust::detail::move_to_system.1162"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %from_system, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %to_system, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8, !tbaa !7
  %this4 = load %"class.thrust::detail::move_to_system.1162"*, %"class.thrust::detail::move_to_system.1162"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::move_to_system.1162"* %this4 to %"class.thrust::detail::tagged_iterator_range.1163"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8
  %2 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %from_system.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive8, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_(%"class.thrust::detail::tagged_iterator_range.1163"* %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::pair.82"* %7, %"struct.thrust::pair.82"* %8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.1161"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.1161"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  store %"class.thrust::iterator_facade.1161"* %i, %"class.thrust::iterator_facade.1161"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.1159"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.1161"*, %"class.thrust::iterator_facade.1161"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.1161"* %1 to %"class.thrust::detail::normal_iterator.1159"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %tmp to %"class.thrust::iterator_facade.1161"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1159"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl(%"class.thrust::iterator_facade.1161"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1159"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1159"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.1159"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %10
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail14move_to_systemINS0_15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_6system4cuda6detail3tagENS9_3cpp6detail3tagEEC2ERNS_16execution_policyISC_EERNSH_ISF_EES8_S8_(%"class.thrust::detail::move_to_system.1167"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::execution_policy.88"* dereferenceable(1) %to_system, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %this.addr = alloca %"class.thrust::detail::move_to_system.1167"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %to_system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp11 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  store %"class.thrust::detail::move_to_system.1167"* %this, %"class.thrust::detail::move_to_system.1167"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %to_system, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8, !tbaa !7
  %this10 = load %"class.thrust::detail::move_to_system.1167"*, %"class.thrust::detail::move_to_system.1167"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::move_to_system.1167"* %this10 to %"class.thrust::detail::temporary_array.1168"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %to_system.addr, align 8
  %2 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp11 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive15, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp11, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive20, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  call void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_(%"class.thrust::detail::temporary_array.1168"* %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::execution_policy.120"* dereferenceable(1) %2, %"struct.thrust::pair.82"* %7, %"struct.thrust::pair.82"* %8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEEbT_SI_T0_(%"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %system1 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %system2 = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %0) #5
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to %"struct.thrust::execution_policy.88"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6system6detail7generic13select_systemINS0_3cpp6detail3tagES6_EERNS_6detail17enable_if_definedINS7_14minimum_systemIT_T0_NS7_19minimum_type_detail14any_conversionESD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_SD_EEE4typeERNS_16execution_policyISA_EERNSI_ISB_EE(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::execution_policy.88"* dereferenceable(1) %3)
  %4 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp to i8*
  %6 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp12 to i8*
  %8 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.1174"* %agg.tmp13 to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive16, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive17, align 8
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp12, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive20, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp13, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive24, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  %call26 = call zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4, %"struct.thrust::pair.82"* %11, %"struct.thrust::pair.82"* %12, %"struct.thrust::pair.82"* %13)
  %14 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system2 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %14) #5
  %15 = bitcast %"struct.thrust::system::cpp::detail::tag"* %system1 to i8*
  call void @llvm.lifetime.end(i64 1, i8* %15) #5
  ret i1 %call26
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEE5beginEv(%"class.thrust::detail::tagged_iterator_range.1163"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range.1163"*, align 8
  store %"class.thrust::detail::tagged_iterator_range.1163"* %this, %"class.thrust::detail::tagged_iterator_range.1163"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_iterator_range.1163"*, %"class.thrust::detail::tagged_iterator_range.1163"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.1163", %"class.thrust::detail::tagged_iterator_range.1163"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEE3endEv(%"class.thrust::detail::tagged_iterator_range.1163"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range.1163"*, align 8
  store %"class.thrust::detail::tagged_iterator_range.1163"* %this, %"class.thrust::detail::tagged_iterator_range.1163"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_iterator_range.1163"*, %"class.thrust::detail::tagged_iterator_range.1163"** %this.addr, align 8
  %m_end = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.1163", %"class.thrust::detail::tagged_iterator_range.1163"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %m_end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1169"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.1174"* %retval to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.1174"* %m_begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system3cpp6detail3tagEED2Ev(%"class.thrust::detail::temporary_array.1168"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_array.1168"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp5 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  store %"class.thrust::detail::temporary_array.1168"* %this, %"class.thrust::detail::temporary_array.1168"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_array.1168"*, %"class.thrust::detail::temporary_array.1168"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.1168"* %this1 to %"class.thrust::detail::contiguous_storage.1169"*
  %1 = bitcast %"class.thrust::detail::temporary_array.1168"* %this1 to %"class.thrust::detail::contiguous_storage.1169"*
  %call = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1169"* %1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %2 = bitcast %"class.thrust::detail::temporary_array.1168"* %this1 to %"class.thrust::detail::contiguous_storage.1169"*
  %call7 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.1169"* %2)
          to label %invoke.cont6 unwind label %lpad

invoke.cont6:                                     ; preds = %invoke.cont
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp5, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call7, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive14, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp5, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive18, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.1169"* %0, %"struct.thrust::pair.82"* %3, %"struct.thrust::pair.82"* %4)
          to label %invoke.cont20 unwind label %lpad

invoke.cont20:                                    ; preds = %invoke.cont6
  %5 = bitcast %"class.thrust::detail::temporary_array.1168"* %this1 to %"class.thrust::detail::contiguous_storage.1169"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1169"* %5) #5
  ret void

lpad:                                             ; preds = %invoke.cont6, %invoke.cont, %entry
  %6 = landingpad { i8*, i32 }
          catch i8* null
  %7 = extractvalue { i8*, i32 } %6, 0
  store i8* %7, i8** %exn.slot, align 8
  %8 = extractvalue { i8*, i32 } %6, 1
  store i32 %8, i32* %ehselector.slot, align 4
  %9 = bitcast %"class.thrust::detail::temporary_array.1168"* %this1 to %"class.thrust::detail::contiguous_storage.1169"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1169"* %9) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail21tagged_iterator_rangeINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEC2INS_16execution_policyISB_EESF_EERKT_RKT0_S7_S7_(%"class.thrust::detail::tagged_iterator_range.1163"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1), %"struct.thrust::execution_policy.88"* dereferenceable(1), %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator_range.1163"*, align 8
  %.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %.addr4 = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %agg.tmp8 = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store %"class.thrust::detail::tagged_iterator_range.1163"* %this, %"class.thrust::detail::tagged_iterator_range.1163"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %0, %"struct.thrust::execution_policy.88"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %1, %"struct.thrust::execution_policy.88"** %.addr4, align 8, !tbaa !7
  %this5 = load %"class.thrust::detail::tagged_iterator_range.1163"*, %"class.thrust::detail::tagged_iterator_range.1163"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.1163", %"class.thrust::detail::tagged_iterator_range.1163"* %this5, i32 0, i32 0
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  call void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator.1164"* %m_begin, %"struct.thrust::pair.82"* %4)
  %m_end = getelementptr inbounds %"class.thrust::detail::tagged_iterator_range.1163", %"class.thrust::detail::tagged_iterator_range.1163"* %this5, i32 0, i32 1
  %5 = bitcast %"class.thrust::detail::normal_iterator.919"* %agg.tmp8 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.919"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive9 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %agg.tmp8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive9, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  call void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator.1164"* %m_end, %"struct.thrust::pair.82"* %7)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEC2ES7_(%"class.thrust::detail::tagged_iterator.1164"* %this, %"struct.thrust::pair.82"* %x.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %x = alloca %"class.thrust::detail::normal_iterator.919", align 8
  %this.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %x.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"class.thrust::detail::tagged_iterator.1164"* %this, %"class.thrust::detail::tagged_iterator.1164"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %this2 to %"class.thrust::iterator_adaptor.1165"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_(%"class.thrust::iterator_adaptor.1165"* %0, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %x)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lEC2ERKS8_(%"class.thrust::iterator_adaptor.1165"* %this, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1165"*, align 8
  %iter.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  store %"class.thrust::iterator_adaptor.1165"* %this, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.919"* %iter, %"class.thrust::detail::normal_iterator.919"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1165"*, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.1165"* %this1 to %"class.thrust::iterator_facade.1166"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1159"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEpLEl(%"class.thrust::iterator_facade.1161"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1161"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.1161"* %this, %"class.thrust::iterator_facade.1161"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.1161"*, %"class.thrust::iterator_facade.1161"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1159"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.1161"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEEvRT_NSA_15difference_typeE(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1159"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.1161"* %this1)
  ret %"class.thrust::detail::normal_iterator.1159"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEEvRT_NSA_15difference_typeE(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.1159"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.1159"* %f, %"class.thrust::detail::normal_iterator.1159"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.1159"*, %"class.thrust::detail::normal_iterator.1159"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1159"* %0 to %"class.thrust::iterator_adaptor.1160"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl(%"class.thrust::iterator_adaptor.1160"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1159"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.1161"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1161"*, align 8
  store %"class.thrust::iterator_facade.1161"* %this, %"class.thrust::iterator_facade.1161"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1161"*, %"class.thrust::iterator_facade.1161"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1161"* %this1 to %"class.thrust::detail::normal_iterator.1159"*
  ret %"class.thrust::detail::normal_iterator.1159"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E7advanceEl(%"class.thrust::iterator_adaptor.1160"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1160"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.1160"* %this, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.1160"*, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.922"* %m_iterator to %"class.thrust::iterator_facade.925"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl(%"class.thrust::iterator_facade.925"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEpLEl(%"class.thrust::iterator_facade.925"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.925"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.925"* %this, %"class.thrust::iterator_facade.925"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.925"*, %"class.thrust::iterator_facade.925"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.925"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIiiEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::device_ptr.922"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.925"* %this1)
  ret %"class.thrust::device_ptr.922"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_10device_ptrIKNS_4pairIiiEEEEEEvRT_NS7_15difference_typeE(%"class.thrust::device_ptr.922"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::device_ptr.922"* %f, %"class.thrust::device_ptr.922"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.922"* %0 to %"class.thrust::iterator_adaptor.924"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl(%"class.thrust::iterator_adaptor.924"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZN6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.925"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.925"*, align 8
  store %"class.thrust::iterator_facade.925"* %this, %"class.thrust::iterator_facade.925"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.925"*, %"class.thrust::iterator_facade.925"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.925"* %this1 to %"class.thrust::device_ptr.922"*
  ret %"class.thrust::device_ptr.922"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7advanceEl(%"class.thrust::iterator_adaptor.924"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.924"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.924"* %this, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.924"*, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !519
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %1, i64 %0
  store %"struct.thrust::pair.82"* %add.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !519
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15temporary_arrayINS_4pairIiiEENS_6system3cpp6detail3tagEEC2INS4_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEERNS_16execution_policyIS7_EERNSI_IT_EET0_SO_(%"class.thrust::detail::temporary_array.1168"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system, %"struct.thrust::execution_policy.120"* dereferenceable(1) %input_system, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_array.1168"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %input_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %ref.tmp = alloca %"struct.thrust::detail::no_throw_allocator.1170", align 8
  %ref.tmp11 = alloca %"class.thrust::detail::temporary_allocator.1171", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp28 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp29 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp30 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %coerce = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  store %"class.thrust::detail::temporary_array.1168"* %this, %"class.thrust::detail::temporary_array.1168"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %system, %"struct.thrust::execution_policy.88"** %system.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.120"* %input_system, %"struct.thrust::execution_policy.120"** %input_system.addr, align 8, !tbaa !7
  %this10 = load %"class.thrust::detail::temporary_array.1168"*, %"class.thrust::detail::temporary_array.1168"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_array.1168"* %this10 to %"class.thrust::detail::contiguous_storage.1169"*
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.1171"* %ref.tmp11, %"struct.thrust::execution_policy.88"* dereferenceable(1) %1)
  invoke void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.1170"* %ref.tmp, %"class.thrust::detail::temporary_allocator.1171"* dereferenceable(8) %ref.tmp11)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_(%"class.thrust::detail::contiguous_storage.1169"* %0, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %ref.tmp)
          to label %invoke.cont13 unwind label %lpad12

invoke.cont13:                                    ; preds = %invoke.cont
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1172"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1170"*)*)(%"struct.thrust::detail::no_throw_allocator.1170"* %ref.tmp) #5
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1172"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.1171"*)*)(%"class.thrust::detail::temporary_allocator.1171"* %ref.tmp11) #5
  %2 = bitcast %"class.thrust::detail::temporary_array.1168"* %this10 to %"class.thrust::detail::contiguous_storage.1169"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp14 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive18, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp14, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive23, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive24, align 8
  %call = invoke i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(%"struct.thrust::pair.82"* %7, %"struct.thrust::pair.82"* %8)
          to label %invoke.cont26 unwind label %lpad25

invoke.cont26:                                    ; preds = %invoke.cont13
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.1169"* %2, i64 %call)
          to label %invoke.cont27 unwind label %lpad25

invoke.cont27:                                    ; preds = %invoke.cont26
  %9 = bitcast %"class.thrust::detail::temporary_array.1168"* %this10 to %"class.thrust::detail::contiguous_storage.1169"*
  %10 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %input_system.addr, align 8
  %11 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp28 to i8*
  %12 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* %12, i64 8, i32 8, i1 false)
  %13 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp29 to i8*
  %14 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %13, i8* %14, i64 8, i32 8, i1 false)
  %15 = bitcast %"class.thrust::detail::temporary_array.1168"* %this10 to %"class.thrust::detail::contiguous_storage.1169"*
  %call32 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE5beginEv(%"class.thrust::detail::contiguous_storage.1169"* %15)
          to label %invoke.cont31 unwind label %lpad25

invoke.cont31:                                    ; preds = %invoke.cont27
  %coerce.dive33 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp30, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive33, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive35, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call32, %"struct.thrust::pair.82"** %coerce.dive36, align 8
  %coerce.dive37 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp28, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive37, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive40, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive41, align 8
  %coerce.dive42 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp29, i32 0, i32 0
  %coerce.dive43 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive42, i32 0, i32 0
  %coerce.dive44 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive43, i32 0, i32 0
  %coerce.dive45 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive44, i32 0, i32 0
  %coerce.dive46 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive45, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive46, align 8
  %coerce.dive47 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp30, i32 0, i32 0
  %coerce.dive48 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive47, i32 0, i32 0
  %coerce.dive49 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive48, i32 0, i32 0
  %coerce.dive50 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive49, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive50, align 8
  %call52 = invoke %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_(%"class.thrust::detail::contiguous_storage.1169"* %9, %"struct.thrust::execution_policy.120"* dereferenceable(1) %10, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %17, %"struct.thrust::pair.82"* %18)
          to label %invoke.cont51 unwind label %lpad25

invoke.cont51:                                    ; preds = %invoke.cont31
  %coerce.dive53 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %coerce, i32 0, i32 0
  %coerce.dive54 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive53, i32 0, i32 0
  %coerce.dive55 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive54, i32 0, i32 0
  %coerce.dive56 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive55, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call52, %"struct.thrust::pair.82"** %coerce.dive56, align 8
  ret void

lpad:                                             ; preds = %entry
  %19 = landingpad { i8*, i32 }
          cleanup
  %20 = extractvalue { i8*, i32 } %19, 0
  store i8* %20, i8** %exn.slot, align 8
  %21 = extractvalue { i8*, i32 } %19, 1
  store i32 %21, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad12:                                           ; preds = %invoke.cont
  %22 = landingpad { i8*, i32 }
          cleanup
  %23 = extractvalue { i8*, i32 } %22, 0
  store i8* %23, i8** %exn.slot, align 8
  %24 = extractvalue { i8*, i32 } %22, 1
  store i32 %24, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1172"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1170"*)*)(%"struct.thrust::detail::no_throw_allocator.1170"* %ref.tmp) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad12, %lpad
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1172"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"class.thrust::detail::temporary_allocator.1171"*)*)(%"class.thrust::detail::temporary_allocator.1171"* %ref.tmp11) #5
  br label %eh.resume

lpad25:                                           ; preds = %invoke.cont31, %invoke.cont27, %invoke.cont26, %invoke.cont13
  %25 = landingpad { i8*, i32 }
          cleanup
  %26 = extractvalue { i8*, i32 } %25, 0
  store i8* %26, i8** %exn.slot, align 8
  %27 = extractvalue { i8*, i32 } %25, 1
  store i32 %27, i32* %ehselector.slot, align 4
  %28 = bitcast %"class.thrust::detail::temporary_array.1168"* %this10 to %"class.thrust::detail::contiguous_storage.1169"*
  call void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1169"* %28) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad25, %ehcleanup
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val58 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val58
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEC2ERNS_16execution_policyIS7_EE(%"class.thrust::detail::temporary_allocator.1171"* %this, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system) unnamed_addr #8 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1171"*, align 8
  %system.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::temporary_allocator.1171"* %this, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.88"* %system, %"struct.thrust::execution_policy.88"** %system.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.1171"*, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.1171"* %this1 to %"class.thrust::detail::tagged_allocator.1172"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.1172"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1171", %"class.thrust::detail::temporary_allocator.1171"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %call = invoke dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  store %"struct.thrust::system::cpp::detail::tag"* %call, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %6 = bitcast %"class.thrust::detail::temporary_allocator.1171"* %this1 to %"class.thrust::detail::tagged_allocator.1172"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.1172"* %6) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val2 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEC2ERKS9_(%"struct.thrust::detail::no_throw_allocator.1170"* %this, %"class.thrust::detail::temporary_allocator.1171"* dereferenceable(8) %other) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.1171"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %this, %"struct.thrust::detail::no_throw_allocator.1170"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.1171"* %other, %"class.thrust::detail::temporary_allocator.1171"** %other.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.1170"* %this1 to %"class.thrust::detail::temporary_allocator.1171"*
  %1 = load %"class.thrust::detail::temporary_allocator.1171"*, %"class.thrust::detail::temporary_allocator.1171"** %other.addr, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.1171"* %0, %"class.thrust::detail::temporary_allocator.1171"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEC2ERKSB_(%"class.thrust::detail::contiguous_storage.1169"* %this, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %alloc) unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  %alloc.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.1170"* %alloc, %"struct.thrust::detail::no_throw_allocator.1170"** %alloc.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %alloc.addr, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.1170"* %m_allocator, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %0)
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 1
  invoke void @_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.1177"* %agg.tmp, %"struct.thrust::pair.82"* null)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  invoke void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.1174"* %m_begin, %"struct.thrust::pair.82"* %1)
          to label %invoke.cont3 unwind label %lpad

invoke.cont3:                                     ; preds = %invoke.cont
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !592
  ret void

lpad:                                             ; preds = %invoke.cont, %entry
  %2 = landingpad { i8*, i32 }
          cleanup
  %3 = extractvalue { i8*, i32 } %2, 0
  store i8* %3, i8** %exn.slot, align 8
  %4 = extractvalue { i8*, i32 } %2, 1
  store i32 %4, i32* %ehselector.slot, align 4
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1172"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1170"*)*)(%"struct.thrust::detail::no_throw_allocator.1170"* %m_allocator) #5
  br label %eh.resume

eh.resume:                                        ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val4 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val4
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev(%"class.thrust::detail::tagged_allocator.1172"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.1172"*, align 8
  store %"class.thrust::detail::tagged_allocator.1172"* %this, %"class.thrust::detail::tagged_allocator.1172"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.1172"*, %"class.thrust::detail::tagged_allocator.1172"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE8allocateEm(%"class.thrust::detail::contiguous_storage.1169"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %ref.tmp6 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %agg.tmp7 = alloca %"class.thrust::pointer.1177", align 8
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ugt i64 %0, 0
  br i1 %cmp, label %if.then, label %if.else

if.then:                                          ; preds = %entry
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 1
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 0
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %m_allocator, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.1174"* %ref.tmp, %"struct.thrust::pair.82"* %2)
  %3 = bitcast %"class.thrust::detail::normal_iterator.1174"* %m_begin to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1174"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 2
  store i64 %5, i64* %m_size, align 8, !tbaa !592
  br label %if.end

if.else:                                          ; preds = %entry
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.1177"* %agg.tmp7, %"struct.thrust::pair.82"* null)
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive8, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.1174"* %ref.tmp6, %"struct.thrust::pair.82"* %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1174"* %m_begin5 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1174"* %ref.tmp6 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %m_size10 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size10, align 8, !tbaa !592
  br label %if.end

if.end:                                           ; preds = %if.else, %if.then
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESA_SA_(%"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive14, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive15, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp10, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive19, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive20, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_(%"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"* %5)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE18uninitialized_copyINS6_4cuda6detail3tagENS0_15normal_iteratorINS_10device_ptrIKS3_EEEEEENSH_INS_7pointerIS3_S9_NS_11use_defaultESN_EEEERNS_16execution_policyIT_EET0_SU_SP_(%"class.thrust::detail::contiguous_storage.1169"* %this, %"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp15 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp16 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp17 = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive10, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive11, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive12, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive13, align 8
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  %this14 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this14, i32 0, i32 0
  %1 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp15 to i8*
  %2 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp16 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1174"* %result to %"class.thrust::iterator_adaptor.1175"*
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.1175"* %5)
  %6 = bitcast %"class.thrust::pointer.1177"* %agg.tmp17 to i8*
  %7 = bitcast %"class.thrust::pointer.1177"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp15, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive21, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp16, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive26, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp17, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive28, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive29, align 8
  %call30 = call %"struct.thrust::pair.82"* @_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call30, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive33, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive34, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.1174"* %retval, %"struct.thrust::pair.82"* %11)
  %coerce.dive35 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %retval, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive36, i32 0, i32 0
  %coerce.dive38 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive37, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive38, align 8
  ret %"struct.thrust::pair.82"* %12
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEED2Ev(%"class.thrust::detail::contiguous_storage.1169"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  invoke void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.1169"* %this1)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1172"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1170"*)*)(%"struct.thrust::detail::no_throw_allocator.1170"* %m_allocator) #5
  ret void

lpad:                                             ; preds = %entry
  %0 = landingpad { i8*, i32 }
          catch i8* null
  %1 = extractvalue { i8*, i32 } %0, 0
  store i8* %1, i8** %exn.slot, align 8
  %2 = extractvalue { i8*, i32 } %0, 1
  store i32 %2, i32* %ehselector.slot, align 4
  %m_allocator2 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.thrust::detail::tagged_allocator.1172"*)* @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEED2Ev to void (%"struct.thrust::detail::no_throw_allocator.1170"*)*)(%"struct.thrust::detail::no_throw_allocator.1170"* %m_allocator2) #5
  br label %terminate.handler

terminate.handler:                                ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__clang_call_terminate(i8* %exn) #13
  unreachable
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.1172"* %this) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tagged_allocator.1172"*, align 8
  store %"class.thrust::detail::tagged_allocator.1172"* %this, %"class.thrust::detail::tagged_allocator.1172"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::tagged_allocator.1172"*, %"class.thrust::detail::tagged_allocator.1172"** %this.addr, align 8
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.1171"* %this, %"class.thrust::detail::temporary_allocator.1171"* dereferenceable(8) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1171"*, align 8
  %other.addr = alloca %"class.thrust::detail::temporary_allocator.1171"*, align 8
  store %"class.thrust::detail::temporary_allocator.1171"* %this, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::temporary_allocator.1171"* %other, %"class.thrust::detail::temporary_allocator.1171"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::temporary_allocator.1171"*, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::temporary_allocator.1171"* %this1 to %"class.thrust::detail::tagged_allocator.1172"*
  call void @_ZN6thrust6detail16tagged_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagENS_7pointerIS3_S7_NS_11use_defaultES9_EEEC2Ev(%"class.thrust::detail::tagged_allocator.1172"* %0)
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1171", %"class.thrust::detail::temporary_allocator.1171"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::detail::temporary_allocator.1171"*, %"class.thrust::detail::temporary_allocator.1171"** %other.addr, align 8
  %m_system2 = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1171", %"class.thrust::detail::temporary_allocator.1171"* %1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %m_system2, align 8, !tbaa !7
  store %"struct.thrust::system::cpp::detail::tag"* %ref, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEC2ERKSA_(%"struct.thrust::detail::no_throw_allocator.1170"* %this, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %this, %"struct.thrust::detail::no_throw_allocator.1170"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::no_throw_allocator.1170"* %0, %"struct.thrust::detail::no_throw_allocator.1170"** %.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %this.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.1170"* %this1 to %"class.thrust::detail::temporary_allocator.1171"*
  %2 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %.addr, align 8
  %3 = bitcast %"struct.thrust::detail::no_throw_allocator.1170"* %2 to %"class.thrust::detail::temporary_allocator.1171"*
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEC2ERKS8_(%"class.thrust::detail::temporary_allocator.1171"* %1, %"class.thrust::detail::temporary_allocator.1171"* dereferenceable(8) %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.1177"* %this, %"struct.thrust::pair.82"* %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.1177"*, align 8
  %other.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"class.thrust::pointer.1177"* %this, %"class.thrust::pointer.1177"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %other, %"struct.thrust::pair.82"** %other.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.1177"* %this1 to %"class.thrust::iterator_adaptor.1178"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.1178"* %0, %"struct.thrust::pair.82"** dereferenceable(8) %other.addr)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.1174"* %this, %"struct.thrust::pair.82"* %p.coerce) unnamed_addr #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %this.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"class.thrust::detail::normal_iterator.1174"* %this, %"class.thrust::detail::normal_iterator.1174"** %this.addr, align 8, !tbaa !1
  %this2 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.1174"* %this2 to %"class.thrust::iterator_adaptor.1175"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.1175"* %0, %"class.thrust::pointer.1177"* dereferenceable(8) %p)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEC2ERKSA_(%"class.thrust::iterator_adaptor.1178"* %this, %"struct.thrust::pair.82"** dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1178"*, align 8
  %iter.addr = alloca %"struct.thrust::pair.82"**, align 8
  store %"class.thrust::iterator_adaptor.1178"* %this, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"** %iter, %"struct.thrust::pair.82"*** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1178"*, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.1178"* %this1 to %"class.thrust::iterator_facade.1179"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"**, %"struct.thrust::pair.82"*** %iter.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %1, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !596
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_EC2ERKSB_(%"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::pointer.1177"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1175"*, align 8
  %iter.addr = alloca %"class.thrust::pointer.1177"*, align 8
  store %"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.1177"* %iter, %"class.thrust::pointer.1177"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1175"*, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.1175"* %this1 to %"class.thrust::iterator_facade.1176"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::pointer.1177"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::pointer.1177"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_m(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, i64 %n) #8 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %0, i64 %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE8allocateERSB_mEN19workaround_warnings8allocateESD_m(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, i64 %n) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %n.addr = alloca i64, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.1170"* %0 to %"class.thrust::detail::temporary_allocator.1171"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.1171"* %1, i64 %2)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %3
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE8allocateEm(%"class.thrust::detail::temporary_allocator.1171"* %this, i64 %cnt) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1171"*, align 8
  %cnt.addr = alloca i64, align 8
  %result = alloca %"struct.thrust::pair.1180", align 8
  %ref.tmp = alloca %"struct.thrust::pair.1181", align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %ref.tmp4 = alloca %"class.std::basic_string", align 8
  %ref.tmp5 = alloca %"class.std::allocator", align 1
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %cleanup.isactive = alloca i1, align 1
  store %"class.thrust::detail::temporary_allocator.1171"* %this, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8, !tbaa !1
  store i64 %cnt, i64* %cnt.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::detail::temporary_allocator.1171"*, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::pair.1180"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1171"* %this1)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIiiEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.1181"* %ref.tmp to { %"struct.thrust::pair.82"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 0
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  call void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.1180"* %result, %"struct.thrust::pair.1181"* dereferenceable(16) %ref.tmp)
  %second = getelementptr inbounds %"struct.thrust::pair.1180", %"struct.thrust::pair.1180"* %result, i32 0, i32 1
  %8 = load i64, i64* %second, align 8, !tbaa !598
  %9 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %cmp = icmp ult i64 %8, %9
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %first = getelementptr inbounds %"struct.thrust::pair.1180", %"struct.thrust::pair.1180"* %result, i32 0, i32 0
  %10 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %11 = bitcast %"class.thrust::pointer.1177"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  %12 = load i64, i64* %cnt.addr, align 8, !tbaa !13
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  %13 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.1171"* %this1, %"struct.thrust::pair.82"* %13, i64 %12)
  %exception = call i8* @__cxa_allocate_exception(i64 16) #5
  store i1 true, i1* %cleanup.isactive, align 1
  %14 = bitcast i8* %exception to %"class.thrust::system::detail::bad_alloc"*
  call void @_ZNSaIcEC2Ev(%"class.std::allocator"* %ref.tmp5) #5
  invoke void @_ZNSsC1EPKcRKSaIcE(%"class.std::basic_string"* %ref.tmp4, i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.44, i32 0, i32 0), %"class.std::allocator"* dereferenceable(1) %ref.tmp5)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %if.then
  invoke void @_ZN6thrust6system6detail9bad_allocC2ERKSs(%"class.thrust::system::detail::bad_alloc"* %14, %"class.std::basic_string"* dereferenceable(8) %ref.tmp4)
          to label %invoke.cont7 unwind label %lpad6

invoke.cont7:                                     ; preds = %invoke.cont
  store i1 false, i1* %cleanup.isactive, align 1
  invoke void @__cxa_throw(i8* %exception, i8* bitcast ({ i8*, i8*, i8* }* @_ZTIN6thrust6system6detail9bad_allocE to i8*), i8* bitcast (void (%"class.thrust::system::detail::bad_alloc"*)* @_ZN6thrust6system6detail9bad_allocD2Ev to i8*)) #15
          to label %unreachable unwind label %lpad6

lpad:                                             ; preds = %if.then
  %15 = landingpad { i8*, i32 }
          cleanup
  %16 = extractvalue { i8*, i32 } %15, 0
  store i8* %16, i8** %exn.slot, align 8
  %17 = extractvalue { i8*, i32 } %15, 1
  store i32 %17, i32* %ehselector.slot, align 4
  br label %ehcleanup

lpad6:                                            ; preds = %invoke.cont7, %invoke.cont
  %18 = landingpad { i8*, i32 }
          cleanup
  %19 = extractvalue { i8*, i32 } %18, 0
  store i8* %19, i8** %exn.slot, align 8
  %20 = extractvalue { i8*, i32 } %18, 1
  store i32 %20, i32* %ehselector.slot, align 4
  call void @_ZNSsD2Ev(%"class.std::basic_string"* %ref.tmp4) #5
  br label %ehcleanup

ehcleanup:                                        ; preds = %lpad6, %lpad
  call void @_ZNSaIcED2Ev(%"class.std::allocator"* %ref.tmp5) #5
  %cleanup.is_active = load i1, i1* %cleanup.isactive, align 1
  br i1 %cleanup.is_active, label %cleanup.action, label %cleanup.done

cleanup.action:                                   ; preds = %ehcleanup
  call void @__cxa_free_exception(i8* %exception) #5
  br label %cleanup.done

cleanup.done:                                     ; preds = %cleanup.action, %ehcleanup
  %21 = bitcast %"struct.thrust::pair.1180"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %21) #5
  br label %eh.resume

if.end:                                           ; preds = %entry
  %first9 = getelementptr inbounds %"struct.thrust::pair.1180", %"struct.thrust::pair.1180"* %result, i32 0, i32 0
  %22 = bitcast %"class.thrust::pointer.1177"* %retval to i8*
  %23 = bitcast %"class.thrust::pointer.1177"* %first9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %22, i8* %23, i64 8, i32 8, i1 false)
  %24 = bitcast %"struct.thrust::pair.1180"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %24) #5
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive11, i32 0, i32 0
  %25 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  ret %"struct.thrust::pair.82"* %25

eh.resume:                                        ; preds = %cleanup.done
  %exn = load i8*, i8** %exn.slot, align 8
  %sel = load i32, i32* %ehselector.slot, align 4
  %lpad.val = insertvalue { i8*, i32 } undef, i8* %exn, 0
  %lpad.val13 = insertvalue { i8*, i32 } %lpad.val, i32 %sel, 1
  resume { i8*, i32 } %lpad.val13

unreachable:                                      ; preds = %invoke.cont7
  unreachable
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust20get_temporary_bufferINS_4pairIiiEENS_6system3cpp6detail3tagEEENS1_INS_7pointerIT_T0_NS_11use_defaultESA_EENSB_15difference_typeEEERKNS_6detail21execution_policy_baseIS9_EESC_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1181", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::pair.1181", align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIiiEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, i64 %2)
  %3 = bitcast %"struct.thrust::pair.1181"* %agg.tmp to { %"struct.thrust::pair.82"*, i64 }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 0
  %5 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 0
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %3, i32 0, i32 1
  %7 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call2, 1
  store i64 %7, i64* %6, align 8
  %8 = bitcast %"struct.thrust::pair.1181"* %agg.tmp to { %"struct.thrust::pair.82"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 1
  %12 = load i64, i64* %11, align 8
  %call3 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIiiEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.82"* %10, i64 %12)
  %13 = bitcast %"struct.thrust::pair.1181"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %14 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %13, i32 0, i32 0
  %15 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call3, 0
  store %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"** %14, align 8
  %16 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %13, i32 0, i32 1
  %17 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call3, 1
  store i64 %17, i64* %16, align 8
  %18 = bitcast %"struct.thrust::pair.1181"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %19 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %18, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %19
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1171"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1171"*, align 8
  store %"class.thrust::detail::temporary_allocator.1171"* %this, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::temporary_allocator.1171"*, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8
  %m_system = getelementptr inbounds %"class.thrust::detail::temporary_allocator.1171", %"class.thrust::detail::temporary_allocator.1171"* %this1, i32 0, i32 0
  %ref = load %"struct.thrust::system::cpp::detail::tag"*, %"struct.thrust::system::cpp::detail::tag"** %m_system, align 8, !tbaa !7
  ret %"struct.thrust::system::cpp::detail::tag"* %ref
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEC2IS8_lEERKNS0_IT_T0_EE(%"struct.thrust::pair.1180"* %this, %"struct.thrust::pair.1181"* dereferenceable(16) %p) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.1180"*, align 8
  %p.addr = alloca %"struct.thrust::pair.1181"*, align 8
  store %"struct.thrust::pair.1180"* %this, %"struct.thrust::pair.1180"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.1181"* %p, %"struct.thrust::pair.1181"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.1180"*, %"struct.thrust::pair.1180"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1180", %"struct.thrust::pair.1180"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.1181"*, %"struct.thrust::pair.1181"** %p.addr, align 8
  %first2 = getelementptr inbounds %"struct.thrust::pair.1181", %"struct.thrust::pair.1181"* %0, i32 0, i32 0
  %1 = bitcast %"class.thrust::pointer.1177"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.1180", %"struct.thrust::pair.1180"* %this1, i32 0, i32 1
  %3 = load %"struct.thrust::pair.1181"*, %"struct.thrust::pair.1181"** %p.addr, align 8
  %second3 = getelementptr inbounds %"struct.thrust::pair.1181", %"struct.thrust::pair.1181"* %3, i32 0, i32 1
  %4 = load i64, i64* %second3, align 8, !tbaa !601
  store i64 %4, i64* %second, align 8, !tbaa !598
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.1171"* %this, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %this.addr = alloca %"class.thrust::detail::temporary_allocator.1171"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"class.thrust::detail::temporary_allocator.1171"* %this, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"class.thrust::detail::temporary_allocator.1171"*, %"class.thrust::detail::temporary_allocator.1171"** %this.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1171"* %this2)
  %0 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6detail27get_temporary_buffer_detail14down_cast_pairINS_4pairIiiEENS_6system3cpp6detail3tagENS3_INS_7pointerIS4_S8_NS_11use_defaultESA_EElEEEENS3_INS9_IT_T0_SA_SA_EENSF_15difference_typeEEET1_(%"struct.thrust::pair.82"* %p.coerce0, i64 %p.coerce1) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1181", align 8
  %p = alloca %"struct.thrust::pair.1181", align 8
  %ptr = alloca %"class.thrust::pointer.1177", align 8
  %0 = bitcast %"struct.thrust::pair.1181"* %p to { %"struct.thrust::pair.82"*, i64 }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %0, i32 0, i32 1
  store i64 %p.coerce1, i64* %2, align 8
  %3 = bitcast %"class.thrust::pointer.1177"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %first = getelementptr inbounds %"struct.thrust::pair.1181", %"struct.thrust::pair.1181"* %p, i32 0, i32 0
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.1177"* dereferenceable(8) %first)
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.1177"* %ptr, %"struct.thrust::pair.82"* %call)
  %second = getelementptr inbounds %"struct.thrust::pair.1181", %"struct.thrust::pair.1181"* %p, i32 0, i32 1
  call void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.1181"* %retval, %"class.thrust::pointer.1177"* dereferenceable(8) %ptr, i64* dereferenceable(8) %second)
  %4 = bitcast %"class.thrust::pointer.1177"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %4) #5
  %5 = bitcast %"struct.thrust::pair.1181"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %6 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %5, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust6system6detail7generic20get_temporary_bufferINS_4pairIiiEENS0_3cpp6detail3tagEEENS4_INS_7pointerIT_T0_NS_11use_defaultESC_EENSD_15difference_typeEEERNS_16execution_policyISB_EESE_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1181", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %n.addr = alloca i64, align 8
  %ptr = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.1177"* %ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6mallocINS_4pairIiiEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.1177"* %ptr)
  %tobool = icmp ne %"struct.thrust::pair.82"* %call2, null
  br i1 %tobool, label %if.end, label %if.then

if.then:                                          ; preds = %entry
  store i64 0, i64* %n.addr, align 8, !tbaa !13
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  %4 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %5 = bitcast %"class.thrust::pointer.1177"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %call5 = call { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.82"* %7, i64 %6)
  %8 = bitcast %"struct.thrust::pair.1181"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call5, 0
  store %"struct.thrust::pair.82"* %10, %"struct.thrust::pair.82"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair.82"*, i64 } %call5, 1
  store i64 %12, i64* %11, align 8
  %13 = bitcast %"class.thrust::pointer.1177"* %ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %13) #5
  %14 = bitcast %"struct.thrust::pair.1181"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %15 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %14, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %15
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.1177"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::pointer.1177"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  store %"class.thrust::pointer.1177"* %ptr, %"class.thrust::pointer.1177"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.82"* %3)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.1181"* %this, %"class.thrust::pointer.1177"* dereferenceable(8) %x, i64* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.1181"*, align 8
  %x.addr = alloca %"class.thrust::pointer.1177"*, align 8
  %y.addr = alloca i64*, align 8
  store %"struct.thrust::pair.1181"* %this, %"struct.thrust::pair.1181"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.1177"* %x, %"class.thrust::pointer.1177"** %x.addr, align 8, !tbaa !7
  store i64* %y, i64** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.1181"*, %"struct.thrust::pair.1181"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1181", %"struct.thrust::pair.1181"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %x.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %first to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.1181", %"struct.thrust::pair.1181"* %this1, i32 0, i32 1
  %3 = load i64*, i64** %y.addr, align 8
  %4 = load i64, i64* %3, align 8, !tbaa !13
  store i64 %4, i64* %second, align 8, !tbaa !601
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEE3getESA_(%"struct.thrust::pair.82"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.1177"* %ptr)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_E3getEv(%"class.thrust::pointer.1177"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.1177"*, align 8
  store %"class.thrust::pointer.1177"* %this, %"class.thrust::pointer.1177"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.1177"* %this1 to %"class.thrust::iterator_adaptor.1178"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.1178"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.1178"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1178"*, align 8
  store %"class.thrust::iterator_adaptor.1178"* %this, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1178"*, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.82"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6mallocINS_4pairIiiEENS_6system3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESA_EERKNS_6detail21execution_policy_baseIS9_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %raw_ptr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.1177", align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"struct.thrust::pair.82"** %raw_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIiiEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.88"* dereferenceable(1) %2, i64 %3)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %call4 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.1177"* dereferenceable(8) %ref.tmp)
  store %"struct.thrust::pair.82"* %call4, %"struct.thrust::pair.82"** %raw_ptr, align 8, !tbaa !1
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %raw_ptr, align 8, !tbaa !1
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.1177"* %retval, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"struct.thrust::pair.82"** %raw_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive5, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.82"* %6
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, i64 } @_ZN6thrust9make_pairINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EElEENS2_IT_T0_EESA_SB_(%"struct.thrust::pair.82"* %x.coerce, i64 %y) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1181", align 8
  %x = alloca %"class.thrust::pointer.1177", align 8
  %y.addr = alloca i64, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %x.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store i64 %y, i64* %y.addr, align 8, !tbaa !13
  call void @_ZN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEC2ERKS8_RKl(%"struct.thrust::pair.1181"* %retval, %"class.thrust::pointer.1177"* dereferenceable(8) %x, i64* dereferenceable(8) %y.addr)
  %0 = bitcast %"struct.thrust::pair.1181"* %retval to { %"struct.thrust::pair.82"*, i64 }*
  %1 = load { %"struct.thrust::pair.82"*, i64 }, { %"struct.thrust::pair.82"*, i64 }* %0, align 8
  ret { %"struct.thrust::pair.82"*, i64 } %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail7generic6mallocINS_4pairIiiEENS0_3cpp6detail3tagEEENS_7pointerIT_T0_NS_11use_defaultESC_EERNS_16execution_policyISB_EEm(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %n.addr = alloca i64, align 8
  %void_ptr = alloca %"class.thrust::pointer.447", align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.447"* %void_ptr to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %2 = bitcast %"struct.thrust::execution_policy.88"* %1 to %"struct.thrust::detail::execution_policy_base.85"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 8, %3
  %call = call i8* @_ZN6thrust6mallocINS_6system3cpp6detail3tagEEENS_7pointerIvT_NS_11use_defaultES7_EERKNS_6detail21execution_policy_baseIS6_EEm(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %2, i64 %mul)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.447", %"class.thrust::pointer.447"* %void_ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.448", %"class.thrust::iterator_adaptor.448"* %coerce.dive, i32 0, i32 0
  store i8* %call, i8** %coerce.dive1, align 8
  %call2 = call i8* @_ZNK6thrust7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES5_E3getEv(%"class.thrust::pointer.447"* %void_ptr)
  %4 = bitcast i8* %call2 to %"struct.thrust::pair.82"*
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.1177"* %retval, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"class.thrust::pointer.447"* %void_ptr to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  ret %"struct.thrust::pair.82"* %6
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust23return_temporary_bufferINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic23return_temporary_bufferINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS_16execution_policyIT_EET0_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %p.coerce) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %4)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust4freeINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EEEEvRKNS_6detail21execution_policy_baseIT_EET0_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %ptr.coerce) #0 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.1177", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1177"* %ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %4)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6system6detail10sequential4freeINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EEEEvRNS2_16execution_policyIT_EET0_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.82"* %ptr.coerce) #8 comdat {
entry:
  %ptr = alloca %"class.thrust::pointer.1177", align 8
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.1177"* dereferenceable(8) %ptr)
  %1 = bitcast %"struct.thrust::pair.82"* %call to i8*
  call void @free(i8* %1) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESD_SD_(%"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp10 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp11 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %0 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %1 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %2 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp10 to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive13 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive12, i32 0, i32 0
  %coerce.dive14 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive13, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive15, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive16, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp10, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive20, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %call = call i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE(%"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"* %5)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrust6system6detail7generic6detail8distanceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENS_15iterator_traitsIT_E15difference_typeESE_SE_NS_27random_access_traversal_tagE(%"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #8 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to %"class.thrust::iterator_facade.1161"*
  %2 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to %"class.thrust::iterator_facade.1161"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.1161"* dereferenceable(1) %1, %"class.thrust::iterator_facade.1161"* dereferenceable(1) %2)
  ret i64 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.1161"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1161"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1161"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1161"*, align 8
  store %"class.thrust::iterator_facade.1161"* %lhs, %"class.thrust::iterator_facade.1161"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1161"* %rhs, %"class.thrust::iterator_facade.1161"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1161"*, %"class.thrust::iterator_facade.1161"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1161"* %0 to %"class.thrust::detail::normal_iterator.1159"*
  %2 = load %"class.thrust::iterator_facade.1161"*, %"class.thrust::iterator_facade.1161"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1161"* %2 to %"class.thrust::detail::normal_iterator.1159"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES9_EENS2_20distance_from_resultIT_T0_E4typeERKSB_RKSC_(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.1159"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.1159"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.1159"* %f1, %"class.thrust::detail::normal_iterator.1159"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1159"* %f2, %"class.thrust::detail::normal_iterator.1159"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.1159"*, %"class.thrust::detail::normal_iterator.1159"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.1159"*, %"class.thrust::detail::normal_iterator.1159"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES9_EENT_15difference_typeERKSA_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.1159"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.1159"*, align 8
  store %"class.thrust::detail::normal_iterator.1159"* %f1, %"class.thrust::detail::normal_iterator.1159"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1159"* %f2, %"class.thrust::detail::normal_iterator.1159"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.1159"*, %"class.thrust::detail::normal_iterator.1159"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.1159"* %1 to %"class.thrust::iterator_adaptor.1160"*
  %3 = load %"class.thrust::detail::normal_iterator.1159"*, %"class.thrust::detail::normal_iterator.1159"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %3 to %"class.thrust::iterator_adaptor.1160"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1160"* %2, %"class.thrust::iterator_adaptor.1160"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11distance_toIS8_S7_S9_S9_S9_S9_S9_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1160"* %this, %"class.thrust::iterator_adaptor.1160"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1160"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.1160"*, align 8
  store %"class.thrust::iterator_adaptor.1160"* %this, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.1160"* %y, %"class.thrust::iterator_adaptor.1160"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1160"*, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.1160"*, %"class.thrust::iterator_adaptor.1160"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv(%"class.thrust::iterator_adaptor.1160"* %0)
  %1 = bitcast %"class.thrust::device_ptr.922"* %call to %"class.thrust::iterator_facade.925"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::device_ptr.922"* %m_iterator to %"class.thrust::iterator_facade.925"*
  %call2 = call i64 @_ZN6thrustmiINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.925"* dereferenceable(1) %1, %"class.thrust::iterator_facade.925"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElS5_S3_S9_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.925"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.925"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.925"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.925"*, align 8
  store %"class.thrust::iterator_facade.925"* %lhs, %"class.thrust::iterator_facade.925"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.925"* %rhs, %"class.thrust::iterator_facade.925"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.925"*, %"class.thrust::iterator_facade.925"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.925"* %0 to %"class.thrust::device_ptr.922"*
  %2 = load %"class.thrust::iterator_facade.925"*, %"class.thrust::iterator_facade.925"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.925"* %2 to %"class.thrust::device_ptr.922"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIiiEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::device_ptr.922"* dereferenceable(8) %1, %"class.thrust::device_ptr.922"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E4baseEv(%"class.thrust::iterator_adaptor.1160"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1160"*, align 8
  store %"class.thrust::iterator_adaptor.1160"* %this, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1160"*, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %this1, i32 0, i32 0
  ret %"class.thrust::device_ptr.922"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIiiEEEES6_EENS_6detail20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::device_ptr.922"* dereferenceable(8) %f1, %"class.thrust::device_ptr.922"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::device_ptr.922"* %f1, %"class.thrust::device_ptr.922"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.922"* %f2, %"class.thrust::device_ptr.922"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %f1.addr, align 8
  %1 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIiiEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.922"* dereferenceable(8) %0, %"class.thrust::device_ptr.922"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_10device_ptrIKNS_4pairIiiEEEES6_EENT_15difference_typeERKS7_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::device_ptr.922"* dereferenceable(8) %f1, %"class.thrust::device_ptr.922"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  %f2.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  store %"class.thrust::device_ptr.922"* %f1, %"class.thrust::device_ptr.922"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::device_ptr.922"* %f2, %"class.thrust::device_ptr.922"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.922"* %1 to %"class.thrust::iterator_adaptor.924"*
  %3 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::device_ptr.922"* %3 to %"class.thrust::iterator_adaptor.924"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.924"* %2, %"class.thrust::iterator_adaptor.924"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE11distance_toIS5_S6_S3_SA_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.924"* %this, %"class.thrust::iterator_adaptor.924"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.924"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.924"*, align 8
  store %"class.thrust::iterator_adaptor.924"* %this, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.924"* %y, %"class.thrust::iterator_adaptor.924"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.924"*, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.924"*, %"class.thrust::iterator_adaptor.924"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.924"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !519
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.82"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.82"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.924"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.924"*, align 8
  store %"class.thrust::iterator_adaptor.924"* %this, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.924"*, %"class.thrust::iterator_adaptor.924"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %this1, i32 0, i32 0
  ret %"struct.thrust::pair.82"** %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS2_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKS9_EEEENS_7pointerIS9_SC_NS_11use_defaultESL_EEEET2_RNS_16execution_policyIT_EERT0_T1_SU_SN_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp13 = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %1 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::pointer.1177"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp13, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive24, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %1, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive26, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive28, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive29, align 8
  ret %"struct.thrust::pair.82"* %11
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1177"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.1175"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1175"*, align 8
  store %"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1175"*, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %this1, i32 0, i32 0
  ret %"class.thrust::pointer.1177"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail23allocator_traits_detail20copy_construct_rangeINS_6system4cuda6detail3tagENS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS3_3cpp6detail3tagEEEEENS0_15normal_iteratorINS_10device_ptrIKSA_EEEENS_7pointerISA_SD_NS_11use_defaultESM_EEEENS0_10disable_ifIXsr34needs_copy_construct_via_allocatorIT0_NS0_15pointer_elementIT2_E4typeEEE5valueESR_E4typeERNS_16execution_policyIT_EERSP_T1_S11_SR_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %from_system, %"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %from_system.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp13 = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %from_system, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8, !tbaa !7
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %from_system.addr, align 8
  %1 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %1)
  %2 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::execution_policy.88"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::pointer.1177"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive14, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive17, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive22, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp13, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive24, i32 0, i32 0
  %11 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  %call26 = call %"struct.thrust::pair.82"* @_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %0, %"struct.thrust::execution_policy.88"* dereferenceable(1) %2, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10, %"struct.thrust::pair.82"* %11)
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive27, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call26, %"struct.thrust::pair.82"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive29, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive30, align 8
  ret %"struct.thrust::pair.82"* %12
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail15two_system_copyINS_6system4cuda6detail3tagENS2_3cpp6detail3tagENS0_15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S8_NS_11use_defaultESH_EEEET2_RKNS_16execution_policyIT_EERKNSK_IT0_EET1_ST_SJ_(%"struct.thrust::execution_policy.120"* dereferenceable(1) %system1, %"struct.thrust::execution_policy.88"* dereferenceable(1) %system2, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %system1.addr = alloca %"struct.thrust::execution_policy.120"*, align 8
  %system2.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %ref.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp16 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp17 = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.120"* %system1, %"struct.thrust::execution_policy.120"** %system1.addr, align 8, !tbaa !7
  store %"struct.thrust::execution_policy.88"* %system2, %"struct.thrust::execution_policy.88"** %system2.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.120"* %0 to %"struct.thrust::detail::execution_policy_base.121"*
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.121"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %1)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %call)
  %2 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call12 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %3 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2.addr, align 8
  %4 = bitcast %"struct.thrust::execution_policy.88"* %3 to %"struct.thrust::detail::execution_policy_base.85"*
  %call13 = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %4)
  %call14 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call13)
  %5 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call14 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call15 = call { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } @_ZN6thrust6system4cuda6detail13select_systemINS2_3tagENS0_3cpp6detail3tagEEENS2_12cross_systemIT_T0_EERKNS2_16execution_policyIS9_EERKNS6_16execution_policyISA_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %2, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %5)
  %6 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %7 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %6, i32 0, i32 0
  %8 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call15, 0
  store %"struct.thrust::execution_policy.120"* %8, %"struct.thrust::execution_policy.120"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %6, i32 0, i32 1
  %10 = extractvalue { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* } %call15, 1
  store %"struct.thrust::execution_policy.88"* %10, %"struct.thrust::execution_policy.88"** %9, align 8
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.229"*
  %12 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %13 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %14 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp16 to i8*
  %15 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %14, i8* %15, i64 8, i32 8, i1 false)
  %16 = bitcast %"class.thrust::pointer.1177"* %agg.tmp17 to i8*
  %17 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 8, i32 8, i1 false)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive21, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp16, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive26, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %coerce.dive28 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp17, i32 0, i32 0
  %coerce.dive29 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive28, i32 0, i32 0
  %20 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive29, align 8
  %call30 = call %"struct.thrust::pair.82"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %11, %"struct.thrust::pair.82"* %18, %"struct.thrust::pair.82"* %19, %"struct.thrust::pair.82"* %20)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call30, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive33, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive34, align 8
  ret %"struct.thrust::pair.82"* %21
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a) #8 comdat align 2 {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %0)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust4copyINS_6system4cuda6detail12cross_systemINS3_3tagENS1_3cpp6detail3tagEEENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISE_S8_NS_11use_defaultESJ_EEEET1_RKNSA_21execution_policy_baseIT_EET0_SR_SL_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.229"*, align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp15 = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.229"* %exec, %"struct.thrust::detail::execution_policy_base.229"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.229"*, %"struct.thrust::detail::execution_policy_base.229"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.229"* @_ZN6thrust6detail11strip_constINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERNS0_21execution_policy_baseIT_EERKSD_(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %0)
  %call12 = call dereferenceable(16) %"struct.thrust::system::cuda::detail::cross_system.227"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail12cross_systemINS4_3tagENS2_3cpp6detail3tagEEEEERT_RNS0_21execution_policy_baseISB_EE(%"struct.thrust::detail::execution_policy_base.229"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %2 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %call12 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13 to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp14 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::pointer.1177"* %agg.tmp15 to i8*
  %8 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %10 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %9, i32 0, i32 0
  %11 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %10, align 8
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %9, i32 0, i32 1
  %13 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %12, align 8
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive19, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive20, align 8
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp14, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive24, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp15, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive26, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %call28 = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %11, %"struct.thrust::execution_policy.88"* %13, %"struct.thrust::pair.82"* %14, %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"* %16)
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive29, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call28, %"struct.thrust::pair.82"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive31, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  ret %"struct.thrust::pair.82"* %17
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail4copyINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.1177", align 8
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %last, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1159"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.1177"* %agg.tmp14 to i8*
  %10 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive18, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive23, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive24, align 8
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp14, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive25, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %17, %"struct.thrust::pair.82"* %18)
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive27, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive29, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive30, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp15 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp16 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1159"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1159"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.1177"* %agg.tmp14 to i8*
  %10 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp12, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive20, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive22, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive25, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp14, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive27, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive28, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %17, %"struct.thrust::pair.82"* %18)
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive29, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive30, align 8
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive31, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %input_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %output_traversal = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp15 = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp16 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp17 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %agg.tmp18 = alloca %"struct.thrust::detail::integral_constant", align 1
  %0 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %1 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %0, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %2, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to i8*
  %4 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1159"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp14 to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1159"* %end to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.1177"* %agg.tmp15 to i8*
  %10 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %agg.tmp to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %12 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 0
  %13 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %11, i32 0, i32 1
  %15 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %14, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp13, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive22, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive26, i32 0, i32 0
  %coerce.dive28 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive27, i32 0, i32 0
  %17 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive28, align 8
  %coerce.dive29 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp15, i32 0, i32 0
  %coerce.dive30 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive29, i32 0, i32 0
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive30, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.120"* %13, %"struct.thrust::execution_policy.88"* %15, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %17, %"struct.thrust::pair.82"* %18)
  %coerce.dive31 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive32 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive31, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive32, align 8
  %coerce.dive33 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive34 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive33, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive34, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system4cuda6detail17copy_cross_systemINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEENS_7pointerISC_S7_NS_11use_defaultESH_EEEET2_NS2_12cross_systemIT_T0_EET1_SO_SJ_NS_27random_access_traversal_tagESP_NS8_17integral_constantIbLb1EEE(%"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %systems = alloca %"struct.thrust::system::cuda::detail::cross_system.227", align 8
  %begin = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %end = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %1 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %2 = alloca %"struct.thrust::detail::integral_constant", align 1
  %n = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %agg.tmp14 = alloca %"class.thrust::pointer.1177", align 8
  %3 = bitcast %"struct.thrust::system::cuda::detail::cross_system.227"* %systems to { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }*
  %4 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %3, i32 0, i32 0
  store %"struct.thrust::execution_policy.120"* %systems.coerce0, %"struct.thrust::execution_policy.120"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }, { %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.88"* }* %3, i32 0, i32 1
  store %"struct.thrust::execution_policy.88"* %systems.coerce1, %"struct.thrust::execution_policy.88"** %5, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %begin, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %begin.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %end, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %end.coerce, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  %6 = bitcast i64* %n to i8*
  call void @llvm.lifetime.start(i64 8, i8* %6) #5
  %7 = bitcast %"class.thrust::detail::normal_iterator.1159"* %end to %"class.thrust::iterator_facade.1161"*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1159"* %begin to %"class.thrust::iterator_facade.1161"*
  %call = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElS8_S5_SC_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.1161"* dereferenceable(1) %7, %"class.thrust::iterator_facade.1161"* dereferenceable(1) %8)
  store i64 %call, i64* %n, align 8, !tbaa !13
  %9 = bitcast %"class.thrust::detail::normal_iterator.1159"* %agg.tmp to i8*
  %10 = bitcast %"class.thrust::detail::normal_iterator.1159"* %begin to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = load i64, i64* %n, align 8, !tbaa !13
  %12 = bitcast %"class.thrust::pointer.1177"* %agg.tmp14 to i8*
  %13 = bitcast %"class.thrust::pointer.1177"* %result to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive18, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp14, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive20, i32 0, i32 0
  %15 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  call void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %14, i64 %11, %"struct.thrust::pair.82"* %15)
  %16 = bitcast %"class.thrust::pointer.1177"* %result to %"class.thrust::iterator_facade.1179"*
  %17 = load i64, i64* %n, align 8, !tbaa !13
  %call22 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.1179"* dereferenceable(1) %16, i64 %17)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive23, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call22, %"struct.thrust::pair.82"** %coerce.dive24, align 8
  %18 = bitcast i64* %n to i8*
  call void @llvm.lifetime.end(i64 8, i8* %18) #5
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive25, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  ret %"struct.thrust::pair.82"* %19
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system4cuda6detail14trivial_copy_nINS2_3tagENS0_3cpp6detail3tagENS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEElNS_7pointerISC_S7_NS_11use_defaultESH_EEEEvRNS2_12cross_systemIT_T0_EET1_T2_T3_(%"struct.thrust::system::cuda::detail::cross_system.227"* dereferenceable(16) %systems, %"struct.thrust::pair.82"* %first.coerce, i64 %n, %"struct.thrust::pair.82"* %result.coerce) #0 comdat {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %result = alloca %"class.thrust::pointer.1177", align 8
  %systems.addr = alloca %"struct.thrust::system::cuda::detail::cross_system.227"*, align 8
  %n.addr = alloca i64, align 8
  %dst = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce = alloca %"class.thrust::reference.1182", align 8
  %src = alloca i8*, align 8
  %ref.tmp14 = alloca %"class.thrust::device_ptr.922", align 8
  %coerce16 = alloca %"class.thrust::device_reference.1183", align 8
  %kind = alloca i32, align 4
  %s = alloca %struct.CUstream_st*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %result, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %result.coerce, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  store %"struct.thrust::system::cuda::detail::cross_system.227"* %systems, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = bitcast %"class.thrust::pointer.1177"* %result to %"class.thrust::iterator_facade.1179"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.1179"* %1)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %coerce, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive8, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  %call10 = call %"struct.thrust::pair.82"* @_ZNK6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.1182"* %coerce)
  %coerce.dive11 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %ref.tmp, i32 0, i32 0
  %coerce.dive12 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive11, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call10, %"struct.thrust::pair.82"** %coerce.dive12, align 8
  %call13 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.1177"* dereferenceable(8) %ref.tmp)
  %2 = bitcast %"struct.thrust::pair.82"* %call13 to i8*
  store i8* %2, i8** %dst, align 8, !tbaa !1
  %3 = bitcast i8** %src to i8*
  call void @llvm.lifetime.start(i64 8, i8* %3) #5
  %4 = bitcast %"class.thrust::detail::normal_iterator.1159"* %first to %"class.thrust::iterator_facade.1161"*
  %call15 = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv(%"class.thrust::iterator_facade.1161"* %4)
  %coerce.dive17 = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %coerce16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive18, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive20, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call15, %"struct.thrust::pair.82"** %coerce.dive21, align 8
  %5 = bitcast %"class.thrust::device_reference.1183"* %coerce16 to %"class.thrust::reference.1184"*
  %call22 = call %"struct.thrust::pair.82"* @_ZNK6thrust9referenceIKNS_4pairIiiEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv(%"class.thrust::reference.1184"* %5)
  %coerce.dive23 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %ref.tmp14, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive24, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call22, %"struct.thrust::pair.82"** %coerce.dive25, align 8
  %call26 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIiiEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_(%"class.thrust::device_ptr.922"* dereferenceable(8) %ref.tmp14)
  %6 = bitcast %"struct.thrust::pair.82"* %call26 to i8*
  store i8* %6, i8** %src, align 8, !tbaa !1
  %7 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.start(i64 4, i8* %7) #5
  %8 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system1 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %8, i32 0, i32 0
  %ref = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system1, align 8, !tbaa !7
  %9 = bitcast %"struct.thrust::execution_policy.120"* %ref to %"struct.thrust::detail::execution_policy_base.121"*
  %call27 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %9)
  %10 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call27 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %11 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system2 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %11, i32 0, i32 1
  %ref28 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system2, align 8, !tbaa !7
  %12 = bitcast %"struct.thrust::execution_policy.88"* %ref28 to %"struct.thrust::detail::execution_policy_base.85"*
  %call29 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %12)
  %13 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call29 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call30 = call i32 @_ZN6thrust6system4cuda6detail19trivial_copy_detail16cuda_memcpy_kindINS2_3tagENS0_3cpp6detail3tagEEE14cudaMemcpyKindRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %10, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %13)
  store i32 %call30, i32* %kind, align 4, !tbaa !97
  %14 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.start(i64 8, i8* %14) #5
  %15 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system131 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %15, i32 0, i32 0
  %ref32 = load %"struct.thrust::execution_policy.120"*, %"struct.thrust::execution_policy.120"** %system131, align 8, !tbaa !7
  %16 = bitcast %"struct.thrust::execution_policy.120"* %ref32 to %"struct.thrust::detail::execution_policy_base.121"*
  %call33 = call dereferenceable(1) %"struct.thrust::system::cuda::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system4cuda6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.121"* dereferenceable(1) %16)
  %17 = bitcast %"struct.thrust::system::cuda::detail::tag"* %call33 to %"struct.thrust::system::cuda::detail::execution_policy.119"*
  %18 = load %"struct.thrust::system::cuda::detail::cross_system.227"*, %"struct.thrust::system::cuda::detail::cross_system.227"** %systems.addr, align 8
  %system234 = getelementptr inbounds %"struct.thrust::system::cuda::detail::cross_system.227", %"struct.thrust::system::cuda::detail::cross_system.227"* %18, i32 0, i32 1
  %ref35 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %system234, align 8, !tbaa !7
  %19 = bitcast %"struct.thrust::execution_policy.88"* %ref35 to %"struct.thrust::detail::execution_policy_base.85"*
  %call36 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %19)
  %20 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call36 to %"struct.thrust::system::cpp::detail::execution_policy.86"*
  %call37 = call %struct.CUstream_st* @_ZN6thrust6system4cuda6detail19trivial_copy_detail18cuda_memcpy_streamINS2_3tagENS0_3cpp6detail3tagEEEP11CUstream_stRKNS2_16execution_policyIT_EERKNS7_16execution_policyIT0_EE(%"struct.thrust::system::cuda::detail::execution_policy.119"* dereferenceable(1) %17, %"struct.thrust::system::cpp::detail::execution_policy.86"* dereferenceable(1) %20)
  store %struct.CUstream_st* %call37, %struct.CUstream_st** %s, align 8, !tbaa !1
  %21 = load i8*, i8** %dst, align 8, !tbaa !1
  %22 = load i8*, i8** %src, align 8, !tbaa !1
  %23 = load i64, i64* %n.addr, align 8, !tbaa !13
  %mul = mul i64 %23, 8
  %24 = load i32, i32* %kind, align 4, !tbaa !97
  %25 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail19trivial_copy_detail23checked_cudaMemcpyAsyncEPvPKvm14cudaMemcpyKindP11CUstream_st(i8* %21, i8* %22, i64 %mul, i32 %24, %struct.CUstream_st* %25)
  %26 = load %struct.CUstream_st*, %struct.CUstream_st** %s, align 8, !tbaa !1
  call void @_ZN6thrust6system4cuda6detail11synchronizeEP11CUstream_stPKc(%struct.CUstream_st* %26, i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.30, i32 0, i32 0))
  %27 = bitcast %struct.CUstream_st** %s to i8*
  call void @llvm.lifetime.end(i64 8, i8* %27) #5
  %28 = bitcast i32* %kind to i8*
  call void @llvm.lifetime.end(i64 4, i8* %28) #5
  %29 = bitcast i8** %src to i8*
  call void @llvm.lifetime.end(i64 8, i8* %29) #5
  %30 = bitcast i8** %dst to i8*
  call void @llvm.lifetime.end(i64 8, i8* %30) #5
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrustplINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEET_RKNS_15iterator_facadeISD_T0_T1_T2_T3_T4_EENSD_15difference_typeE(%"class.thrust::iterator_facade.1179"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::pointer.1177", align 8
  store %"class.thrust::iterator_facade.1179"* %i, %"class.thrust::iterator_facade.1179"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::pointer.1177"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.1179"* %1 to %"class.thrust::pointer.1177"*
  %3 = bitcast %"class.thrust::pointer.1177"* %tmp to i8*
  %4 = bitcast %"class.thrust::pointer.1177"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::pointer.1177"* %tmp to %"class.thrust::iterator_facade.1179"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.1179"* %5, i64 %6)
  %7 = bitcast %"class.thrust::pointer.1177"* %retval to i8*
  %8 = bitcast %"class.thrust::pointer.1177"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::pointer.1177"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  ret %"struct.thrust::pair.82"* %10
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.1179"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.1182", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  store %"class.thrust::iterator_facade.1179"* %this, %"class.thrust::iterator_facade.1179"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.1179"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.1177"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.1182"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %this.addr = alloca %"class.thrust::reference.1182"*, align 8
  store %"class.thrust::reference.1182"* %this, %"class.thrust::reference.1182"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.1177"* %retval to i8*
  %1 = bitcast %"class.thrust::pointer.1177"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_10device_ptrIKNS_4pairIiiEEEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS8_(%"class.thrust::device_ptr.922"* dereferenceable(8) %ptr) #8 comdat {
entry:
  %ptr.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.922", align 8
  store %"class.thrust::device_ptr.922"* %ptr, %"class.thrust::device_ptr.922"** %ptr.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.922"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::device_ptr.922"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %agg.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive1, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIiiEEEEE3getES6_(%"struct.thrust::pair.82"* %3)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElEdeEv(%"class.thrust::iterator_facade.1161"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.1183", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.1161"*, align 8
  store %"class.thrust::iterator_facade.1161"* %this, %"class.thrust::iterator_facade.1161"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1161"*, %"class.thrust::iterator_facade.1161"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1159"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.1161"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENT_9referenceERKSA_(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust9referenceIKNS_4pairIiiEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEadEv(%"class.thrust::reference.1184"* %this) #1 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_ptr.922", align 8
  %this.addr = alloca %"class.thrust::reference.1184"*, align 8
  store %"class.thrust::reference.1184"* %this, %"class.thrust::reference.1184"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::reference.1184"*, %"class.thrust::reference.1184"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.922"* %retval to i8*
  %1 = bitcast %"class.thrust::device_ptr.922"* %m_ptr to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive2, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEENT_9referenceERKSB_(%"class.thrust::pointer.1177"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.1182", align 8
  %f.addr = alloca %"class.thrust::pointer.1177"*, align 8
  store %"class.thrust::pointer.1177"* %f, %"class.thrust::pointer.1177"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %f.addr, align 8
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.1177"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1177"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.1179"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  store %"class.thrust::iterator_facade.1179"* %this, %"class.thrust::iterator_facade.1179"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1179"* %this1 to %"class.thrust::pointer.1177"*
  ret %"class.thrust::pointer.1177"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_E11dereferenceEv(%"class.thrust::pointer.1177"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.1182", align 8
  %this.addr = alloca %"class.thrust::pointer.1177"*, align 8
  store %"class.thrust::pointer.1177"* %this, %"class.thrust::pointer.1177"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %this.addr, align 8
  call void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.1182"* %retval, %"class.thrust::pointer.1177"* dereferenceable(8) %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EC2ERKS9_(%"class.thrust::reference.1182"* %this, %"class.thrust::pointer.1177"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.1182"*, align 8
  %ptr.addr = alloca %"class.thrust::pointer.1177"*, align 8
  store %"class.thrust::reference.1182"* %this, %"class.thrust::reference.1182"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::pointer.1177"* %ptr, %"class.thrust::pointer.1177"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrIKNS_4pairIiiEEEEE3getES6_(%"struct.thrust::pair.82"* %ptr.coerce) #8 comdat align 2 {
entry:
  %ptr = alloca %"class.thrust::device_ptr.922", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %ptr, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %ptr.coerce, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %0 = bitcast %"class.thrust::device_ptr.922"* %ptr to %"class.thrust::pointer.923"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv(%"class.thrust::pointer.923"* %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE3getEv(%"class.thrust::pointer.923"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.923"*, align 8
  store %"class.thrust::pointer.923"* %this, %"class.thrust::pointer.923"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.923"*, %"class.thrust::pointer.923"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.923"* %this1 to %"class.thrust::iterator_adaptor.924"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE4baseEv(%"class.thrust::iterator_adaptor.924"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEEEENT_9referenceERKSA_(%"class.thrust::detail::normal_iterator.1159"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.1183", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.1159"*, align 8
  store %"class.thrust::detail::normal_iterator.1159"* %f, %"class.thrust::detail::normal_iterator.1159"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.1159"*, %"class.thrust::detail::normal_iterator.1159"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1159"* %0 to %"class.thrust::iterator_adaptor.1160"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv(%"class.thrust::iterator_adaptor.1160"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1159"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES5_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS6_EElE7derivedEv(%"class.thrust::iterator_facade.1161"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1161"*, align 8
  store %"class.thrust::iterator_facade.1161"* %this, %"class.thrust::iterator_facade.1161"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1161"*, %"class.thrust::iterator_facade.1161"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1161"* %this1 to %"class.thrust::detail::normal_iterator.1159"*
  ret %"class.thrust::detail::normal_iterator.1159"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_E11dereferenceEv(%"class.thrust::iterator_adaptor.1160"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.1183", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.1160"*, align 8
  store %"class.thrust::iterator_adaptor.1160"* %this, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1160"*, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::device_ptr.922"* %m_iterator to %"class.thrust::iterator_facade.925"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv(%"class.thrust::iterator_facade.925"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive9, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEdeEv(%"class.thrust::iterator_facade.925"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.1183", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.925"*, align 8
  store %"class.thrust::iterator_facade.925"* %this, %"class.thrust::iterator_facade.925"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.925"*, %"class.thrust::iterator_facade.925"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.925"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIiiEEEEEENT_9referenceERKS7_(%"class.thrust::device_ptr.922"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive5, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_10device_ptrIKNS_4pairIiiEEEEEENT_9referenceERKS7_(%"class.thrust::device_ptr.922"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.1183", align 8
  %f.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  store %"class.thrust::device_ptr.922"* %f, %"class.thrust::device_ptr.922"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %f.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.922"* %0 to %"class.thrust::pointer.923"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv(%"class.thrust::pointer.923"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive8, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::device_ptr.922"* @_ZNK6thrust15iterator_facadeINS_10device_ptrIKNS_4pairIiiEEEES3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElE7derivedEv(%"class.thrust::iterator_facade.925"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.925"*, align 8
  store %"class.thrust::iterator_facade.925"* %this, %"class.thrust::iterator_facade.925"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.925"*, %"class.thrust::iterator_facade.925"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.925"* %this1 to %"class.thrust::device_ptr.922"*
  ret %"class.thrust::device_ptr.922"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEE11dereferenceEv(%"class.thrust::pointer.923"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::device_reference.1183", align 8
  %this.addr = alloca %"class.thrust::pointer.923"*, align 8
  store %"class.thrust::pointer.923"* %this, %"class.thrust::pointer.923"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.923"*, %"class.thrust::pointer.923"** %this.addr, align 8
  %0 = bitcast %"class.thrust::pointer.923"* %this1 to %"class.thrust::device_ptr.922"*
  call void @_ZN6thrust16device_referenceIKNS_4pairIiiEEEC2ERKNS_10device_ptrIS3_EE(%"class.thrust::device_reference.1183"* %retval, %"class.thrust::device_ptr.922"* dereferenceable(8) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_reference.1183", %"class.thrust::device_reference.1183"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive4, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16device_referenceIKNS_4pairIiiEEEC2ERKNS_10device_ptrIS3_EE(%"class.thrust::device_reference.1183"* %this, %"class.thrust::device_ptr.922"* dereferenceable(8) %ptr) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_reference.1183"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  store %"class.thrust::device_reference.1183"* %this, %"class.thrust::device_reference.1183"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.922"* %ptr, %"class.thrust::device_ptr.922"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_reference.1183"*, %"class.thrust::device_reference.1183"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_reference.1183"* %this1 to %"class.thrust::reference.1184"*
  %1 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %ptr.addr, align 8
  call void @_ZN6thrust9referenceIKNS_4pairIiiEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_(%"class.thrust::reference.1184"* %0, %"class.thrust::device_ptr.922"* dereferenceable(8) %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust9referenceIKNS_4pairIiiEENS_10device_ptrIS3_EENS_16device_referenceIS3_EEEC2ERKS5_(%"class.thrust::reference.1184"* %this, %"class.thrust::device_ptr.922"* dereferenceable(8) %ptr) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::reference.1184"*, align 8
  %ptr.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  store %"class.thrust::reference.1184"* %this, %"class.thrust::reference.1184"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.922"* %ptr, %"class.thrust::device_ptr.922"** %ptr.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::reference.1184"*, %"class.thrust::reference.1184"** %this.addr, align 8
  %m_ptr = getelementptr inbounds %"class.thrust::reference.1184", %"class.thrust::reference.1184"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %ptr.addr, align 8
  %1 = bitcast %"class.thrust::device_ptr.922"* %m_ptr to i8*
  %2 = bitcast %"class.thrust::device_ptr.922"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.1179"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.1179"* %this, %"class.thrust::iterator_facade.1179"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.1179"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.1177"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.1179"* %this1)
  ret %"class.thrust::pointer.1177"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_NSB_15difference_typeE(%"class.thrust::pointer.1177"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.1177"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::pointer.1177"* %f, %"class.thrust::pointer.1177"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %0 to %"class.thrust::iterator_adaptor.1178"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.1178"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.1179"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  store %"class.thrust::iterator_facade.1179"* %this, %"class.thrust::iterator_facade.1179"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1179"* %this1 to %"class.thrust::pointer.1177"*
  ret %"class.thrust::pointer.1177"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7advanceEl(%"class.thrust::iterator_adaptor.1178"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1178"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.1178"* %this, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.1178"*, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !596
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %1, i64 %0
  store %"struct.thrust::pair.82"* %add.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !596
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail23allocator_traits_detail6systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEEENS0_9enable_ifIXsr17has_member_systemIT_EE5valueERNS0_16allocator_systemISE_E4typeEE4typeERSE_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a) #1 comdat {
entry:
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %1 = bitcast %"struct.thrust::detail::no_throw_allocator.1170"* %0 to %"class.thrust::detail::temporary_allocator.1171"*
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE6systemEv(%"class.thrust::detail::temporary_allocator.1171"* %1)
  ret %"struct.thrust::system::cpp::detail::tag"* %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE10deallocateEv(%"class.thrust::detail::contiguous_storage.1169"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %ref.tmp = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %agg.tmp6 = alloca %"class.thrust::pointer.1177", align 8
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1169"* %this1)
  %cmp = icmp ugt i64 %call, 0
  br i1 %cmp, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 0
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.1174"* %m_begin to %"class.thrust::iterator_adaptor.1175"*
  %call2 = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.1175"* %0)
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %call2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %call3 = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1169"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  %3 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.82"* %3, i64 %call3)
  %m_begin5 = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 1
  call void @_ZN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EC2IS2_EEPT_(%"class.thrust::pointer.1177"* %agg.tmp6, %"struct.thrust::pair.82"* null)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive7, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  call void @_ZN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEC2ESA_(%"class.thrust::detail::normal_iterator.1174"* %ref.tmp, %"struct.thrust::pair.82"* %4)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1174"* %m_begin5 to i8*
  %6 = bitcast %"class.thrust::detail::normal_iterator.1174"* %ref.tmp to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %5, i8* %6, i64 8, i32 8, i1 false)
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 2
  store i64 0, i64* %m_size, align 8, !tbaa !592
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1169"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %m_size = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 2
  %0 = load i64, i64* %m_size, align 8, !tbaa !592
  ret i64 %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEm(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #8 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZZN6thrust6detail16allocator_traitsINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE10deallocateERSB_NS_7pointerIS5_S9_NS_11use_defaultESF_EEmEN19workaround_warnings10deallocateESD_SG_m(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat align 2 {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.1170"* %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEE10deallocateENS_7pointerIS4_S8_NS_11use_defaultESC_EEm(%"struct.thrust::detail::no_throw_allocator.1170"* %this, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %this.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %this, %"struct.thrust::detail::no_throw_allocator.1170"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this2 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %this.addr, align 8
  %0 = bitcast %"struct.thrust::detail::no_throw_allocator.1170"* %this2 to %"class.thrust::detail::temporary_allocator.1171"*
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  invoke void @_ZN6thrust6detail19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEE10deallocateENS_7pointerIS3_S7_NS_11use_defaultESA_EEm(%"class.thrust::detail::temporary_allocator.1171"* %0, %"struct.thrust::pair.82"* %4, i64 %3)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  br label %try.cont

lpad:                                             ; preds = %entry
  %5 = landingpad { i8*, i32 }
          catch i8* null
  %6 = extractvalue { i8*, i32 } %5, 0
  store i8* %6, i8** %exn.slot, align 8
  %7 = extractvalue { i8*, i32 } %5, 1
  store i32 %7, i32* %ehselector.slot, align 4
  br label %catch

catch:                                            ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  %8 = call i8* @__cxa_begin_catch(i8* %exn) #5
  call void @__cxa_end_catch()
  br label %try.cont

try.cont:                                         ; preds = %catch, %invoke.cont
  ret void
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEEEEbRKNS5_21execution_policy_baseIT_EET0_SN_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %system, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %system.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %system, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.1174"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp13, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp14, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %call27 = call zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  ret i1 %call27
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEEEEbRNS_16execution_policyIT_EET0_SO_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %agg.tmp14 = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.1174"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp13, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %call = call zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust5equalINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEEbRKNS5_21execution_policy_baseIT_EET0_SP_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %system, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %binary_pred = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %system.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %agg.tmp15 = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %system, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %system.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.1174"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive18, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive26, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %call28 = call zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  ret i1 %call28
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6system6detail7generic5equalINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEEbRNS_16execution_policyIT_EET0_SQ_T1_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %first1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %binary_pred = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.1186", align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp12 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %agg.tmp14 = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %1 = bitcast %"struct.thrust::execution_policy.88"* %0 to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp12 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.1174"* %agg.tmp13 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive15 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp, i32 0, i32 0
  %coerce.dive16 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive15, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive17, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive18, align 8
  %coerce.dive19 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp12, i32 0, i32 0
  %coerce.dive20 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive19, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive21, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive22, align 8
  %coerce.dive23 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp13, i32 0, i32 0
  %coerce.dive24 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive23, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive25, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive26, align 8
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  %11 = bitcast %"struct.thrust::pair.1186"* %ref.tmp to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %13, %"struct.thrust::pair.82"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"** %14, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1186", %"struct.thrust::pair.1186"* %ref.tmp, i32 0, i32 0
  %16 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first to %"class.thrust::iterator_facade.1166"*
  %17 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %last1 to %"class.thrust::iterator_facade.1166"*
  %call27 = call zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.1166"* dereferenceable(1) %16, %"class.thrust::iterator_facade.1166"* dereferenceable(1) %17)
  ret i1 %call27
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.1166"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1166"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1166"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1166"*, align 8
  store %"class.thrust::iterator_facade.1166"* %lhs, %"class.thrust::iterator_facade.1166"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1166"* %rhs, %"class.thrust::iterator_facade.1166"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1166"*, %"class.thrust::iterator_facade.1166"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1166"* %0 to %"class.thrust::detail::tagged_iterator.1164"*
  %2 = load %"class.thrust::iterator_facade.1166"*, %"class.thrust::iterator_facade.1166"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1166"* %2 to %"class.thrust::detail::tagged_iterator.1164"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %1, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust8mismatchINS_6system3cpp6detail3tagENS_6detail15tagged_iteratorINS5_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS7_INS_7pointerIS9_S4_NS_11use_defaultESF_EEEENS5_8equal_toIS9_EEEENS8_IT0_T1_EERKNS5_21execution_policy_baseIT_EESK_SK_SL_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1186", align 8
  %first1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %pred = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp13 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp14 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %agg.tmp15 = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call12 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call12 to %"struct.thrust::execution_policy.88"*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp13 to i8*
  %5 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %last1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  %6 = bitcast %"class.thrust::detail::normal_iterator.1174"* %agg.tmp14 to i8*
  %7 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %6, i8* %7, i64 8, i32 8, i1 false)
  %coerce.dive16 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp, i32 0, i32 0
  %coerce.dive17 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive16, i32 0, i32 0
  %coerce.dive18 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive17, i32 0, i32 0
  %coerce.dive19 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive18, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive19, align 8
  %coerce.dive20 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp13, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive20, i32 0, i32 0
  %coerce.dive22 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive21, i32 0, i32 0
  %coerce.dive23 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive22, i32 0, i32 0
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive23, align 8
  %coerce.dive24 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp14, i32 0, i32 0
  %coerce.dive25 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive24, i32 0, i32 0
  %coerce.dive26 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive25, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive26, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive27, align 8
  %call28 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %9, %"struct.thrust::pair.82"* %10)
  %11 = bitcast %"struct.thrust::pair.1186"* %retval to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call28, 0
  store %"struct.thrust::pair.82"* %13, %"struct.thrust::pair.82"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call28, 1
  store %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"** %14, align 8
  %16 = bitcast %"struct.thrust::pair.1186"* %retval to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %17 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %16, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %17
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEESE_EEbRKT_RKT0_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %f1, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  %f2.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  store %"class.thrust::detail::tagged_iterator.1164"* %f1, %"class.thrust::detail::tagged_iterator.1164"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::tagged_iterator.1164"* %f2, %"class.thrust::detail::tagged_iterator.1164"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %0 to %"class.thrust::iterator_adaptor.1165"*
  %2 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %2 to %"class.thrust::iterator_adaptor.1165"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1165"* %1, %"class.thrust::iterator_adaptor.1165"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE5equalISD_S8_S5_SC_SE_SF_lEEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1165"* %this, %"class.thrust::iterator_adaptor.1165"* dereferenceable(8) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1165"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.1165"*, align 8
  store %"class.thrust::iterator_adaptor.1165"* %this, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.1165"* %x, %"class.thrust::iterator_adaptor.1165"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1165"*, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.919"* %m_iterator to %"class.thrust::iterator_facade.921"*
  %1 = load %"class.thrust::iterator_adaptor.1165"*, %"class.thrust::iterator_adaptor.1165"** %x.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv(%"class.thrust::iterator_adaptor.1165"* %1)
  %2 = bitcast %"class.thrust::detail::normal_iterator.919"* %call to %"class.thrust::iterator_facade.921"*
  %call2 = call zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.921"* dereferenceable(1) %0, %"class.thrust::iterator_facade.921"* dereferenceable(1) %2)
  ret i1 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lS7_S4_SB_SC_SD_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSE_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.921"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.921"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  store %"class.thrust::iterator_facade.921"* %lhs, %"class.thrust::iterator_facade.921"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.921"* %rhs, %"class.thrust::iterator_facade.921"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.921"* %0 to %"class.thrust::detail::normal_iterator.919"*
  %2 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.921"* %2 to %"class.thrust::detail::normal_iterator.919"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE4baseEv(%"class.thrust::iterator_adaptor.1165"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1165"*, align 8
  store %"class.thrust::iterator_adaptor.1165"* %this, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1165"*, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.919"* %m_iterator
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES8_EEbRKT_RKT0_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  store %"class.thrust::detail::normal_iterator.919"* %f1, %"class.thrust::detail::normal_iterator.919"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.919"* %f2, %"class.thrust::detail::normal_iterator.919"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f1.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %0 to %"class.thrust::iterator_adaptor.920"*
  %2 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f2.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.919"* %2 to %"class.thrust::iterator_adaptor.920"*
  %call = call zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.920"* %1, %"class.thrust::iterator_adaptor.920"* dereferenceable(8) %3)
  ret i1 %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E5equalIS7_S6_S8_S8_S8_S8_S8_EEbRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"* dereferenceable(8) %x) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  %x.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  store %"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.920"* %x, %"class.thrust::iterator_adaptor.920"** %x.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  %1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %x.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.920"* %1)
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %cmp = icmp eq %"struct.thrust::pair.82"* %0, %2
  ret i1 %cmp
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6system6detail7generic8mismatchINS0_3cpp6detail3tagENS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES6_EENS9_INS_7pointerISB_S6_NS_11use_defaultESH_EEEENS7_8equal_toISB_EEEENSA_IT0_T1_EERNS_16execution_policyIT_EESM_SM_SN_T2_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"* %first2.coerce) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1186", align 8
  %first1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %last1 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %first2 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %pred = alloca %"struct.thrust::detail::equal_to.1185", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %zipped_first = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp = alloca %"class.thrust::tuple.1189", align 8
  %zipped_last = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp16 = alloca %"class.thrust::tuple.1189", align 8
  %result = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp22 = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp23 = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp24 = alloca %"struct.thrust::detail::tuple_binary_predicate.1192", align 1
  %agg.tmp28 = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %agg.tmp31 = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %first1, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first1.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %last1, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last1.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  %coerce.dive8 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first2, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first2.coerce, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %0 = bitcast %"class.thrust::zip_iterator.1187"* %zipped_first to i8*
  call void @llvm.lifetime.start(i64 16, i8* %0) #5
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %first1, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %first2)
  %coerce.dive12 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %agg.tmp, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive12 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %3, %"struct.thrust::pair.82"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %6 = bitcast %"class.thrust::tuple.1189"* %agg.tmp to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %7 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %6, i32 0, i32 0
  %8 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %7, align 8
  %9 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %6, i32 0, i32 1
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %9, align 8
  %call13 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"* %10)
  %coerce.dive14 = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %zipped_first, i32 0, i32 0
  %coerce.dive15 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive14, i32 0, i32 0
  %11 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive15 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call13, 0
  store %"struct.thrust::pair.82"* %13, %"struct.thrust::pair.82"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call13, 1
  store %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"** %14, align 8
  %16 = bitcast %"class.thrust::zip_iterator.1187"* %zipped_last to i8*
  call void @llvm.lifetime.start(i64 16, i8* %16) #5
  %call17 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %last1, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %first2)
  %coerce.dive18 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %agg.tmp16, i32 0, i32 0
  %17 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive18 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %18 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %17, i32 0, i32 0
  %19 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call17, 0
  store %"struct.thrust::pair.82"* %19, %"struct.thrust::pair.82"** %18, align 8
  %20 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %17, i32 0, i32 1
  %21 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call17, 1
  store %"struct.thrust::pair.82"* %21, %"struct.thrust::pair.82"** %20, align 8
  %22 = bitcast %"class.thrust::tuple.1189"* %agg.tmp16 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %23 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %22, i32 0, i32 0
  %24 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %23, align 8
  %25 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %22, i32 0, i32 1
  %26 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %25, align 8
  %call19 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair.82"* %24, %"struct.thrust::pair.82"* %26)
  %coerce.dive20 = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %zipped_last, i32 0, i32 0
  %coerce.dive21 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive20, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive21 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %28 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %27, i32 0, i32 0
  %29 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call19, 0
  store %"struct.thrust::pair.82"* %29, %"struct.thrust::pair.82"** %28, align 8
  %30 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %27, i32 0, i32 1
  %31 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call19, 1
  store %"struct.thrust::pair.82"* %31, %"struct.thrust::pair.82"** %30, align 8
  %32 = bitcast %"class.thrust::zip_iterator.1187"* %result to i8*
  call void @llvm.lifetime.start(i64 16, i8* %32) #5
  %33 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %34 = bitcast %"struct.thrust::execution_policy.88"* %33 to %"struct.thrust::detail::execution_policy_base.85"*
  %35 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp22 to i8*
  %36 = bitcast %"class.thrust::zip_iterator.1187"* %zipped_first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %35, i8* %36, i64 16, i32 8, i1 false)
  %37 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp23 to i8*
  %38 = bitcast %"class.thrust::zip_iterator.1187"* %zipped_last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %37, i8* %38, i64 16, i32 8, i1 false)
  call void @_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEC2ERKS5_(%"struct.thrust::detail::tuple_binary_predicate.1192"* %agg.tmp24, %"struct.thrust::detail::equal_to.1185"* dereferenceable(1) %pred)
  %39 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp22 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %40 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %39, i32 0, i32 0
  %41 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %40, align 8
  %42 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %39, i32 0, i32 1
  %43 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %42, align 8
  %44 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp23 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %45 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %44, i32 0, i32 0
  %46 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %45, align 8
  %47 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %44, i32 0, i32 1
  %48 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %47, align 8
  %call25 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %34, %"struct.thrust::pair.82"* %41, %"struct.thrust::pair.82"* %43, %"struct.thrust::pair.82"* %46, %"struct.thrust::pair.82"* %48)
  %coerce.dive26 = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %result, i32 0, i32 0
  %coerce.dive27 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive26, i32 0, i32 0
  %49 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive27 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %50 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %49, i32 0, i32 0
  %51 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call25, 0
  store %"struct.thrust::pair.82"* %51, %"struct.thrust::pair.82"** %50, align 8
  %52 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %49, i32 0, i32 1
  %53 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call25, 1
  store %"struct.thrust::pair.82"* %53, %"struct.thrust::pair.82"** %52, align 8
  %call29 = call dereferenceable(16) %"class.thrust::tuple.1189"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1187"* %result)
  %54 = bitcast %"class.thrust::tuple.1189"* %call29 to %"struct.thrust::detail::cons.1190"*
  %call30 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %54)
  %55 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp28 to i8*
  %56 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %call30 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %55, i8* %56, i64 8, i32 8, i1 false)
  %call32 = call dereferenceable(16) %"class.thrust::tuple.1189"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1187"* %result)
  %57 = bitcast %"class.thrust::tuple.1189"* %call32 to %"struct.thrust::detail::cons.1190"*
  %call33 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %57)
  %58 = bitcast %"class.thrust::detail::normal_iterator.1174"* %agg.tmp31 to i8*
  %59 = bitcast %"class.thrust::detail::normal_iterator.1174"* %call33 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %58, i8* %59, i64 8, i32 8, i1 false)
  %coerce.dive34 = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %agg.tmp28, i32 0, i32 0
  %coerce.dive35 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive34, i32 0, i32 0
  %coerce.dive36 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive35, i32 0, i32 0
  %coerce.dive37 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive36, i32 0, i32 0
  %60 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive37, align 8
  %coerce.dive38 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %agg.tmp31, i32 0, i32 0
  %coerce.dive39 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive38, i32 0, i32 0
  %coerce.dive40 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive39, i32 0, i32 0
  %coerce.dive41 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive40, i32 0, i32 0
  %61 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive41, align 8
  %call42 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_(%"struct.thrust::pair.82"* %60, %"struct.thrust::pair.82"* %61)
  %62 = bitcast %"struct.thrust::pair.1186"* %retval to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %63 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %62, i32 0, i32 0
  %64 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call42, 0
  store %"struct.thrust::pair.82"* %64, %"struct.thrust::pair.82"** %63, align 8
  %65 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %62, i32 0, i32 1
  %66 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call42, 1
  store %"struct.thrust::pair.82"* %66, %"struct.thrust::pair.82"** %65, align 8
  %67 = bitcast %"class.thrust::zip_iterator.1187"* %result to i8*
  call void @llvm.lifetime.end(i64 16, i8* %67) #5
  %68 = bitcast %"class.thrust::zip_iterator.1187"* %zipped_last to i8*
  call void @llvm.lifetime.end(i64 16, i8* %68) #5
  %69 = bitcast %"class.thrust::zip_iterator.1187"* %zipped_first to i8*
  call void @llvm.lifetime.end(i64 16, i8* %69) #5
  %70 = bitcast %"struct.thrust::pair.1186"* %retval to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %71 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %70, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %71
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust17make_zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEENS_12zip_iteratorIT_EESM_(%"struct.thrust::pair.82"* %t.coerce0, %"struct.thrust::pair.82"* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.1187", align 8
  %t = alloca %"class.thrust::tuple.1189", align 8
  %agg.tmp = alloca %"class.thrust::tuple.1189", align 8
  %0 = bitcast %"class.thrust::tuple.1189"* %t to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %t.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.82"* %t.coerce1, %"struct.thrust::pair.82"** %2, align 8
  %3 = bitcast %"class.thrust::tuple.1189"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::tuple.1189"* %t to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 16, i32 8, i1 false)
  %5 = bitcast %"class.thrust::tuple.1189"* %agg.tmp to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %5, i32 0, i32 0
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %6, align 8
  %8 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %5, i32 0, i32 1
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %8, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.1187"* %retval, %"struct.thrust::pair.82"* %7, %"struct.thrust::pair.82"* %9)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive1 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %11 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %10, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %11
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust10make_tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS1_17make_tuple_mapperIT_T0_NS_9null_typeESL_SL_SL_SL_SL_SL_SL_E4typeERKSJ_RKSK_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %t1) #8 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.1189", align 8
  %t0.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  store %"class.thrust::detail::tagged_iterator.1164"* %t0, %"class.thrust::detail::tagged_iterator.1164"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1174"* %t1, %"class.thrust::detail::normal_iterator.1174"** %t1.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %t0.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %t1.addr, align 8
  call void @_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_(%"class.thrust::tuple.1189"* %retval, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %retval, i32 0, i32 0
  %2 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %3 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %2, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %3
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust11find_if_notINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEET0_RKNS7_21execution_policy_baseIT_EESR_SR_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.1187", align 8
  %first = alloca %"class.thrust::zip_iterator.1187", align 8
  %last = alloca %"class.thrust::zip_iterator.1187", align 8
  %pred = alloca %"struct.thrust::detail::tuple_binary_predicate.1192", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::tuple_binary_predicate.1192", align 1
  %0 = bitcast %"class.thrust::zip_iterator.1187"* %first to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.1187"* %last to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair.82"* %last.coerce1, %"struct.thrust::pair.82"** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::execution_policy.88"*
  %8 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.1187"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.1187"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::detail::tuple_binary_predicate.1192"* %agg.tmp3 to i8*
  %13 = bitcast %"struct.thrust::detail::tuple_binary_predicate.1192"* %pred to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 1, i32 1, i1 false), !tbaa.struct !41
  %14 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %15 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %14, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %15, align 8
  %17 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %14, i32 0, i32 1
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %17, align 8
  %19 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp2 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %20 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %19, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %20, align 8
  %22 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %19, i32 0, i32 1
  %23 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %22, align 8
  %call4 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIiiEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %7, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %18, %"struct.thrust::pair.82"* %21, %"struct.thrust::pair.82"* %23)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive, i32 0, i32 0
  %24 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive5 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %25 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %24, i32 0, i32 0
  %26 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call4, 0
  store %"struct.thrust::pair.82"* %26, %"struct.thrust::pair.82"** %25, align 8
  %27 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %24, i32 0, i32 1
  %28 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call4, 1
  store %"struct.thrust::pair.82"* %28, %"struct.thrust::pair.82"** %27, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive6, i32 0, i32 0
  %29 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive7 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %30 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %29, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %30
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEC2ERKS5_(%"struct.thrust::detail::tuple_binary_predicate.1192"* %this, %"struct.thrust::detail::equal_to.1185"* dereferenceable(1) %p) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.1192"*, align 8
  %p.addr = alloca %"struct.thrust::detail::equal_to.1185"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate.1192"* %this, %"struct.thrust::detail::tuple_binary_predicate.1192"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::equal_to.1185"* %p, %"struct.thrust::detail::equal_to.1185"** %p.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::tuple_binary_predicate.1192"*, %"struct.thrust::detail::tuple_binary_predicate.1192"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::tuple_binary_predicate.1192", %"struct.thrust::detail::tuple_binary_predicate.1192"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::equal_to.1185"*, %"struct.thrust::detail::equal_to.1185"** %p.addr, align 8
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust9make_pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEEEENS4_IT_T0_EESI_SJ_(%"struct.thrust::pair.82"* %x.coerce, %"struct.thrust::pair.82"* %y.coerce) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::pair.1186", align 8
  %x = alloca %"class.thrust::detail::tagged_iterator.1164", align 8
  %y = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tagged_iterator.1164", %"class.thrust::detail::tagged_iterator.1164"* %x, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.919", %"class.thrust::detail::normal_iterator.919"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %x.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %y, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %y.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  call void @_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_(%"struct.thrust::pair.1186"* %retval, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %x, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %y)
  %0 = bitcast %"struct.thrust::pair.1186"* %retval to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1190"*, align 8
  store %"struct.thrust::detail::cons.1190"* %c, %"struct.thrust::detail::cons.1190"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1190"*, %"struct.thrust::detail::cons.1190"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %0)
  ret %"class.thrust::detail::tagged_iterator.1164"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::tuple.1189"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1187"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  store %"class.thrust::zip_iterator.1187"* %this, %"class.thrust::zip_iterator.1187"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %this1, i32 0, i32 0
  ret %"class.thrust::tuple.1189"* %m_iterator_tuple
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1190"*, align 8
  store %"struct.thrust::detail::cons.1190"* %c, %"struct.thrust::detail::cons.1190"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1190"*, %"struct.thrust::detail::cons.1190"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %0)
  ret %"class.thrust::detail::normal_iterator.1174"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEEC2ESK_(%"class.thrust::zip_iterator.1187"* %this, %"struct.thrust::pair.82"* %iterator_tuple.coerce0, %"struct.thrust::pair.82"* %iterator_tuple.coerce1) unnamed_addr #9 comdat align 2 {
entry:
  %iterator_tuple = alloca %"class.thrust::tuple.1189", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  %0 = bitcast %"class.thrust::tuple.1189"* %iterator_tuple to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %iterator_tuple.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.82"* %iterator_tuple.coerce1, %"struct.thrust::pair.82"** %2, align 8
  store %"class.thrust::zip_iterator.1187"* %this, %"class.thrust::zip_iterator.1187"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %this.addr, align 8
  %3 = bitcast %"class.thrust::zip_iterator.1187"* %this1 to %"class.thrust::iterator_facade.1188"*
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %this1, i32 0, i32 0
  %4 = bitcast %"class.thrust::tuple.1189"* %m_iterator_tuple to i8*
  %5 = bitcast %"class.thrust::tuple.1189"* %iterator_tuple to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EC2ERKSD_RKSH_(%"class.thrust::tuple.1189"* %this, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %t0, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1189"*, align 8
  %t0.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1189"* %this, %"class.thrust::tuple.1189"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.1164"* %t0, %"class.thrust::detail::tagged_iterator.1164"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1174"* %t1, %"class.thrust::detail::normal_iterator.1174"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1189"*, %"class.thrust::tuple.1189"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1189"* %this1 to %"struct.thrust::detail::cons.1190"*
  %1 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %t0.addr, align 8
  %2 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1190"* %0, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEEC2IKSD_KSH_KSI_SO_SO_SO_SO_SO_SO_SO_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1190"* %this, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %t1, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1190"*, align 8
  %t1.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  %t2.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1190"* %this, %"struct.thrust::detail::cons.1190"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.1164"* %t1, %"class.thrust::detail::tagged_iterator.1164"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1174"* %t2, %"class.thrust::detail::normal_iterator.1174"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1190"*, %"struct.thrust::detail::cons.1190"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1190", %"struct.thrust::detail::cons.1190"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %t1.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %head to i8*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1190", %"struct.thrust::detail::cons.1190"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %t2.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %10 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %11 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.1191"* %tail, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %10, %"struct.thrust::null_type"* dereferenceable(1) %11, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.1191"* %this, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1191"*, align 8
  %t1.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.1191"* %this, %"struct.thrust::detail::cons.1191"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.1174"* %t1, %"class.thrust::detail::normal_iterator.1174"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.1191"*, %"struct.thrust::detail::cons.1191"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1191", %"struct.thrust::detail::cons.1191"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::detail::normal_iterator.1174"* %head to i8*
  %11 = bitcast %"class.thrust::detail::normal_iterator.1174"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6system6detail7generic11find_if_notINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIiiEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEET0_RNS_16execution_policyIT_EEST_ST_T1_(%"struct.thrust::execution_policy.88"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.1187", align 8
  %first = alloca %"class.thrust::zip_iterator.1187", align 8
  %last = alloca %"class.thrust::zip_iterator.1187", align 8
  %pred = alloca %"struct.thrust::detail::tuple_binary_predicate.1192", align 1
  %exec.addr = alloca %"struct.thrust::execution_policy.88"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp1 = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::unary_negate.1193", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::unary_negate.1193", align 1
  %0 = bitcast %"class.thrust::zip_iterator.1187"* %first to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.1187"* %last to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair.82"* %last.coerce1, %"struct.thrust::pair.82"** %5, align 8
  store %"struct.thrust::execution_policy.88"* %exec, %"struct.thrust::execution_policy.88"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::execution_policy.88"*, %"struct.thrust::execution_policy.88"** %exec.addr, align 8
  %7 = bitcast %"struct.thrust::execution_policy.88"* %6 to %"struct.thrust::detail::execution_policy_base.85"*
  %8 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.1187"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp1 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.1187"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  call void @_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEENS0_12unary_negateIT_EERKS9_(%"struct.thrust::detail::tuple_binary_predicate.1192"* dereferenceable(1) %pred)
  %12 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %13 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %12, i32 0, i32 0
  %14 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %13, align 8
  %15 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %12, i32 0, i32 1
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %15, align 8
  %17 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp1 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %18 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %17, i32 0, i32 0
  %19 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %18, align 8
  %20 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %17, i32 0, i32 1
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %20, align 8
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %7, %"struct.thrust::pair.82"* %14, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %19, %"struct.thrust::pair.82"* %21)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive3 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %23 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %22, i32 0, i32 0
  %24 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %24, %"struct.thrust::pair.82"** %23, align 8
  %25 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %22, i32 0, i32 1
  %26 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %26, %"struct.thrust::pair.82"** %25, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive4, i32 0, i32 0
  %27 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive5 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %28 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %27, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %28
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust7find_ifINS_6system3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS7_15normal_iteratorIPKNS_4pairIiiEEEES4_EENS9_INS_7pointerISB_S4_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS7_12unary_negateINS7_22tuple_binary_predicateINS7_8equal_toISB_EEEEEEEET0_RKNS7_21execution_policy_baseIT_EEST_ST_T1_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.1187", align 8
  %first = alloca %"class.thrust::zip_iterator.1187", align 8
  %last = alloca %"class.thrust::zip_iterator.1187", align 8
  %pred = alloca %"struct.thrust::detail::unary_negate.1193", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %agg.tmp = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp2 = alloca %"class.thrust::zip_iterator.1187", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::unary_negate.1193", align 1
  %0 = bitcast %"class.thrust::zip_iterator.1187"* %first to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"** %2, align 8
  %3 = bitcast %"class.thrust::zip_iterator.1187"* %last to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %4, align 8
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 1
  store %"struct.thrust::pair.82"* %last.coerce1, %"struct.thrust::pair.82"** %5, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  %6 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %6)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %7 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %8 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp to i8*
  %9 = bitcast %"class.thrust::zip_iterator.1187"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %8, i8* %9, i64 16, i32 8, i1 false)
  %10 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp2 to i8*
  %11 = bitcast %"class.thrust::zip_iterator.1187"* %last to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 16, i32 8, i1 false)
  %12 = bitcast %"struct.thrust::detail::unary_negate.1193"* %agg.tmp3 to i8*
  %13 = bitcast %"struct.thrust::detail::unary_negate.1193"* %pred to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %12, i8* %13, i64 1, i32 1, i1 false), !tbaa.struct !41
  %14 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %15 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %14, i32 0, i32 0
  %16 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %15, align 8
  %17 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %14, i32 0, i32 1
  %18 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %17, align 8
  %19 = bitcast %"class.thrust::zip_iterator.1187"* %agg.tmp2 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %20 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %19, i32 0, i32 0
  %21 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %20, align 8
  %22 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %19, i32 0, i32 1
  %23 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %22, align 8
  %call4 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIiiEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %7, %"struct.thrust::pair.82"* %16, %"struct.thrust::pair.82"* %18, %"struct.thrust::pair.82"* %21, %"struct.thrust::pair.82"* %23)
  %coerce.dive = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive, i32 0, i32 0
  %24 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive5 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %25 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %24, i32 0, i32 0
  %26 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call4, 0
  store %"struct.thrust::pair.82"* %26, %"struct.thrust::pair.82"** %25, align 8
  %27 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %24, i32 0, i32 1
  %28 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call4, 1
  store %"struct.thrust::pair.82"* %28, %"struct.thrust::pair.82"** %27, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive6, i32 0, i32 0
  %29 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive7 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %30 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %29, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %30
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail4not1INS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEENS0_12unary_negateIT_EERKS9_(%"struct.thrust::detail::tuple_binary_predicate.1192"* dereferenceable(1) %pred) #0 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::unary_negate.1193", align 1
  %pred.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.1192"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate.1192"* %pred, %"struct.thrust::detail::tuple_binary_predicate.1192"** %pred.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::tuple_binary_predicate.1192"*, %"struct.thrust::detail::tuple_binary_predicate.1192"** %pred.addr, align 8
  call void @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEC2ERKS7_(%"struct.thrust::detail::unary_negate.1193"* %retval, %"struct.thrust::detail::tuple_binary_predicate.1192"* dereferenceable(1) %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6system6detail10sequential7find_ifINS0_3cpp6detail3tagENS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS9_15normal_iteratorIPKNS_4pairIiiEEEES6_EENSB_INS_7pointerISD_S6_NS_11use_defaultESJ_EEEENS_9null_typeESM_SM_SM_SM_SM_SM_SM_EEEENS9_12unary_negateINS9_22tuple_binary_predicateINS9_8equal_toISD_EEEEEEEET0_RNS2_16execution_policyIT_EESV_SV_T1_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"* %last.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::zip_iterator.1187", align 8
  %first = alloca %"class.thrust::zip_iterator.1187", align 8
  %last = alloca %"class.thrust::zip_iterator.1187", align 8
  %pred = alloca %"struct.thrust::detail::unary_negate.1193", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %wrapped_pred = alloca %"struct.thrust::detail::wrapped_function.1194", align 1
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.1195", align 8
  %cleanup.dest.slot = alloca i32
  %1 = bitcast %"class.thrust::zip_iterator.1187"* %first to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce0, %"struct.thrust::pair.82"** %2, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 1
  store %"struct.thrust::pair.82"* %first.coerce1, %"struct.thrust::pair.82"** %3, align 8
  %4 = bitcast %"class.thrust::zip_iterator.1187"* %last to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce0, %"struct.thrust::pair.82"** %5, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %4, i32 0, i32 1
  store %"struct.thrust::pair.82"* %last.coerce1, %"struct.thrust::pair.82"** %6, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  %7 = bitcast %"struct.thrust::detail::wrapped_function.1194"* %wrapped_pred to i8*
  call void @llvm.lifetime.start(i64 1, i8* %7) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEEbEC2ERKS9_(%"struct.thrust::detail::wrapped_function.1194"* %wrapped_pred, %"struct.thrust::detail::unary_negate.1193"* dereferenceable(1) %pred)
  br label %while.cond

while.cond:                                       ; preds = %if.end, %entry
  %8 = bitcast %"class.thrust::zip_iterator.1187"* %first to %"class.thrust::iterator_facade.1188"*
  %9 = bitcast %"class.thrust::zip_iterator.1187"* %last to %"class.thrust::iterator_facade.1188"*
  %call = call zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.1188"* dereferenceable(1) %8, %"class.thrust::iterator_facade.1188"* dereferenceable(1) %9)
  br i1 %call, label %while.body, label %while.end

while.body:                                       ; preds = %while.cond
  %10 = bitcast %"class.thrust::zip_iterator.1187"* %first to %"class.thrust::iterator_facade.1188"*
  %call1 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv(%"class.thrust::iterator_facade.1188"* %10)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1195", %"class.thrust::detail::tuple_of_iterator_references.1195"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %coerce.dive, i32 0, i32 0
  %11 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive2 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %12 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 0
  %13 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call1, 0
  store %"struct.thrust::pair.82"* %13, %"struct.thrust::pair.82"** %12, align 8
  %14 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %11, i32 0, i32 1
  %15 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call1, 1
  store %"struct.thrust::pair.82"* %15, %"struct.thrust::pair.82"** %14, align 8
  %call3 = call zeroext i1 @_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_(%"struct.thrust::detail::wrapped_function.1194"* %wrapped_pred, %"class.thrust::detail::tuple_of_iterator_references.1195"* dereferenceable(16) %ref.tmp)
  br i1 %call3, label %if.then, label %if.end

if.then:                                          ; preds = %while.body
  %16 = bitcast %"class.thrust::zip_iterator.1187"* %retval to i8*
  %17 = bitcast %"class.thrust::zip_iterator.1187"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %16, i8* %17, i64 16, i32 8, i1 false)
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

if.end:                                           ; preds = %while.body
  %18 = bitcast %"class.thrust::zip_iterator.1187"* %first to %"class.thrust::iterator_facade.1188"*
  %call4 = call dereferenceable(16) %"class.thrust::zip_iterator.1187"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv(%"class.thrust::iterator_facade.1188"* %18)
  br label %while.cond

while.end:                                        ; preds = %while.cond
  %19 = bitcast %"class.thrust::zip_iterator.1187"* %retval to i8*
  %20 = bitcast %"class.thrust::zip_iterator.1187"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %19, i8* %20, i64 16, i32 8, i1 false)
  store i32 1, i32* %cleanup.dest.slot, align 4
  br label %cleanup

cleanup:                                          ; preds = %while.end, %if.then
  %21 = bitcast %"struct.thrust::detail::wrapped_function.1194"* %wrapped_pred to i8*
  call void @llvm.lifetime.end(i64 1, i8* %21) #5
  %coerce.dive5 = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.1189", %"class.thrust::tuple.1189"* %coerce.dive5, i32 0, i32 0
  %22 = bitcast %"struct.thrust::detail::cons.1190"* %coerce.dive6 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %23 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %22, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %23
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEEbEC2ERKS9_(%"struct.thrust::detail::wrapped_function.1194"* %this, %"struct.thrust::detail::unary_negate.1193"* dereferenceable(1) %f) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.1194"*, align 8
  %f.addr = alloca %"struct.thrust::detail::unary_negate.1193"*, align 8
  store %"struct.thrust::detail::wrapped_function.1194"* %this, %"struct.thrust::detail::wrapped_function.1194"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::unary_negate.1193"* %f, %"struct.thrust::detail::unary_negate.1193"** %f.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.1194"*, %"struct.thrust::detail::wrapped_function.1194"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.1194", %"struct.thrust::detail::wrapped_function.1194"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::unary_negate.1193"*, %"struct.thrust::detail::unary_negate.1193"** %f.addr, align 8
  %1 = bitcast %"struct.thrust::detail::unary_negate.1193"* %m_f to i8*
  %2 = bitcast %"struct.thrust::detail::unary_negate.1193"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZN6thrustneINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElSM_SN_SE_SO_ST_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSU_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.1188"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1188"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1188"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1188"*, align 8
  store %"class.thrust::iterator_facade.1188"* %lhs, %"class.thrust::iterator_facade.1188"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1188"* %rhs, %"class.thrust::iterator_facade.1188"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1188"*, %"class.thrust::iterator_facade.1188"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1188"* %0 to %"class.thrust::zip_iterator.1187"*
  %2 = load %"class.thrust::iterator_facade.1188"*, %"class.thrust::iterator_facade.1188"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1188"* %2 to %"class.thrust::zip_iterator.1187"*
  %call = call zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_(%"class.thrust::zip_iterator.1187"* dereferenceable(16) %1, %"class.thrust::zip_iterator.1187"* dereferenceable(16) %3)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail16wrapped_functionINS0_12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEEbEclINS0_28tuple_of_iterator_referencesIRKS6_NS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESL_EESL_EENS_9null_typeESO_SO_SO_SO_SO_SO_SO_EEEEbRKT_(%"struct.thrust::detail::wrapped_function.1194"* %this, %"class.thrust::detail::tuple_of_iterator_references.1195"* dereferenceable(16) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.1194"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.1195"*, align 8
  %ref.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.1199", align 8
  %agg.tmp = alloca %"class.thrust::detail::tuple_of_iterator_references.1195", align 8
  store %"struct.thrust::detail::wrapped_function.1194"* %this, %"struct.thrust::detail::wrapped_function.1194"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.1195"* %x, %"class.thrust::detail::tuple_of_iterator_references.1195"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.1194"*, %"struct.thrust::detail::wrapped_function.1194"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.1194", %"struct.thrust::detail::wrapped_function.1194"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.1195"*, %"class.thrust::detail::tuple_of_iterator_references.1195"** %x.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1195"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1195"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 16, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1195"* %agg.tmp to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %4, align 8
  %6 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %3, i32 0, i32 1
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %6, align 8
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust18raw_reference_castIRKNS_4pairIiiEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_(%"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"* %7)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1199", %"class.thrust::detail::tuple_of_iterator_references.1199"* %ref.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.1200", %"class.thrust::tuple.1200"* %coerce.dive, i32 0, i32 0
  %8 = bitcast %"struct.thrust::detail::cons.1201"* %coerce.dive2 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %9 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %8, i32 0, i32 0
  %10 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %10, %"struct.thrust::pair.82"** %9, align 8
  %11 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %8, i32 0, i32 1
  %12 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %12, %"struct.thrust::pair.82"** %11, align 8
  %call3 = call zeroext i1 @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_(%"struct.thrust::detail::unary_negate.1193"* %m_f, %"class.thrust::detail::tuple_of_iterator_references.1199"* dereferenceable(16) %ref.tmp)
  ret i1 %call3
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEdeEv(%"class.thrust::iterator_facade.1188"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.1195", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.1188"*, align 8
  store %"class.thrust::iterator_facade.1188"* %this, %"class.thrust::iterator_facade.1188"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1188"*, %"class.thrust::iterator_facade.1188"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.1187"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1188"* %this1)
  %call2 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_(%"class.thrust::zip_iterator.1187"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1195", %"class.thrust::detail::tuple_of_iterator_references.1195"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %coerce.dive, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive3 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  %2 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call2, 0
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %1, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  %4 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call2, 1
  store %"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"** %3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1195", %"class.thrust::detail::tuple_of_iterator_references.1195"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %coerce.dive4, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive5 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %6 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %5, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %6
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.1187"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElEppEv(%"class.thrust::iterator_facade.1188"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1188"*, align 8
  store %"class.thrust::iterator_facade.1188"* %this, %"class.thrust::iterator_facade.1188"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1188"*, %"class.thrust::iterator_facade.1188"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::zip_iterator.1187"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1188"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_(%"class.thrust::zip_iterator.1187"* dereferenceable(16) %call)
  %call2 = call dereferenceable(16) %"class.thrust::zip_iterator.1187"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1188"* %this1)
  ret %"class.thrust::zip_iterator.1187"* %call2
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust20iterator_core_access5equalINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEESN_EEbRKT_RKT0_(%"class.thrust::zip_iterator.1187"* dereferenceable(16) %f1, %"class.thrust::zip_iterator.1187"* dereferenceable(16) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  %f2.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  store %"class.thrust::zip_iterator.1187"* %f1, %"class.thrust::zip_iterator.1187"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::zip_iterator.1187"* %f2, %"class.thrust::zip_iterator.1187"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %f1.addr, align 8
  %1 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %f2.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.1187"* %0, %"class.thrust::zip_iterator.1187"* dereferenceable(16) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE5equalISK_EEbRKNS0_IT_EE(%"class.thrust::zip_iterator.1187"* %this, %"class.thrust::zip_iterator.1187"* dereferenceable(16) %other) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  %other.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  store %"class.thrust::zip_iterator.1187"* %this, %"class.thrust::zip_iterator.1187"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::zip_iterator.1187"* %other, %"class.thrust::zip_iterator.1187"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.1189"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1187"* %this1)
  %0 = bitcast %"class.thrust::tuple.1189"* %call to %"struct.thrust::detail::cons.1190"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %0)
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %call2 to %"class.thrust::iterator_facade.1166"*
  %2 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %other.addr, align 8
  %call3 = call dereferenceable(16) %"class.thrust::tuple.1189"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1187"* %2)
  %3 = bitcast %"class.thrust::tuple.1189"* %call3 to %"struct.thrust::detail::cons.1190"*
  %call4 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %3)
  %4 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %call4 to %"class.thrust::iterator_facade.1166"*
  %call5 = call zeroext i1 @_ZN6thrusteqINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lSD_S5_SC_SE_SF_lEEbRKNS_15iterator_facadeIT_T0_T1_T2_T3_T4_EERKNSG_IT5_T6_T7_T8_T9_T10_EE(%"class.thrust::iterator_facade.1166"* dereferenceable(1) %1, %"class.thrust::iterator_facade.1166"* dereferenceable(1) %4)
  ret i1 %call5
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEclINS0_28tuple_of_iterator_referencesIRKS5_RS5_NS_9null_typeESE_SE_SE_SE_SE_SE_SE_EEEEbRKT_(%"struct.thrust::detail::unary_negate.1193"* %this, %"class.thrust::detail::tuple_of_iterator_references.1199"* dereferenceable(16) %x) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::unary_negate.1193"*, align 8
  %x.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.1199"*, align 8
  store %"struct.thrust::detail::unary_negate.1193"* %this, %"struct.thrust::detail::unary_negate.1193"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.1199"* %x, %"class.thrust::detail::tuple_of_iterator_references.1199"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::unary_negate.1193"*, %"struct.thrust::detail::unary_negate.1193"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::unary_negate.1193", %"struct.thrust::detail::unary_negate.1193"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.1199"*, %"class.thrust::detail::tuple_of_iterator_references.1199"** %x.addr, align 8
  %call = call zeroext i1 @_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_(%"struct.thrust::detail::tuple_binary_predicate.1192"* %pred, %"class.thrust::detail::tuple_of_iterator_references.1199"* dereferenceable(16) %0)
  %lnot = xor i1 %call, true
  ret i1 %lnot
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust18raw_reference_castIRKNS_4pairIiiEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EENS_6detail21enable_if_unwrappableINSF_28tuple_of_iterator_referencesIT_T0_T1_T2_T3_T4_T5_T6_T7_T8_EENSF_13raw_referenceISS_E4typeEE4typeESS_(%"struct.thrust::pair.82"* %t.coerce0, %"struct.thrust::pair.82"* %t.coerce1) #0 comdat {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.1199", align 8
  %t = alloca %"class.thrust::detail::tuple_of_iterator_references.1195", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %ref.tmp = alloca %"class.thrust::tuple.1200", align 8
  %agg.tmp = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1195"* %t to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  store %"struct.thrust::pair.82"* %t.coerce0, %"struct.thrust::pair.82"** %1, align 8
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  store %"struct.thrust::pair.82"* %t.coerce1, %"struct.thrust::pair.82"** %2, align 8
  %3 = bitcast %"struct.thrust::detail::raw_reference_caster"* %f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %3) #5
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_(%"class.thrust::detail::tuple_of_iterator_references.1195"* dereferenceable(16) %t)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.1200", %"class.thrust::tuple.1200"* %ref.tmp, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.1201"* %coerce.dive to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %5 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %4, i32 0, i32 0
  %6 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %6, %"struct.thrust::pair.82"** %5, align 8
  %7 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %4, i32 0, i32 1
  %8 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %8, %"struct.thrust::pair.82"** %7, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIiiEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE(%"class.thrust::detail::tuple_of_iterator_references.1199"* %retval, %"class.thrust::tuple.1200"* dereferenceable(16) %ref.tmp)
  %9 = bitcast %"struct.thrust::detail::raw_reference_caster"* %f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %9) #5
  %coerce.dive1 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1199", %"class.thrust::detail::tuple_of_iterator_references.1199"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::tuple.1200", %"class.thrust::tuple.1200"* %coerce.dive1, i32 0, i32 0
  %10 = bitcast %"struct.thrust::detail::cons.1201"* %coerce.dive2 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %11 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %10, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %11
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEclINS0_28tuple_of_iterator_referencesIRKS4_RS4_NS_9null_typeESC_SC_SC_SC_SC_SC_SC_EEEEbRKT_(%"struct.thrust::detail::tuple_binary_predicate.1192"* %this, %"class.thrust::detail::tuple_of_iterator_references.1199"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.1192"*, align 8
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.1199"*, align 8
  store %"struct.thrust::detail::tuple_binary_predicate.1192"* %this, %"struct.thrust::detail::tuple_binary_predicate.1192"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tuple_of_iterator_references.1199"* %t, %"class.thrust::detail::tuple_of_iterator_references.1199"** %t.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::tuple_binary_predicate.1192"*, %"struct.thrust::detail::tuple_binary_predicate.1192"** %this.addr, align 8
  %pred = getelementptr inbounds %"struct.thrust::detail::tuple_binary_predicate.1192", %"struct.thrust::detail::tuple_binary_predicate.1192"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.1199"*, %"class.thrust::detail::tuple_of_iterator_references.1199"** %t.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1199"* %0 to %"struct.thrust::detail::cons.1201"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi0ERKNS_4pairIiiEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %1)
  %2 = load %"class.thrust::detail::tuple_of_iterator_references.1199"*, %"class.thrust::detail::tuple_of_iterator_references.1199"** %t.addr, align 8
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1199"* %2 to %"struct.thrust::detail::cons.1201"*
  %call2 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi1ERKNS_4pairIiiEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %3)
  %call3 = call zeroext i1 @_ZNK6thrust6detail8equal_toINS_4pairIiiEEEclIS3_EEbRKS3_RKT_(%"struct.thrust::detail::equal_to.1185"* %pred, %"struct.thrust::pair.82"* dereferenceable(8) %call, %"struct.thrust::pair.82"* dereferenceable(8) %call2)
  ret i1 %call3
}

; Function Attrs: uwtable
define linkonce_odr zeroext i1 @_ZNK6thrust6detail8equal_toINS_4pairIiiEEEclIS3_EEbRKS3_RKT_(%"struct.thrust::detail::equal_to.1185"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %lhs, %"struct.thrust::pair.82"* dereferenceable(8) %rhs) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::equal_to.1185"*, align 8
  %lhs.addr = alloca %"struct.thrust::pair.82"*, align 8
  %rhs.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::detail::equal_to.1185"* %this, %"struct.thrust::detail::equal_to.1185"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %lhs, %"struct.thrust::pair.82"** %lhs.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %rhs, %"struct.thrust::pair.82"** %rhs.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::equal_to.1185"*, %"struct.thrust::detail::equal_to.1185"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %lhs.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %rhs.addr, align 8
  %call = call zeroext i1 @_ZN6thrusteqIiiEEbRKNS_4pairIT_T0_EES6_(%"struct.thrust::pair.82"* dereferenceable(8) %0, %"struct.thrust::pair.82"* dereferenceable(8) %1)
  ret i1 %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi0ERKNS_4pairIiiEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1201"*, align 8
  store %"struct.thrust::detail::cons.1201"* %c, %"struct.thrust::detail::cons.1201"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1201"*, %"struct.thrust::detail::cons.1201"** %c.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIiiEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi1ERKNS_4pairIiiEENS_6detail4consIRS2_NS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSE_(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1201"*, align 8
  store %"struct.thrust::detail::cons.1201"* %c, %"struct.thrust::detail::cons.1201"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1201"*, %"struct.thrust::detail::cons.1201"** %c.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIiiEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr zeroext i1 @_ZN6thrusteqIiiEEbRKNS_4pairIT_T0_EES6_(%"struct.thrust::pair.82"* dereferenceable(8) %x, %"struct.thrust::pair.82"* dereferenceable(8) %y) #9 comdat {
entry:
  %x.addr = alloca %"struct.thrust::pair.82"*, align 8
  %y.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair.82"* %x, %"struct.thrust::pair.82"** %x.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %y, %"struct.thrust::pair.82"** %y.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 0, i32 0
  %1 = load i32, i32* %first, align 4, !tbaa !24
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %y.addr, align 8
  %first1 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %2, i32 0, i32 0
  %3 = load i32, i32* %first1, align 4, !tbaa !24
  %cmp = icmp eq i32 %1, %3
  br i1 %cmp, label %land.rhs, label %land.end

land.rhs:                                         ; preds = %entry
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  %second = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %4, i32 0, i32 1
  %5 = load i32, i32* %second, align 4, !tbaa !28
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %y.addr, align 8
  %second2 = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %6, i32 0, i32 1
  %7 = load i32, i32* %second2, align 4, !tbaa !28
  %cmp3 = icmp eq i32 %5, %7
  br label %land.end

land.end:                                         ; preds = %land.rhs, %entry
  %8 = phi i1 [ false, %entry ], [ %cmp3, %land.rhs ]
  ret i1 %8
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIiiEES7_NS0_4consIRS5_NS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1201"*, align 8
  store %"struct.thrust::detail::cons.1201"* %t, %"struct.thrust::detail::cons.1201"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1201"*, %"struct.thrust::detail::cons.1201"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1201", %"struct.thrust::detail::cons.1201"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.82"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi1EE3getIRNS_4pairIiiEERKS5_NS0_4consIS6_NS_9null_typeEEEEET_RKNS9_IT0_T1_EE(%"struct.thrust::detail::cons.1201"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1201"*, align 8
  store %"struct.thrust::detail::cons.1201"* %t, %"struct.thrust::detail::cons.1201"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1201"*, %"struct.thrust::detail::cons.1201"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1201", %"struct.thrust::detail::cons.1201"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIiiEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.906"* dereferenceable(8) %tail)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRNS_4pairIiiEES6_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.906"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.906"*, align 8
  store %"struct.thrust::detail::cons.906"* %t, %"struct.thrust::detail::cons.906"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.906"*, %"struct.thrust::detail::cons.906"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.906", %"struct.thrust::detail::cons.906"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.82"* %ref
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20raw_reference_detail26raw_reference_tuple_helperENS0_28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS6_NS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EENS0_20raw_reference_casterEEENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISM_EE5valueEE4typeERKSM_T1_(%"class.thrust::detail::tuple_of_iterator_references.1195"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.1200", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.1195"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  store %"class.thrust::detail::tuple_of_iterator_references.1195"* %t, %"class.thrust::detail::tuple_of_iterator_references.1195"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.1195"*, %"class.thrust::detail::tuple_of_iterator_references.1195"** %t.addr, align 8
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_(%"class.thrust::detail::tuple_of_iterator_references.1195"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.1200", %"class.thrust::tuple.1200"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.1201"* %coerce.dive to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %3, %"struct.thrust::pair.82"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.1200", %"class.thrust::tuple.1200"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.1201"* %coerce.dive1 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %7 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %6, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIiiEERS3_NS_9null_typeES7_S7_S7_S7_S7_S7_S7_EC2ERKNS_5tupleIS5_S6_S7_S7_S7_S7_S7_S7_S7_S7_EE(%"class.thrust::detail::tuple_of_iterator_references.1199"* %this, %"class.thrust::tuple.1200"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.1199"*, align 8
  %other.addr = alloca %"class.thrust::tuple.1200"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.1199"* %this, %"class.thrust::detail::tuple_of_iterator_references.1199"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1200"* %other, %"class.thrust::tuple.1200"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.1199"*, %"class.thrust::detail::tuple_of_iterator_references.1199"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1199"* %this1 to %"class.thrust::tuple.1200"*
  %1 = load %"class.thrust::tuple.1200"*, %"class.thrust::tuple.1200"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.1200"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.1200"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail23tuple_transform_functorINS0_28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS4_NS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EENS0_20raw_reference_detail26raw_reference_tuple_helperENS0_20raw_reference_casterELj2EE27do_it_on_the_host_or_deviceERKSH_SK_(%"class.thrust::detail::tuple_of_iterator_references.1195"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.1200", align 8
  %f = alloca %"struct.thrust::detail::raw_reference_caster", align 1
  %t.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.1195"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.1195"* %t, %"class.thrust::detail::tuple_of_iterator_references.1195"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tuple_of_iterator_references.1195"*, %"class.thrust::detail::tuple_of_iterator_references.1195"** %t.addr, align 8
  %1 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1195"* %0 to %"struct.thrust::detail::cons.1197"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi0ERKNS_4pairIiiEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %1)
  %call1 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20raw_reference_casterclINS_4pairIiiEEEENS0_13raw_referenceIKT_E4typeERS7_(%"struct.thrust::detail::raw_reference_caster"* %f, %"struct.thrust::pair.82"* dereferenceable(8) %call)
  %2 = load %"class.thrust::detail::tuple_of_iterator_references.1195"*, %"class.thrust::detail::tuple_of_iterator_references.1195"** %t.addr, align 8
  %3 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1195"* %2 to %"struct.thrust::detail::cons.1197"*
  %call2 = call dereferenceable(8) %"class.thrust::reference.1182"* @_ZN6thrust3getILi1ERKNS_4pairIiiEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %3)
  %call3 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIiiEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_(%"struct.thrust::detail::raw_reference_caster"* %f, %"class.thrust::reference.1182"* dereferenceable(8) %call2)
  call void @_ZN6thrust5tupleIRKNS_4pairIiiEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_(%"class.thrust::tuple.1200"* %retval, %"struct.thrust::pair.82"* dereferenceable(8) %call1, %"struct.thrust::pair.82"* dereferenceable(8) %call3)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.1200", %"class.thrust::tuple.1200"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.1201"* %coerce.dive to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %5 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %4, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20raw_reference_casterclINS_4pairIiiEEEENS0_13raw_referenceIKT_E4typeERS7_(%"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %ref) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::raw_reference_caster"*, align 8
  %ref.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %ref, %"struct.thrust::pair.82"** %ref.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::raw_reference_caster"*, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %ref.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_4pairIiiEEEENS_6detail13raw_referenceIKT_E4typeERS6_(%"struct.thrust::pair.82"* dereferenceable(8) %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust3getILi0ERKNS_4pairIiiEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1197"*, align 8
  store %"struct.thrust::detail::cons.1197"* %c, %"struct.thrust::detail::cons.1197"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1197"*, %"struct.thrust::detail::cons.1197"** %c.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIiiEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20raw_reference_casterclINS_9referenceINS_4pairIiiEENS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EEEENS0_13raw_referenceIKT_E4typeERSG_(%"struct.thrust::detail::raw_reference_caster"* %this, %"class.thrust::reference.1182"* dereferenceable(8) %ref) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::raw_reference_caster"*, align 8
  %ref.addr = alloca %"class.thrust::reference.1182"*, align 8
  store %"struct.thrust::detail::raw_reference_caster"* %this, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.1182"* %ref, %"class.thrust::reference.1182"** %ref.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::raw_reference_caster"*, %"struct.thrust::detail::raw_reference_caster"** %this.addr, align 8
  %0 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %ref.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIiiEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.1182"* dereferenceable(8) %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.1182"* @_ZN6thrust3getILi1ERKNS_4pairIiiEENS_6detail4consINS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESD_EESD_EENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENS6_IT0_T1_EEE4typeEE10const_typeERKSM_(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %c) #8 comdat {
entry:
  %c.addr = alloca %"struct.thrust::detail::cons.1197"*, align 8
  store %"struct.thrust::detail::cons.1197"* %c, %"struct.thrust::detail::cons.1197"** %c.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1197"*, %"struct.thrust::detail::cons.1197"** %c.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::reference.1182"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIiiEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %0)
  ret %"class.thrust::reference.1182"* %call
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRKNS_4pairIiiEERS2_NS_9null_typeES6_S6_S6_S6_S6_S6_S6_EC2ES4_S5_(%"class.thrust::tuple.1200"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %t0, %"struct.thrust::pair.82"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1200"*, align 8
  %t0.addr = alloca %"struct.thrust::pair.82"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1200"* %this, %"class.thrust::tuple.1200"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %t0, %"struct.thrust::pair.82"** %t0.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %t1, %"struct.thrust::pair.82"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1200"*, %"class.thrust::tuple.1200"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1200"* %this1 to %"struct.thrust::detail::cons.1201"*
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t0.addr, align 8
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRKNS_4pairIiiEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1201"* %0, %"struct.thrust::pair.82"* dereferenceable(8) %1, %"struct.thrust::pair.82"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_4pairIiiEEEENS_6detail13raw_referenceIKT_E4typeERS6_(%"struct.thrust::pair.82"* dereferenceable(8) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"struct.thrust::pair.82"*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::pair.82"* %ref, %"struct.thrust::pair.82"** %ref.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %ref.addr, align 8
  store %"struct.thrust::pair.82"* %0, %"struct.thrust::pair.82"** %ref.tmp, align 8, !tbaa !1
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castIPKNS_4pairIiiEEEENS_6detail14pointer_traitsIT_E11raw_pointerERKS7_(%"struct.thrust::pair.82"** dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_4pairIiiEES7_NS0_4consINS_9referenceIS5_NS_7pointerIS5_NS_6system3cpp6detail3tagENS_11use_defaultESF_EESF_EENS_9null_typeEEEEET_RKNS8_IT0_T1_EE(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1197"*, align 8
  store %"struct.thrust::detail::cons.1197"* %t, %"struct.thrust::detail::cons.1197"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1197"*, %"struct.thrust::detail::cons.1197"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1197", %"struct.thrust::detail::cons.1197"* %0, i32 0, i32 0
  %ref = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %head, align 8, !tbaa !7
  ret %"struct.thrust::pair.82"* %ref
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIiiEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.1182"* dereferenceable(8) %ref) #8 comdat {
entry:
  %ref.addr = alloca %"class.thrust::reference.1182"*, align 8
  %ref.tmp = alloca %"class.thrust::pointer.1177", align 8
  store %"class.thrust::reference.1182"* %ref, %"class.thrust::reference.1182"** %ref.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %ref.addr, align 8
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust9referenceINS_4pairIiiEENS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultES8_EES8_EadEv(%"class.thrust::reference.1182"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %ref.tmp, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust16raw_pointer_castINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEEENS_6detail14pointer_traitsIT_E11raw_pointerERKSC_(%"class.thrust::pointer.1177"* dereferenceable(8) %ref.tmp)
  ret %"struct.thrust::pair.82"* %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.1182"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS_9referenceINS_4pairIiiEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EERKS6_NS0_4consISE_NS_9null_typeEEEEET_RKNSJ_IT0_T1_EE(%"struct.thrust::detail::cons.1197"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1197"*, align 8
  store %"struct.thrust::detail::cons.1197"* %t, %"struct.thrust::detail::cons.1197"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1197"*, %"struct.thrust::detail::cons.1197"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1197", %"struct.thrust::detail::cons.1197"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::reference.1182"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIiiEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.1198"* dereferenceable(8) %tail)
  ret %"class.thrust::reference.1182"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::reference.1182"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS_9referenceINS_4pairIiiEENS_7pointerIS6_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.1198"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1198"*, align 8
  store %"struct.thrust::detail::cons.1198"* %t, %"struct.thrust::detail::cons.1198"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1198"*, %"struct.thrust::detail::cons.1198"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1198", %"struct.thrust::detail::cons.1198"* %0, i32 0, i32 0
  ret %"class.thrust::reference.1182"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRKNS_4pairIiiEENS1_IRS3_NS_9null_typeEEEEC2IS4_S3_KS7_SB_SB_SB_SB_SB_SB_SB_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1201"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %t1, %"struct.thrust::pair.82"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1201"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.82"*, align 8
  %t2.addr = alloca %"struct.thrust::pair.82"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1201"* %this, %"struct.thrust::detail::cons.1201"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %t1, %"struct.thrust::pair.82"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %t2, %"struct.thrust::pair.82"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1201"*, %"struct.thrust::detail::cons.1201"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1201", %"struct.thrust::detail::cons.1201"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t1.addr, align 8
  store %"struct.thrust::pair.82"* %0, %"struct.thrust::pair.82"** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1201", %"struct.thrust::detail::cons.1201"* %this1, i32 0, i32 1
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consIRNS_4pairIiiEENS_9null_typeEEC2IS3_EERT_RKS5_SB_SB_SB_SB_SB_SB_SB_SB_(%"struct.thrust::detail::cons.906"* %tail, %"struct.thrust::pair.82"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust20iterator_core_access11dereferenceINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEENT_9referenceERKSO_(%"class.thrust::zip_iterator.1187"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.1195", align 8
  %f.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  store %"class.thrust::zip_iterator.1187"* %f, %"class.thrust::zip_iterator.1187"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %f.addr, align 8
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv(%"class.thrust::zip_iterator.1187"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1195", %"class.thrust::detail::tuple_of_iterator_references.1195"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %coerce.dive, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive1 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %3, %"struct.thrust::pair.82"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1195", %"class.thrust::detail::tuple_of_iterator_references.1195"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %coerce.dive2, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive3 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %7 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %6, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %7
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.1187"* @_ZNK6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1188"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1188"*, align 8
  store %"class.thrust::iterator_facade.1188"* %this, %"class.thrust::iterator_facade.1188"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1188"*, %"class.thrust::iterator_facade.1188"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1188"* %this1 to %"class.thrust::zip_iterator.1187"*
  ret %"class.thrust::zip_iterator.1187"* %0
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE11dereferenceEv(%"class.thrust::zip_iterator.1187"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::tuple_of_iterator_references.1195", align 8
  %this.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  %ref.tmp = alloca %"class.thrust::tuple.1196", align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::zip_iterator.1187"* %this, %"class.thrust::zip_iterator.1187"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %this.addr, align 8
  %call = call dereferenceable(16) %"class.thrust::tuple.1189"* @_ZNK6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE18get_iterator_tupleEv(%"class.thrust::zip_iterator.1187"* %this1)
  %call2 = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_(%"class.thrust::tuple.1189"* dereferenceable(16) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %ref.tmp, i32 0, i32 0
  %0 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %1 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 0
  %2 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call2, 0
  store %"struct.thrust::pair.82"* %2, %"struct.thrust::pair.82"** %1, align 8
  %3 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %0, i32 0, i32 1
  %4 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call2, 1
  store %"struct.thrust::pair.82"* %4, %"struct.thrust::pair.82"** %3, align 8
  call void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE(%"class.thrust::detail::tuple_of_iterator_references.1195"* %retval, %"class.thrust::tuple.1196"* dereferenceable(16) %ref.tmp)
  %coerce.dive3 = getelementptr inbounds %"class.thrust::detail::tuple_of_iterator_references.1195", %"class.thrust::detail::tuple_of_iterator_references.1195"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %coerce.dive3, i32 0, i32 0
  %5 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive4 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %6 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %5, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %6
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail27tuple_host_device_transformINS0_20dereference_iterator5applyENS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EES2_EENS0_20tuple_meta_transformIT0_T_Xsr6thrust10tuple_sizeISO_EE5valueEE4typeERKSO_T1_(%"class.thrust::tuple.1189"* dereferenceable(16) %t) #0 comdat {
entry:
  %retval = alloca %"class.thrust::tuple.1196", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.1189"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::dereference_iterator", align 1
  store %"class.thrust::tuple.1189"* %t, %"class.thrust::tuple.1189"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.1189"*, %"class.thrust::tuple.1189"** %t.addr, align 8
  %call = call { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_(%"class.thrust::tuple.1189"* dereferenceable(16) %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %retval, i32 0, i32 0
  %1 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %2 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 0
  %3 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 0
  store %"struct.thrust::pair.82"* %3, %"struct.thrust::pair.82"** %2, align 8
  %4 = getelementptr inbounds { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %1, i32 0, i32 1
  %5 = extractvalue { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %call, 1
  store %"struct.thrust::pair.82"* %5, %"struct.thrust::pair.82"** %4, align 8
  %coerce.dive1 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %retval, i32 0, i32 0
  %6 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive1 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %7 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %6, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %7
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail28tuple_of_iterator_referencesIRKNS_4pairIiiEENS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeESF_SF_SF_SF_SF_SF_SF_EC2ERKNS_5tupleIS5_SE_SF_SF_SF_SF_SF_SF_SF_SF_EE(%"class.thrust::detail::tuple_of_iterator_references.1195"* %this, %"class.thrust::tuple.1196"* dereferenceable(16) %other) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::tuple_of_iterator_references.1195"*, align 8
  %other.addr = alloca %"class.thrust::tuple.1196"*, align 8
  store %"class.thrust::detail::tuple_of_iterator_references.1195"* %this, %"class.thrust::detail::tuple_of_iterator_references.1195"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::tuple.1196"* %other, %"class.thrust::tuple.1196"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::detail::tuple_of_iterator_references.1195"*, %"class.thrust::detail::tuple_of_iterator_references.1195"** %this.addr, align 8
  %0 = bitcast %"class.thrust::detail::tuple_of_iterator_references.1195"* %this1 to %"class.thrust::tuple.1196"*
  %1 = load %"class.thrust::tuple.1196"*, %"class.thrust::tuple.1196"** %other.addr, align 8
  %2 = bitcast %"class.thrust::tuple.1196"* %0 to i8*
  %3 = bitcast %"class.thrust::tuple.1196"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 16, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } @_ZN6thrust6detail23tuple_transform_functorINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EENS0_20dereference_iterator5applyESL_Lj2EE27do_it_on_the_host_or_deviceERKSK_SL_(%"class.thrust::tuple.1189"* dereferenceable(16) %t) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::tuple.1196", align 8
  %f = alloca %"struct.thrust::detail::dereference_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.1189"*, align 8
  %ref.tmp = alloca %"class.thrust::reference.1182", align 8
  store %"class.thrust::tuple.1189"* %t, %"class.thrust::tuple.1189"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.1189"*, %"class.thrust::tuple.1189"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1189"* %0 to %"struct.thrust::detail::cons.1190"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust3getILi0ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %1)
  %call1 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.1189"*, %"class.thrust::tuple.1189"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.1189"* %2 to %"struct.thrust::detail::cons.1190"*
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust3getILi1ENS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_4consINS3_INS_7pointerIS5_SC_NS_11use_defaultESG_EEEENS_9null_typeEEEEENS_13access_traitsINS_13tuple_elementIXT_ENSE_IT0_T1_EEE4typeEE10const_typeERKSP_(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %3)
  %call3 = call %"struct.thrust::pair.82"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_(%"struct.thrust::detail::dereference_iterator"* %f, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %call2)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %ref.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call3, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  call void @_ZN6thrust5tupleIRKNS_4pairIiiEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_(%"class.thrust::tuple.1196"* %retval, %"struct.thrust::pair.82"* dereferenceable(8) %call1, %"class.thrust::reference.1182"* dereferenceable(8) %ref.tmp)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::tuple.1196", %"class.thrust::tuple.1196"* %retval, i32 0, i32 0
  %4 = bitcast %"struct.thrust::detail::cons.1197"* %coerce.dive6 to { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }*
  %5 = load { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }, { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* }* %4, align 8
  ret { %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"* } %5
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust6detail20dereference_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEENS1_5applyIT_E4typeERKSG_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.1164"* %it, %"class.thrust::detail::tagged_iterator.1164"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %0 to %"class.thrust::iterator_facade.1166"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv(%"class.thrust::iterator_facade.1166"* %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail20dereference_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENS1_5applyIT_E4typeERKSF_(%"struct.thrust::detail::dereference_iterator"* %this, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %it) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.1182", align 8
  %this.addr = alloca %"struct.thrust::detail::dereference_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  store %"struct.thrust::detail::dereference_iterator"* %this, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.1174"* %it, %"class.thrust::detail::normal_iterator.1174"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::dereference_iterator"*, %"struct.thrust::detail::dereference_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1174"* %0 to %"class.thrust::iterator_facade.1176"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.1176"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive5, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust5tupleIRKNS_4pairIiiEENS_9referenceIS2_NS_7pointerIS2_NS_6system3cpp6detail3tagENS_11use_defaultESB_EESB_EENS_9null_typeESE_SE_SE_SE_SE_SE_SE_EC2ES4_RKSD_(%"class.thrust::tuple.1196"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %t0, %"class.thrust::reference.1182"* dereferenceable(8) %t1) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::tuple.1196"*, align 8
  %t0.addr = alloca %"struct.thrust::pair.82"*, align 8
  %t1.addr = alloca %"class.thrust::reference.1182"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  %ref.tmp2 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp3 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp4 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp5 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp6 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp7 = alloca %"struct.thrust::null_type", align 1
  %ref.tmp8 = alloca %"struct.thrust::null_type", align 1
  store %"class.thrust::tuple.1196"* %this, %"class.thrust::tuple.1196"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %t0, %"struct.thrust::pair.82"** %t0.addr, align 8, !tbaa !7
  store %"class.thrust::reference.1182"* %t1, %"class.thrust::reference.1182"** %t1.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::tuple.1196"*, %"class.thrust::tuple.1196"** %this.addr, align 8
  %0 = bitcast %"class.thrust::tuple.1196"* %this1 to %"struct.thrust::detail::cons.1197"*
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t0.addr, align 8
  %2 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %t1.addr, align 8
  call void @_ZN6thrust6detail4consIRKNS_4pairIiiEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1197"* %0, %"struct.thrust::pair.82"* dereferenceable(8) %1, %"class.thrust::reference.1182"* dereferenceable(8) %2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp2, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp3, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp4, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp5, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp6, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp7, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp8)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEdeEv(%"class.thrust::iterator_facade.1166"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1166"*, align 8
  store %"class.thrust::iterator_facade.1166"* %this, %"class.thrust::iterator_facade.1166"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1166"*, %"class.thrust::iterator_facade.1166"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.1166"* %this1)
  %call2 = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %call)
  ret %"struct.thrust::pair.82"* %call2
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEENT_9referenceERKSF_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  store %"class.thrust::detail::tagged_iterator.1164"* %f, %"class.thrust::detail::tagged_iterator.1164"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %0 to %"class.thrust::iterator_adaptor.1165"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv(%"class.thrust::iterator_adaptor.1165"* %1)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZNK6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.1166"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1166"*, align 8
  store %"class.thrust::iterator_facade.1166"* %this, %"class.thrust::iterator_facade.1166"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1166"*, %"class.thrust::iterator_facade.1166"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1166"* %this1 to %"class.thrust::detail::tagged_iterator.1164"*
  ret %"class.thrust::detail::tagged_iterator.1164"* %0
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE11dereferenceEv(%"class.thrust::iterator_adaptor.1165"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1165"*, align 8
  store %"class.thrust::iterator_adaptor.1165"* %this, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1165"*, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.919"* %m_iterator to %"class.thrust::iterator_facade.921"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEdeEv(%"class.thrust::iterator_facade.921"* %0)
  ret %"struct.thrust::pair.82"* %call
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEdeEv(%"class.thrust::iterator_facade.1176"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.1182", align 8
  %this.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  store %"class.thrust::iterator_facade.1176"* %this, %"class.thrust::iterator_facade.1176"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.1176"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %coerce.dive5 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive6, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust20iterator_core_access11dereferenceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEENT_9referenceERKSE_(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.1182", align 8
  %f.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  store %"class.thrust::detail::normal_iterator.1174"* %f, %"class.thrust::detail::normal_iterator.1174"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1174"* %0 to %"class.thrust::iterator_adaptor.1175"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.1175"* %1)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive1, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %coerce.dive3 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive4, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %2
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZNK6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.1176"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  store %"class.thrust::iterator_facade.1176"* %this, %"class.thrust::iterator_facade.1176"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1176"* %this1 to %"class.thrust::detail::normal_iterator.1174"*
  ret %"class.thrust::detail::normal_iterator.1174"* %0
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11dereferenceEv(%"class.thrust::iterator_adaptor.1175"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::reference.1182", align 8
  %this.addr = alloca %"class.thrust::iterator_adaptor.1175"*, align 8
  store %"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1175"*, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.1177"* %m_iterator to %"class.thrust::iterator_facade.1179"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.1179"* %0)
  %coerce.dive = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive5, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive6, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail4consIRKNS_4pairIiiEENS1_INS_9referenceIS3_NS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultESC_EESC_EENS_9null_typeEEEEC2IS4_KSE_KSF_SK_SK_SK_SK_SK_SK_SK_EERT_RT0_RT1_RT2_RT3_RT4_RT5_RT6_RT7_RT8_(%"struct.thrust::detail::cons.1197"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %t1, %"class.thrust::reference.1182"* dereferenceable(8) %t2, %"struct.thrust::null_type"* dereferenceable(1) %t3, %"struct.thrust::null_type"* dereferenceable(1) %t4, %"struct.thrust::null_type"* dereferenceable(1) %t5, %"struct.thrust::null_type"* dereferenceable(1) %t6, %"struct.thrust::null_type"* dereferenceable(1) %t7, %"struct.thrust::null_type"* dereferenceable(1) %t8, %"struct.thrust::null_type"* dereferenceable(1) %t9, %"struct.thrust::null_type"* dereferenceable(1) %t10) unnamed_addr #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1197"*, align 8
  %t1.addr = alloca %"struct.thrust::pair.82"*, align 8
  %t2.addr = alloca %"class.thrust::reference.1182"*, align 8
  %t3.addr = alloca %"struct.thrust::null_type"*, align 8
  %t4.addr = alloca %"struct.thrust::null_type"*, align 8
  %t5.addr = alloca %"struct.thrust::null_type"*, align 8
  %t6.addr = alloca %"struct.thrust::null_type"*, align 8
  %t7.addr = alloca %"struct.thrust::null_type"*, align 8
  %t8.addr = alloca %"struct.thrust::null_type"*, align 8
  %t9.addr = alloca %"struct.thrust::null_type"*, align 8
  %t10.addr = alloca %"struct.thrust::null_type"*, align 8
  %ref.tmp = alloca %"struct.thrust::null_type", align 1
  store %"struct.thrust::detail::cons.1197"* %this, %"struct.thrust::detail::cons.1197"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %t1, %"struct.thrust::pair.82"** %t1.addr, align 8, !tbaa !7
  store %"class.thrust::reference.1182"* %t2, %"class.thrust::reference.1182"** %t2.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t3, %"struct.thrust::null_type"** %t3.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t4, %"struct.thrust::null_type"** %t4.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t5, %"struct.thrust::null_type"** %t5.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t6, %"struct.thrust::null_type"** %t6.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t7, %"struct.thrust::null_type"** %t7.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t8, %"struct.thrust::null_type"** %t8.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t9, %"struct.thrust::null_type"** %t9.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %t10, %"struct.thrust::null_type"** %t10.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::cons.1197"*, %"struct.thrust::detail::cons.1197"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1197", %"struct.thrust::detail::cons.1197"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %t1.addr, align 8
  store %"struct.thrust::pair.82"* %0, %"struct.thrust::pair.82"** %head, align 8, !tbaa !7
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1197", %"struct.thrust::detail::cons.1197"* %this1, i32 0, i32 1
  %1 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %t2.addr, align 8
  %2 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t3.addr, align 8
  %3 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t4.addr, align 8
  %4 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t5.addr, align 8
  %5 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t6.addr, align 8
  %6 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t7.addr, align 8
  %7 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t8.addr, align 8
  %8 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t9.addr, align 8
  %9 = load %"struct.thrust::null_type"*, %"struct.thrust::null_type"** %t10.addr, align 8
  call void @_ZN6thrust6detail4consINS_9referenceINS_4pairIiiEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.1198"* %tail, %"class.thrust::reference.1182"* dereferenceable(8) %1, %"struct.thrust::null_type"* dereferenceable(1) %2, %"struct.thrust::null_type"* dereferenceable(1) %3, %"struct.thrust::null_type"* dereferenceable(1) %4, %"struct.thrust::null_type"* dereferenceable(1) %5, %"struct.thrust::null_type"* dereferenceable(1) %6, %"struct.thrust::null_type"* dereferenceable(1) %7, %"struct.thrust::null_type"* dereferenceable(1) %8, %"struct.thrust::null_type"* dereferenceable(1) %9, %"struct.thrust::null_type"* dereferenceable(1) %ref.tmp)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS_9referenceINS_4pairIiiEENS_7pointerIS4_NS_6system3cpp6detail3tagENS_11use_defaultESA_EESA_EENS_9null_typeEEC2IKSC_EERT_RKSD_SK_SK_SK_SK_SK_SK_SK_SK_(%"struct.thrust::detail::cons.1198"* %this, %"class.thrust::reference.1182"* dereferenceable(8) %t1, %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1), %"struct.thrust::null_type"* dereferenceable(1)) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1198"*, align 8
  %t1.addr = alloca %"class.thrust::reference.1182"*, align 8
  %.addr = alloca %"struct.thrust::null_type"*, align 8
  %.addr1 = alloca %"struct.thrust::null_type"*, align 8
  %.addr2 = alloca %"struct.thrust::null_type"*, align 8
  %.addr3 = alloca %"struct.thrust::null_type"*, align 8
  %.addr4 = alloca %"struct.thrust::null_type"*, align 8
  %.addr5 = alloca %"struct.thrust::null_type"*, align 8
  %.addr6 = alloca %"struct.thrust::null_type"*, align 8
  %.addr7 = alloca %"struct.thrust::null_type"*, align 8
  %.addr8 = alloca %"struct.thrust::null_type"*, align 8
  store %"struct.thrust::detail::cons.1198"* %this, %"struct.thrust::detail::cons.1198"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.1182"* %t1, %"class.thrust::reference.1182"** %t1.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %0, %"struct.thrust::null_type"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %1, %"struct.thrust::null_type"** %.addr1, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %2, %"struct.thrust::null_type"** %.addr2, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %3, %"struct.thrust::null_type"** %.addr3, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %4, %"struct.thrust::null_type"** %.addr4, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %5, %"struct.thrust::null_type"** %.addr5, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %6, %"struct.thrust::null_type"** %.addr6, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %7, %"struct.thrust::null_type"** %.addr7, align 8, !tbaa !7
  store %"struct.thrust::null_type"* %8, %"struct.thrust::null_type"** %.addr8, align 8, !tbaa !7
  %this9 = load %"struct.thrust::detail::cons.1198"*, %"struct.thrust::detail::cons.1198"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1198", %"struct.thrust::detail::cons.1198"* %this9, i32 0, i32 0
  %9 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %t1.addr, align 8
  %10 = bitcast %"class.thrust::reference.1182"* %head to i8*
  %11 = bitcast %"class.thrust::reference.1182"* %9 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS4_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS6_INS_7pointerIS8_SF_NS_11use_defaultESI_EEEENS_9null_typeESL_SL_SL_SL_SL_SL_SL_EEEEEEvRT_(%"class.thrust::zip_iterator.1187"* dereferenceable(16) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  store %"class.thrust::zip_iterator.1187"* %f, %"class.thrust::zip_iterator.1187"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %f.addr, align 8
  call void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv(%"class.thrust::zip_iterator.1187"* %0)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(16) %"class.thrust::zip_iterator.1187"* @_ZN6thrust15iterator_facadeINS_12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS3_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EEEENS2_IS7_S7_SK_SK_SK_SK_SK_SK_SK_SK_EESE_NS_27random_access_traversal_tagENS3_28tuple_of_iterator_referencesIRS8_NS_9referenceIS7_SI_SH_EESK_SK_SK_SK_SK_SK_SK_SK_EElE7derivedEv(%"class.thrust::iterator_facade.1188"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1188"*, align 8
  store %"class.thrust::iterator_facade.1188"* %this, %"class.thrust::iterator_facade.1188"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1188"*, %"class.thrust::iterator_facade.1188"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1188"* %this1 to %"class.thrust::zip_iterator.1187"*
  ret %"class.thrust::zip_iterator.1187"* %0
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust12zip_iteratorINS_5tupleINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS4_INS_7pointerIS6_SD_NS_11use_defaultESG_EEEENS_9null_typeESJ_SJ_SJ_SJ_SJ_SJ_SJ_EEE9incrementEv(%"class.thrust::zip_iterator.1187"* %this) #8 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::zip_iterator.1187"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::zip_iterator.1187"* %this, %"class.thrust::zip_iterator.1187"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::zip_iterator.1187"*, %"class.thrust::zip_iterator.1187"** %this.addr, align 8
  %m_iterator_tuple = getelementptr inbounds %"class.thrust::zip_iterator.1187", %"class.thrust::zip_iterator.1187"* %this1, i32 0, i32 0
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_(%"class.thrust::tuple.1189"* dereferenceable(16) %m_iterator_tuple)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS_5tupleINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS5_INS_7pointerIS7_SE_NS_11use_defaultESH_EEEENS_9null_typeESK_SK_SK_SK_SK_SK_SK_EENS0_18increment_iteratorEEET0_RT_SN_(%"class.thrust::tuple.1189"* dereferenceable(16) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"class.thrust::tuple.1189"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"class.thrust::tuple.1189"* %t, %"class.thrust::tuple.1189"** %t.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::tuple.1189"*, %"class.thrust::tuple.1189"** %t.addr, align 8
  %1 = bitcast %"class.thrust::tuple.1189"* %0 to %"struct.thrust::detail::cons.1190"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.1190"* %1)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %call)
  %2 = load %"class.thrust::tuple.1189"*, %"class.thrust::tuple.1189"** %t.addr, align 8
  %3 = bitcast %"class.thrust::tuple.1189"* %2 to %"struct.thrust::detail::cons.1190"*
  %call1 = call dereferenceable(8) %"struct.thrust::detail::cons.1191"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.1190"* %3)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_(%"struct.thrust::detail::cons.1191"* dereferenceable(8) %call1)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.1164"* %it, %"class.thrust::detail::tagged_iterator.1164"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %0 to %"class.thrust::iterator_facade.1166"*
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv(%"class.thrust::iterator_facade.1166"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_headEv(%"struct.thrust::detail::cons.1190"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1190"*, align 8
  store %"struct.thrust::detail::cons.1190"* %this, %"struct.thrust::detail::cons.1190"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1190"*, %"struct.thrust::detail::cons.1190"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1190", %"struct.thrust::detail::cons.1190"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::tagged_iterator.1164"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS_9null_typeEEENS0_18increment_iteratorEEET0_RT_SI_(%"struct.thrust::detail::cons.1191"* dereferenceable(8) %t) #8 comdat {
entry:
  %retval = alloca %"struct.thrust::detail::increment_iterator", align 1
  %f = alloca %"struct.thrust::detail::increment_iterator", align 1
  %t.addr = alloca %"struct.thrust::detail::cons.1191"*, align 8
  %agg.tmp = alloca %"struct.thrust::null_type", align 1
  %undef.agg.tmp = alloca %"struct.thrust::null_type", align 1
  %agg.tmp1 = alloca %"struct.thrust::detail::increment_iterator", align 1
  %undef.agg.tmp2 = alloca %"struct.thrust::detail::increment_iterator", align 1
  store %"struct.thrust::detail::cons.1191"* %t, %"struct.thrust::detail::cons.1191"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1191"*, %"struct.thrust::detail::cons.1191"** %t.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.1191"* %0)
  call void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %f, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %call)
  %1 = load %"struct.thrust::detail::cons.1191"*, %"struct.thrust::detail::cons.1191"** %t.addr, align 8
  call void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.1191"* %1)
  call void @_ZN6thrust6detail19tuple_impl_specific14tuple_for_eachINS0_18increment_iteratorEEET_NS_9null_typeES4_()
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"struct.thrust::detail::cons.1191"* @_ZN6thrust6detail4consINS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEENS1_INS3_INS_7pointerIS5_SC_NS_11use_defaultESF_EEEENS_9null_typeEEEE8get_tailEv(%"struct.thrust::detail::cons.1190"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1190"*, align 8
  store %"struct.thrust::detail::cons.1190"* %this, %"struct.thrust::detail::cons.1190"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1190"*, %"struct.thrust::detail::cons.1190"** %this.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1190", %"struct.thrust::detail::cons.1190"* %this1, i32 0, i32 1
  ret %"struct.thrust::detail::cons.1191"* %tail
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lEppEv(%"class.thrust::iterator_facade.1166"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1166"*, align 8
  store %"class.thrust::iterator_facade.1166"* %this, %"class.thrust::iterator_facade.1166"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1166"*, %"class.thrust::iterator_facade.1166"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.1166"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.1166"* %this1)
  ret %"class.thrust::detail::tagged_iterator.1164"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15tagged_iteratorINS2_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEEEEvRT_(%"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  store %"class.thrust::detail::tagged_iterator.1164"* %f, %"class.thrust::detail::tagged_iterator.1164"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %0 to %"class.thrust::iterator_adaptor.1165"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv(%"class.thrust::iterator_adaptor.1165"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust15iterator_facadeINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES5_SC_NS_27random_access_traversal_tagERS6_lE7derivedEv(%"class.thrust::iterator_facade.1166"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1166"*, align 8
  store %"class.thrust::iterator_facade.1166"* %this, %"class.thrust::iterator_facade.1166"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1166"*, %"class.thrust::iterator_facade.1166"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1166"* %this1 to %"class.thrust::detail::tagged_iterator.1164"*
  ret %"class.thrust::detail::tagged_iterator.1164"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEES8_S5_SC_NS_27random_access_traversal_tagERS6_lE9incrementEv(%"class.thrust::iterator_adaptor.1165"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1165"*, align 8
  store %"class.thrust::iterator_adaptor.1165"* %this, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1165"*, %"class.thrust::iterator_adaptor.1165"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1165", %"class.thrust::iterator_adaptor.1165"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.919"* %m_iterator to %"class.thrust::iterator_facade.921"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv(%"class.thrust::iterator_facade.921"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lEppEv(%"class.thrust::iterator_facade.921"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.921"*, align 8
  store %"class.thrust::iterator_facade.921"* %this, %"class.thrust::iterator_facade.921"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.921"*, %"class.thrust::iterator_facade.921"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.921"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEEvRT_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.919"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS5_lE7derivedEv(%"class.thrust::iterator_facade.921"* %this1)
  ret %"class.thrust::detail::normal_iterator.919"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorIPKNS_4pairIiiEEEEEEvRT_(%"class.thrust::detail::normal_iterator.919"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.919"*, align 8
  store %"class.thrust::detail::normal_iterator.919"* %f, %"class.thrust::detail::normal_iterator.919"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.919"*, %"class.thrust::detail::normal_iterator.919"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.919"* %0 to %"class.thrust::iterator_adaptor.920"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv(%"class.thrust::iterator_adaptor.920"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_E9incrementEv(%"class.thrust::iterator_adaptor.920"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.920"*, align 8
  store %"class.thrust::iterator_adaptor.920"* %this, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.920"*, %"class.thrust::iterator_adaptor.920"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.920", %"class.thrust::iterator_adaptor.920"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 1
  store %"struct.thrust::pair.82"* %incdec.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !515
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZN6thrust6detail18increment_iteratorclINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"struct.thrust::detail::increment_iterator"* %this, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %it) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::increment_iterator"*, align 8
  %it.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  store %"struct.thrust::detail::increment_iterator"* %this, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.1174"* %it, %"class.thrust::detail::normal_iterator.1174"** %it.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::increment_iterator"*, %"struct.thrust::detail::increment_iterator"** %this.addr, align 8
  %0 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %it.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1174"* %0 to %"class.thrust::iterator_facade.1176"*
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv(%"class.thrust::iterator_facade.1176"* %1)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_headEv(%"struct.thrust::detail::cons.1191"* %this) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::cons.1191"*, align 8
  store %"struct.thrust::detail::cons.1191"* %this, %"struct.thrust::detail::cons.1191"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1191"*, %"struct.thrust::detail::cons.1191"** %this.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1191", %"struct.thrust::detail::cons.1191"* %this1, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.1174"* %head
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEENS_9null_typeEE8get_tailEv(%"struct.thrust::detail::cons.1191"* %this) #9 comdat align 2 {
entry:
  %retval = alloca %"struct.thrust::null_type", align 1
  %this.addr = alloca %"struct.thrust::detail::cons.1191"*, align 8
  store %"struct.thrust::detail::cons.1191"* %this, %"struct.thrust::detail::cons.1191"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.thrust::detail::cons.1191"*, %"struct.thrust::detail::cons.1191"** %this.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEppEv(%"class.thrust::iterator_facade.1176"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  store %"class.thrust::iterator_facade.1176"* %this, %"class.thrust::iterator_facade.1176"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.1176"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.1176"* %this1)
  ret %"class.thrust::detail::normal_iterator.1174"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  store %"class.thrust::detail::normal_iterator.1174"* %f, %"class.thrust::detail::normal_iterator.1174"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1174"* %0 to %"class.thrust::iterator_adaptor.1175"*
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv(%"class.thrust::iterator_adaptor.1175"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.1176"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  store %"class.thrust::iterator_facade.1176"* %this, %"class.thrust::iterator_facade.1176"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_facade.1176"* %this1 to %"class.thrust::detail::normal_iterator.1174"*
  ret %"class.thrust::detail::normal_iterator.1174"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E9incrementEv(%"class.thrust::iterator_adaptor.1175"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1175"*, align 8
  store %"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1175"*, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.1177"* %m_iterator to %"class.thrust::iterator_facade.1179"*
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.1179"* %0)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.1179"* %this) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  store %"class.thrust::iterator_facade.1179"* %this, %"class.thrust::iterator_facade.1179"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.1179"* %this1)
  call void @_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_(%"class.thrust::pointer.1177"* dereferenceable(8) %call)
  %call2 = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE7derivedEv(%"class.thrust::iterator_facade.1179"* %this1)
  ret %"class.thrust::pointer.1177"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access9incrementINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEEvRT_(%"class.thrust::pointer.1177"* dereferenceable(8) %f) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::pointer.1177"*, align 8
  store %"class.thrust::pointer.1177"* %f, %"class.thrust::pointer.1177"** %f.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %f.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %0 to %"class.thrust::iterator_adaptor.1178"*
  call void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv(%"class.thrust::iterator_adaptor.1178"* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE9incrementEv(%"class.thrust::iterator_adaptor.1178"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1178"*, align 8
  store %"class.thrust::iterator_adaptor.1178"* %this, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::iterator_adaptor.1178"*, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !596
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %0, i32 1
  store %"struct.thrust::pair.82"* %incdec.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !596
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail12unary_negateINS0_22tuple_binary_predicateINS0_8equal_toINS_4pairIiiEEEEEEEC2ERKS7_(%"struct.thrust::detail::unary_negate.1193"* %this, %"struct.thrust::detail::tuple_binary_predicate.1192"* dereferenceable(1) %pred) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::unary_negate.1193"*, align 8
  %pred.addr = alloca %"struct.thrust::detail::tuple_binary_predicate.1192"*, align 8
  store %"struct.thrust::detail::unary_negate.1193"* %this, %"struct.thrust::detail::unary_negate.1193"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::detail::tuple_binary_predicate.1192"* %pred, %"struct.thrust::detail::tuple_binary_predicate.1192"** %pred.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::unary_negate.1193"*, %"struct.thrust::detail::unary_negate.1193"** %this.addr, align 8
  %pred2 = getelementptr inbounds %"struct.thrust::detail::unary_negate.1193", %"struct.thrust::detail::unary_negate.1193"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::detail::tuple_binary_predicate.1192"*, %"struct.thrust::detail::tuple_binary_predicate.1192"** %pred.addr, align 8
  %1 = bitcast %"struct.thrust::detail::tuple_binary_predicate.1192"* %pred2 to i8*
  %2 = bitcast %"struct.thrust::detail::tuple_binary_predicate.1192"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 1, i32 1, i1 false), !tbaa.struct !41
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust4pairINS_6detail15tagged_iteratorINS1_15normal_iteratorIPKNS0_IiiEEEENS_6system3cpp6detail3tagEEENS3_INS_7pointerIS4_SB_NS_11use_defaultESE_EEEEEC2ERKSC_RKSG_(%"struct.thrust::pair.1186"* %this, %"class.thrust::detail::tagged_iterator.1164"* dereferenceable(8) %x, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %y) unnamed_addr #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::pair.1186"*, align 8
  %x.addr = alloca %"class.thrust::detail::tagged_iterator.1164"*, align 8
  %y.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  store %"struct.thrust::pair.1186"* %this, %"struct.thrust::pair.1186"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::tagged_iterator.1164"* %x, %"class.thrust::detail::tagged_iterator.1164"** %x.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1174"* %y, %"class.thrust::detail::normal_iterator.1174"** %y.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::pair.1186"*, %"struct.thrust::pair.1186"** %this.addr, align 8
  %first = getelementptr inbounds %"struct.thrust::pair.1186", %"struct.thrust::pair.1186"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::detail::tagged_iterator.1164"*, %"class.thrust::detail::tagged_iterator.1164"** %x.addr, align 8
  %1 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %first to i8*
  %2 = bitcast %"class.thrust::detail::tagged_iterator.1164"* %0 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %second = getelementptr inbounds %"struct.thrust::pair.1186", %"struct.thrust::pair.1186"* %this1, i32 0, i32 1
  %3 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %y.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.1174"* %second to i8*
  %5 = bitcast %"class.thrust::detail::normal_iterator.1174"* %3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::tagged_iterator.1164"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15tagged_iteratorINS0_15normal_iteratorIPKNS_4pairIiiEEEENS_6system3cpp6detail3tagEEESF_NS0_4consINS5_INS_7pointerIS7_SE_NS_11use_defaultESK_EEEENS_9null_typeEEEEET_RKNSI_IT0_T1_EE(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1190"*, align 8
  store %"struct.thrust::detail::cons.1190"* %t, %"struct.thrust::detail::cons.1190"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1190"*, %"struct.thrust::detail::cons.1190"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1190", %"struct.thrust::detail::cons.1190"* %0, i32 0, i32 0
  ret %"class.thrust::detail::tagged_iterator.1164"* %head
}

; Function Attrs: inlinehint uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust6detail9get_classILi1EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEENS0_15tagged_iteratorINS4_IPKS7_EESB_EENS0_4consISE_NS_9null_typeEEEEET_RKNSM_IT0_T1_EE(%"struct.thrust::detail::cons.1190"* dereferenceable(16) %t) #8 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1190"*, align 8
  store %"struct.thrust::detail::cons.1190"* %t, %"struct.thrust::detail::cons.1190"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1190"*, %"struct.thrust::detail::cons.1190"** %t.addr, align 8
  %tail = getelementptr inbounds %"struct.thrust::detail::cons.1190", %"struct.thrust::detail::cons.1190"* %0, i32 0, i32 1
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.1191"* dereferenceable(8) %tail)
  ret %"class.thrust::detail::normal_iterator.1174"* %call
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust6detail9get_classILi0EE3getIRKNS0_15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESC_EEEESE_NS_9null_typeEEET_RKNS0_4consIT0_T1_EE(%"struct.thrust::detail::cons.1191"* dereferenceable(8) %t) #9 comdat align 2 {
entry:
  %t.addr = alloca %"struct.thrust::detail::cons.1191"*, align 8
  store %"struct.thrust::detail::cons.1191"* %t, %"struct.thrust::detail::cons.1191"** %t.addr, align 8, !tbaa !7
  %0 = load %"struct.thrust::detail::cons.1191"*, %"struct.thrust::detail::cons.1191"** %t.addr, align 8
  %head = getelementptr inbounds %"struct.thrust::detail::cons.1191", %"struct.thrust::detail::cons.1191"* %0, i32 0, i32 0
  ret %"class.thrust::detail::normal_iterator.1174"* %head
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE7destroyENS0_15normal_iteratorINS_7pointerIS3_S9_NS_11use_defaultESF_EEEESH_(%"class.thrust::detail::contiguous_storage.1169"* %this, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %last, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive4, i32 0, i32 0
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive5, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  %this8 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this8, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first to %"class.thrust::iterator_adaptor.1175"*
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.1175"* %0)
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = bitcast %"class.thrust::detail::normal_iterator.1174"* %last to %"class.thrust::iterator_facade.1176"*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1174"* %first to %"class.thrust::iterator_facade.1176"*
  %call9 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.1176"* dereferenceable(1) %3, %"class.thrust::iterator_facade.1176"* dereferenceable(1) %4)
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive10, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  call void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %m_allocator, %"struct.thrust::pair.82"* %5, i64 %call9)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE3endEv(%"class.thrust::detail::contiguous_storage.1169"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.1169"*, align 8
  store %"class.thrust::detail::contiguous_storage.1169"* %this, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.1169"*, %"class.thrust::detail::contiguous_storage.1169"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.1169", %"class.thrust::detail::contiguous_storage.1169"* %this1, i32 0, i32 1
  %0 = bitcast %"class.thrust::detail::normal_iterator.1174"* %m_begin to %"class.thrust::iterator_facade.1176"*
  %call = call i64 @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEE4sizeEv(%"class.thrust::detail::contiguous_storage.1169"* %this1)
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.1176"* dereferenceable(1) %0, i64 %call)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %retval, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call2, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %coerce.dive6 = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive6, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive8, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive9, align 8
  ret %"struct.thrust::pair.82"* %1
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEENS_7pointerIS5_S9_NS_11use_defaultESD_EElEEvRT_T0_T1_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %1 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %2 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 8, i32 8, i1 false)
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %4 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %0, %"struct.thrust::pair.82"* %4, i64 %3)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElSC_S5_S9_SD_SF_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSH_IT5_T6_T7_T8_T9_T10_EEE4typeERKSO_RKSV_(%"class.thrust::iterator_facade.1176"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1176"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  store %"class.thrust::iterator_facade.1176"* %lhs, %"class.thrust::iterator_facade.1176"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1176"* %rhs, %"class.thrust::iterator_facade.1176"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1176"* %0 to %"class.thrust::detail::normal_iterator.1174"*
  %2 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1176"* %2 to %"class.thrust::detail::normal_iterator.1174"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEENS_7pointerIS6_SA_NS_11use_defaultESE_EElEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERSH_SI_T1_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %a, %"struct.thrust::pair.82"* %p.coerce, i64 %n) #0 comdat {
entry:
  %p = alloca %"class.thrust::pointer.1177", align 8
  %a.addr = alloca %"struct.thrust::detail::no_throw_allocator.1170"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp2 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce = alloca %"class.thrust::pointer.1177", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %p, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %p.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::no_throw_allocator.1170"* %a, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::no_throw_allocator.1170"*, %"struct.thrust::detail::no_throw_allocator.1170"** %a.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail16allocator_systemINS0_18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEEE3getERSB_(%"struct.thrust::detail::no_throw_allocator.1170"* dereferenceable(8) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1177"* %p to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  %call5 = call %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %5, i64 %4)
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive6, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call5, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagENS_7pointerINS_4pairIiiEES4_NS_11use_defaultES8_EElNS_6detail23allocator_traits_detail5gozerEEET0_RKNSA_21execution_policy_baseIT_EESD_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %first = alloca %"class.thrust::pointer.1177", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"class.thrust::pointer.1177", align 8
  %agg.tmp3 = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call2 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call2 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = bitcast %"class.thrust::pointer.1177"* %agg.tmp to i8*
  %3 = bitcast %"class.thrust::pointer.1177"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %agg.tmp, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive4, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %call6 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %5, i64 %4)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive7, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call6, %"struct.thrust::pair.82"** %coerce.dive8, align 8
  %coerce.dive9 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive9, i32 0, i32 0
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive10, align 8
  ret %"struct.thrust::pair.82"* %6
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagENS_7pointerINS_4pairIiiEES6_NS_11use_defaultESA_EElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESF_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.82"* %first.coerce, i64 %n) #0 comdat {
entry:
  %retval = alloca %"class.thrust::pointer.1177", align 8
  %first = alloca %"class.thrust::pointer.1177", align 8
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %i = alloca i64, align 8
  %ref.tmp = alloca %"class.thrust::reference.1182", align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = bitcast %"class.thrust::pointer.1177"* %first to %"class.thrust::iterator_facade.1179"*
  %call = call %"struct.thrust::pair.82"* @_ZNK6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEdeEv(%"class.thrust::iterator_facade.1179"* %6)
  %coerce.dive2 = getelementptr inbounds %"class.thrust::reference.1182", %"class.thrust::reference.1182"* %ref.tmp, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive3, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive4, align 8
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIiiEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"class.thrust::reference.1182"* dereferenceable(8) %ref.tmp)
  %7 = bitcast %"class.thrust::pointer.1177"* %first to %"class.thrust::iterator_facade.1179"*
  %call5 = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEppEv(%"class.thrust::iterator_facade.1179"* %7)
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add nsw i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = bitcast %"class.thrust::pointer.1177"* %retval to i8*
  %10 = bitcast %"class.thrust::pointer.1177"* %first to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %9, i8* %10, i64 8, i32 8, i1 false)
  %11 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %11) #5
  %coerce.dive6 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %retval, i32 0, i32 0
  %coerce.dive7 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive6, i32 0, i32 0
  %12 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive7, align 8
  ret %"struct.thrust::pair.82"* %12
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_9referenceINS_4pairIiiEENS_7pointerIS8_NS_6system3cpp6detail3tagENS_11use_defaultESE_EESE_EEEEvRKT_(%"struct.thrust::detail::wrapped_function.146"* %this, %"class.thrust::reference.1182"* dereferenceable(8) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %x.addr = alloca %"class.thrust::reference.1182"*, align 8
  store %"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::reference.1182"* %x, %"class.thrust::reference.1182"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::wrapped_function.146"* %this1, i32 0, i32 0
  %0 = load %"class.thrust::reference.1182"*, %"class.thrust::reference.1182"** %x.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_9referenceINS_4pairIiiEENS_7pointerIS3_NS_6system3cpp6detail3tagENS_11use_defaultES9_EES9_EEEENS_6detail13raw_referenceIKT_E4typeERSF_(%"class.thrust::reference.1182"* dereferenceable(8) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIiiEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %m_f, %"struct.thrust::pair.82"* dereferenceable(8) %call)
  ret void
}

; Function Attrs: inlinehint nounwind uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIiiEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %x) #9 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::allocator_traits_detail::gozer"*, align 8
  %x.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::detail::allocator_traits_detail::gozer"* %this, %"struct.thrust::detail::allocator_traits_detail::gozer"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %x, %"struct.thrust::pair.82"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::allocator_traits_detail::gozer"*, %"struct.thrust::detail::allocator_traits_detail::gozer"** %this.addr, align 8
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENS2_20distance_from_resultIT_T0_E4typeERKSF_RKSG_(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.1174"* %f1, %"class.thrust::detail::normal_iterator.1174"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1174"* %f2, %"class.thrust::detail::normal_iterator.1174"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEESD_EENT_15difference_typeERKSE_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  store %"class.thrust::detail::normal_iterator.1174"* %f1, %"class.thrust::detail::normal_iterator.1174"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.1174"* %f2, %"class.thrust::detail::normal_iterator.1174"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.1174"* %1 to %"class.thrust::iterator_adaptor.1175"*
  %3 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.1174"* %3 to %"class.thrust::iterator_adaptor.1175"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1175"* %2, %"class.thrust::iterator_adaptor.1175"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E11distance_toISC_SB_SA_SA_SA_SA_SA_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::iterator_adaptor.1175"* dereferenceable(8) %y) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1175"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.1175"*, align 8
  store %"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.1175"* %y, %"class.thrust::iterator_adaptor.1175"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1175"*, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.1175"*, %"class.thrust::iterator_adaptor.1175"** %y.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E4baseEv(%"class.thrust::iterator_adaptor.1175"* %0)
  %1 = bitcast %"class.thrust::pointer.1177"* %call to %"class.thrust::iterator_facade.1179"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %this1, i32 0, i32 0
  %2 = bitcast %"class.thrust::pointer.1177"* %m_iterator to %"class.thrust::iterator_facade.1179"*
  %call2 = call i64 @_ZN6thrustmiINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.1179"* dereferenceable(1) %1, %"class.thrust::iterator_facade.1179"* dereferenceable(1) %2)
  ret i64 %call2
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElS9_S3_S7_SA_SC_lEENS_6detail20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSF_IT5_T6_T7_T8_T9_T10_EEE4typeERKSM_RKST_(%"class.thrust::iterator_facade.1179"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.1179"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.1179"*, align 8
  store %"class.thrust::iterator_facade.1179"* %lhs, %"class.thrust::iterator_facade.1179"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.1179"* %rhs, %"class.thrust::iterator_facade.1179"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.1179"* %0 to %"class.thrust::pointer.1177"*
  %2 = load %"class.thrust::iterator_facade.1179"*, %"class.thrust::iterator_facade.1179"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.1179"* %2 to %"class.thrust::pointer.1177"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.1177"* dereferenceable(8) %1, %"class.thrust::pointer.1177"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENS_6detail20distance_from_resultIT_T0_E4typeERKSD_RKSE_(%"class.thrust::pointer.1177"* dereferenceable(8) %f1, %"class.thrust::pointer.1177"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::pointer.1177"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.1177"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::pointer.1177"* %f1, %"class.thrust::pointer.1177"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1177"* %f2, %"class.thrust::pointer.1177"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %f1.addr, align 8
  %1 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.1177"* dereferenceable(8) %0, %"class.thrust::pointer.1177"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EESA_EENT_15difference_typeERKSB_RKT0_NS_6detail17integral_constantIbLb1EEE(%"class.thrust::pointer.1177"* dereferenceable(8) %f1, %"class.thrust::pointer.1177"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::pointer.1177"*, align 8
  %f2.addr = alloca %"class.thrust::pointer.1177"*, align 8
  store %"class.thrust::pointer.1177"* %f1, %"class.thrust::pointer.1177"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::pointer.1177"* %f2, %"class.thrust::pointer.1177"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::pointer.1177"* %1 to %"class.thrust::iterator_adaptor.1178"*
  %3 = load %"class.thrust::pointer.1177"*, %"class.thrust::pointer.1177"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::pointer.1177"* %3 to %"class.thrust::iterator_adaptor.1178"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1178"* %2, %"class.thrust::iterator_adaptor.1178"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE11distance_toIS9_SA_S3_S7_SB_SD_lEElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.1178"* %this, %"class.thrust::iterator_adaptor.1178"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1178"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.1178"*, align 8
  store %"class.thrust::iterator_adaptor.1178"* %this, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.1178"* %y, %"class.thrust::iterator_adaptor.1178"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1178"*, %"class.thrust::iterator_adaptor.1178"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.1178"*, %"class.thrust::iterator_adaptor.1178"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElE4baseEv(%"class.thrust::iterator_adaptor.1178"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !596
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.82"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.82"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: inlinehint uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrustplINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEET_RKNS_15iterator_facadeISG_T0_T1_T2_T3_T4_EENSG_15difference_typeE(%"class.thrust::iterator_facade.1176"* dereferenceable(1) %i, i64 %n) #8 comdat {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  %i.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  %n.addr = alloca i64, align 8
  %tmp = alloca %"class.thrust::detail::normal_iterator.1174", align 8
  store %"class.thrust::iterator_facade.1176"* %i, %"class.thrust::iterator_facade.1176"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = bitcast %"class.thrust::detail::normal_iterator.1174"* %tmp to i8*
  call void @llvm.lifetime.start(i64 8, i8* %0) #5
  %1 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %i.addr, align 8
  %2 = bitcast %"class.thrust::iterator_facade.1176"* %1 to %"class.thrust::detail::normal_iterator.1174"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.1174"* %tmp to i8*
  %4 = bitcast %"class.thrust::detail::normal_iterator.1174"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 1, i1 false)
  %5 = bitcast %"class.thrust::detail::normal_iterator.1174"* %tmp to %"class.thrust::iterator_facade.1176"*
  %6 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.1176"* %5, i64 %6)
  %7 = bitcast %"class.thrust::detail::normal_iterator.1174"* %retval to i8*
  %8 = bitcast %"class.thrust::detail::normal_iterator.1174"* %call to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i32 8, i1 false)
  %9 = bitcast %"class.thrust::detail::normal_iterator.1174"* %tmp to i8*
  call void @llvm.lifetime.end(i64 8, i8* %9) #5
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1174", %"class.thrust::detail::normal_iterator.1174"* %retval, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %coerce.dive, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.1177", %"class.thrust::pointer.1177"* %coerce.dive1, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.1178", %"class.thrust::iterator_adaptor.1178"* %coerce.dive2, i32 0, i32 0
  %10 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  ret %"struct.thrust::pair.82"* %10
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElEpLEl(%"class.thrust::iterator_facade.1176"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.1176"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.1176"* %this, %"class.thrust::iterator_facade.1176"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.1176"*, %"class.thrust::iterator_facade.1176"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.1176"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.1174"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEES5_S9_NS_27random_access_traversal_tagENS_9referenceIS5_SB_SA_EElE7derivedEv(%"class.thrust::iterator_facade.1176"* %this1)
  ret %"class.thrust::detail::normal_iterator.1174"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESB_EEEEEEvRT_NSE_15difference_typeE(%"class.thrust::detail::normal_iterator.1174"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.1174"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.1174"* %f, %"class.thrust::detail::normal_iterator.1174"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.1174"*, %"class.thrust::detail::normal_iterator.1174"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1174"* %0 to %"class.thrust::iterator_adaptor.1175"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.1175"* %1, i64 %2)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultESA_EEEESB_SA_SA_SA_SA_SA_E7advanceEl(%"class.thrust::iterator_adaptor.1175"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1175"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.1175"* %this, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.1175"*, %"class.thrust::iterator_adaptor.1175"** %this.addr, align 8
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1175", %"class.thrust::iterator_adaptor.1175"* %this1, i32 0, i32 0
  %0 = bitcast %"class.thrust::pointer.1177"* %m_iterator to %"class.thrust::iterator_facade.1179"*
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::pointer.1177"* @_ZN6thrust15iterator_facadeINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EES3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEpLEl(%"class.thrust::iterator_facade.1179"* %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZNK6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::contiguous_storage.867"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.1159", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.867"*, align 8
  store %"class.thrust::detail::contiguous_storage.867"* %this, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::contiguous_storage.867"*, %"class.thrust::detail::contiguous_storage.867"** %this.addr, align 8
  %m_begin = getelementptr inbounds %"class.thrust::detail::contiguous_storage.867", %"class.thrust::detail::contiguous_storage.867"* %this1, i32 0, i32 1
  call void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE(%"class.thrust::detail::normal_iterator.1159"* %retval, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %m_begin, i8* null)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.1159", %"class.thrust::detail::normal_iterator.1159"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.922", %"class.thrust::device_ptr.922"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.923", %"class.thrust::pointer.923"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.924", %"class.thrust::iterator_adaptor.924"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEC2INS2_IS4_EEEERKNS1_IT_EEPNS0_21enable_if_convertibleISA_S6_vE4typeE(%"class.thrust::detail::normal_iterator.1159"* %this, %"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::detail::normal_iterator.1159"*, align 8
  %other.addr = alloca %"class.thrust::detail::normal_iterator.870"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"class.thrust::device_ptr.922", align 8
  store %"class.thrust::detail::normal_iterator.1159"* %this, %"class.thrust::detail::normal_iterator.1159"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::detail::normal_iterator.870"* %other, %"class.thrust::detail::normal_iterator.870"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::normal_iterator.1159"*, %"class.thrust::detail::normal_iterator.1159"** %this.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.1159"* %this1 to %"class.thrust::iterator_adaptor.1160"*
  %2 = load %"class.thrust::detail::normal_iterator.870"*, %"class.thrust::detail::normal_iterator.870"** %other.addr, align 8
  %3 = bitcast %"class.thrust::detail::normal_iterator.870"* %2 to %"class.thrust::iterator_adaptor.871"*
  %call = call dereferenceable(8) %"class.thrust::device_ptr.873"* @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEES6_NS_11use_defaultES8_S8_S8_S8_E4baseEv(%"class.thrust::iterator_adaptor.871"* %3)
  call void @_ZN6thrust10device_ptrIKNS_4pairIiiEEEC2IS2_EERKNS0_IT_EE(%"class.thrust::device_ptr.922"* %ref.tmp, %"class.thrust::device_ptr.873"* dereferenceable(8) %call)
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_(%"class.thrust::iterator_adaptor.1160"* %1, %"class.thrust::device_ptr.922"* dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust10device_ptrIKNS_4pairIiiEEEC2IS2_EERKNS0_IT_EE(%"class.thrust::device_ptr.922"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %other) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  store %"class.thrust::device_ptr.922"* %this, %"class.thrust::device_ptr.922"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %other, %"class.thrust::device_ptr.873"** %other.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %this.addr, align 8
  %0 = bitcast %"class.thrust::device_ptr.922"* %this1 to %"class.thrust::pointer.923"*
  %1 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %other.addr, align 8
  call void @_ZN6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE(%"class.thrust::pointer.923"* %0, %"class.thrust::device_ptr.873"* dereferenceable(8) %1, i8* null)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorINS_10device_ptrIKNS_4pairIiiEEEEEES7_NS_11use_defaultES9_S9_S9_S9_EC2ERKS7_(%"class.thrust::iterator_adaptor.1160"* %this, %"class.thrust::device_ptr.922"* dereferenceable(8) %iter) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.1160"*, align 8
  %iter.addr = alloca %"class.thrust::device_ptr.922"*, align 8
  store %"class.thrust::iterator_adaptor.1160"* %this, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.922"* %iter, %"class.thrust::device_ptr.922"** %iter.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.1160"*, %"class.thrust::iterator_adaptor.1160"** %this.addr, align 8
  %0 = bitcast %"class.thrust::iterator_adaptor.1160"* %this1 to %"class.thrust::iterator_facade.1161"*
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.1160", %"class.thrust::iterator_adaptor.1160"* %this1, i32 0, i32 0
  %1 = load %"class.thrust::device_ptr.922"*, %"class.thrust::device_ptr.922"** %iter.addr, align 8
  %2 = bitcast %"class.thrust::device_ptr.922"* %m_iterator to i8*
  %3 = bitcast %"class.thrust::device_ptr.922"* %1 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %3, i64 8, i32 8, i1 false)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7pointerIKNS_4pairIiiEENS_6system4cuda6detail3tagENS_16device_referenceIS3_EENS_10device_ptrIS3_EEEC2INSA_IS2_EEEERKT_PNS_6detail32enable_if_pointer_is_convertibleISF_SC_vE4typeE(%"class.thrust::pointer.923"* %this, %"class.thrust::device_ptr.873"* dereferenceable(8) %other, i8*) unnamed_addr #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::pointer.923"*, align 8
  %other.addr = alloca %"class.thrust::device_ptr.873"*, align 8
  %.addr = alloca i8*, align 8
  %ref.tmp = alloca %"struct.thrust::pair.82"*, align 8
  %agg.tmp = alloca %"class.thrust::device_ptr.873", align 8
  store %"class.thrust::pointer.923"* %this, %"class.thrust::pointer.923"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::device_ptr.873"* %other, %"class.thrust::device_ptr.873"** %other.addr, align 8, !tbaa !7
  store i8* %0, i8** %.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::pointer.923"*, %"class.thrust::pointer.923"** %this.addr, align 8
  %1 = bitcast %"class.thrust::pointer.923"* %this1 to %"class.thrust::iterator_adaptor.924"*
  %2 = load %"class.thrust::device_ptr.873"*, %"class.thrust::device_ptr.873"** %other.addr, align 8
  %3 = bitcast %"class.thrust::device_ptr.873"* %agg.tmp to i8*
  %4 = bitcast %"class.thrust::device_ptr.873"* %2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %4, i64 8, i32 8, i1 false)
  %coerce.dive = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %agg.tmp, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive2, i32 0, i32 0
  %5 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail14pointer_traitsINS_10device_ptrINS_4pairIiiEEEEE3getES5_(%"struct.thrust::pair.82"* %5)
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %ref.tmp, align 8, !tbaa !1
  call void @_ZN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEC2ERKS6_(%"class.thrust::iterator_adaptor.924"* %1, %"struct.thrust::pair.82"** dereferenceable(8) %ref.tmp)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE3endEv(%"class.thrust::detail::vector_base.866"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.870", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.866"*, align 8
  store %"class.thrust::detail::vector_base.866"* %this, %"class.thrust::detail::vector_base.866"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.866"*, %"class.thrust::detail::vector_base.866"** %this.addr, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE5beginEv(%"class.thrust::detail::vector_base.866"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive2, i32 0, i32 0
  %coerce.dive4 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive3, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive4, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  %call6 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEE4sizeEv(%"class.thrust::detail::vector_base.866"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.870"* dereferenceable(8) %retval, i64 %call6)
  %coerce.dive7 = getelementptr inbounds %"class.thrust::detail::normal_iterator.870", %"class.thrust::detail::normal_iterator.870"* %retval, i32 0, i32 0
  %coerce.dive8 = getelementptr inbounds %"class.thrust::iterator_adaptor.871", %"class.thrust::iterator_adaptor.871"* %coerce.dive7, i32 0, i32 0
  %coerce.dive9 = getelementptr inbounds %"class.thrust::device_ptr.873", %"class.thrust::device_ptr.873"* %coerce.dive8, i32 0, i32 0
  %coerce.dive10 = getelementptr inbounds %"class.thrust::pointer.874", %"class.thrust::pointer.874"* %coerce.dive9, i32 0, i32 0
  %coerce.dive11 = getelementptr inbounds %"class.thrust::iterator_adaptor.875", %"class.thrust::iterator_adaptor.875"* %coerce.dive10, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive11, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EE7destroyENS0_15normal_iteratorIPS3_EES8_(%"class.thrust::detail::contiguous_storage.846"* %this, %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"* %last.coerce) #0 comdat align 2 {
entry:
  %first = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %last = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %this.addr = alloca %"class.thrust::detail::contiguous_storage.846"*, align 8
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %first, i32 0, i32 0
  %coerce.dive1 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %first.coerce, %"struct.thrust::pair.82"** %coerce.dive1, align 8
  %coerce.dive2 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %last, i32 0, i32 0
  %coerce.dive3 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive2, i32 0, i32 0
  store %"struct.thrust::pair.82"* %last.coerce, %"struct.thrust::pair.82"** %coerce.dive3, align 8
  store %"class.thrust::detail::contiguous_storage.846"* %this, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8, !tbaa !1
  %this4 = load %"class.thrust::detail::contiguous_storage.846"*, %"class.thrust::detail::contiguous_storage.846"** %this.addr, align 8
  %m_allocator = getelementptr inbounds %"class.thrust::detail::contiguous_storage.846", %"class.thrust::detail::contiguous_storage.846"* %this4, i32 0, i32 0
  %0 = bitcast %"class.thrust::detail::normal_iterator.850"* %first to %"class.thrust::iterator_adaptor.851"*
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.851"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %2 = bitcast %"class.thrust::detail::normal_iterator.850"* %last to %"class.thrust::iterator_facade.852"*
  %3 = bitcast %"class.thrust::detail::normal_iterator.850"* %first to %"class.thrust::iterator_facade.852"*
  %call5 = call i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.852"* dereferenceable(1) %2, %"class.thrust::iterator_facade.852"* dereferenceable(1) %3)
  call void @_ZN6thrust6detail13destroy_rangeISaINS_4pairIiiEEEPS3_lEEvRT_T0_T1_(%"class.std::allocator.847"* dereferenceable(1) %m_allocator, %"struct.thrust::pair.82"* %1, i64 %call5)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE3endEv(%"class.thrust::detail::vector_base.845"* %this) #0 comdat align 2 {
entry:
  %retval = alloca %"class.thrust::detail::normal_iterator.850", align 8
  %this.addr = alloca %"class.thrust::detail::vector_base.845"*, align 8
  store %"class.thrust::detail::vector_base.845"* %this, %"class.thrust::detail::vector_base.845"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.thrust::detail::vector_base.845"*, %"class.thrust::detail::vector_base.845"** %this.addr, align 8
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE5beginEv(%"class.thrust::detail::vector_base.845"* %this1)
  %coerce.dive = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive2 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive, i32 0, i32 0
  store %"struct.thrust::pair.82"* %call, %"struct.thrust::pair.82"** %coerce.dive2, align 8
  %call3 = call i64 @_ZNK6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EE4sizeEv(%"class.thrust::detail::vector_base.845"* %this1)
  call void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %retval, i64 %call3)
  %coerce.dive4 = getelementptr inbounds %"class.thrust::detail::normal_iterator.850", %"class.thrust::detail::normal_iterator.850"* %retval, i32 0, i32 0
  %coerce.dive5 = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %coerce.dive4, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %coerce.dive5, align 8
  ret %"struct.thrust::pair.82"* %0
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail13destroy_rangeISaINS_4pairIiiEEEPS3_lEEvRT_T0_T1_(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIiiEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_(%"class.std::allocator.847"* dereferenceable(1) %0, %"struct.thrust::pair.82"* %1, i64 %2)
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr i64 @_ZN6thrustmiINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lS6_S4_SA_SB_SC_lEENS1_20distance_from_resultINS_15iterator_facadeIT_T0_T1_T2_T3_T4_EENSE_IT5_T6_T7_T8_T9_T10_EEE4typeERKSL_RKSS_(%"class.thrust::iterator_facade.852"* dereferenceable(1) %lhs, %"class.thrust::iterator_facade.852"* dereferenceable(1) %rhs) #8 comdat {
entry:
  %lhs.addr = alloca %"class.thrust::iterator_facade.852"*, align 8
  %rhs.addr = alloca %"class.thrust::iterator_facade.852"*, align 8
  store %"class.thrust::iterator_facade.852"* %lhs, %"class.thrust::iterator_facade.852"** %lhs.addr, align 8, !tbaa !7
  store %"class.thrust::iterator_facade.852"* %rhs, %"class.thrust::iterator_facade.852"** %rhs.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::iterator_facade.852"*, %"class.thrust::iterator_facade.852"** %lhs.addr, align 8
  %1 = bitcast %"class.thrust::iterator_facade.852"* %0 to %"class.thrust::detail::normal_iterator.850"*
  %2 = load %"class.thrust::iterator_facade.852"*, %"class.thrust::iterator_facade.852"** %rhs.addr, align 8
  %3 = bitcast %"class.thrust::iterator_facade.852"* %2 to %"class.thrust::detail::normal_iterator.850"*
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIiiEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %1, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %3)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6detail23allocator_traits_detail13destroy_rangeISaINS_4pairIiiEEEPS4_lEENS1_29enable_if_destroy_range_case2IT_T0_E4typeERS8_S9_T1_(%"class.std::allocator.847"* dereferenceable(1) %a, %"struct.thrust::pair.82"* %p, i64 %n) #0 comdat {
entry:
  %a.addr = alloca %"class.std::allocator.847"*, align 8
  %p.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  %ref.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %undef.agg.tmp = alloca %"struct.thrust::system::cpp::detail::tag", align 1
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  store %"class.std::allocator.847"* %a, %"class.std::allocator.847"** %a.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %p, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.std::allocator.847"*, %"class.std::allocator.847"** %a.addr, align 8
  call void @_ZN6thrust6detail16allocator_systemISaINS_4pairIiiEEEE3getERS4_(%"class.std::allocator.847"* dereferenceable(1) %0)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %ref.tmp to %"struct.thrust::detail::execution_policy_base.85"*
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIiiEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust10for_each_nINS_6system3cpp6detail3tagEPNS_4pairIiiEElNS_6detail23allocator_traits_detail5gozerEEET0_RKNS8_21execution_policy_baseIT_EESB_T1_T2_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %exec, %"struct.thrust::pair.82"* %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %exec.addr = alloca %"struct.thrust::detail::execution_policy_base.85"*, align 8
  %first.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  store %"struct.thrust::detail::execution_policy_base.85"* %exec, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"struct.thrust::detail::execution_policy_base.85"*, %"struct.thrust::detail::execution_policy_base.85"** %exec.addr, align 8
  %call = call dereferenceable(1) %"struct.thrust::detail::execution_policy_base.85"* @_ZN6thrust6detail11strip_constINS_6system3cpp6detail3tagEEERNS0_21execution_policy_baseIT_EERKS8_(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %0)
  %call1 = call dereferenceable(1) %"struct.thrust::system::cpp::detail::tag"* @_ZN6thrust6detail12derived_castINS_6system3cpp6detail3tagEEERT_RNS0_21execution_policy_baseIS6_EE(%"struct.thrust::detail::execution_policy_base.85"* dereferenceable(1) %call)
  %1 = bitcast %"struct.thrust::system::cpp::detail::tag"* %call1 to %"struct.thrust::system::detail::sequential::execution_policy.87"*
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call2 = call %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIiiEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1) %1, %"struct.thrust::pair.82"* %2, i64 %3)
  ret %"struct.thrust::pair.82"* %call2
}

; Function Attrs: uwtable
define linkonce_odr %"struct.thrust::pair.82"* @_ZN6thrust6system6detail10sequential10for_each_nINS0_3cpp6detail3tagEPNS_4pairIiiEElNS_6detail23allocator_traits_detail5gozerEEET0_RNS2_16execution_policyIT_EESD_T1_T2_(%"struct.thrust::system::detail::sequential::execution_policy.87"* dereferenceable(1), %"struct.thrust::pair.82"* %first, i64 %n) #0 comdat {
entry:
  %f = alloca %"struct.thrust::detail::allocator_traits_detail::gozer", align 1
  %.addr = alloca %"struct.thrust::system::detail::sequential::execution_policy.87"*, align 8
  %first.addr = alloca %"struct.thrust::pair.82"*, align 8
  %n.addr = alloca i64, align 8
  %wrapped_f = alloca %"struct.thrust::detail::wrapped_function.146", align 1
  %i = alloca i64, align 8
  store %"struct.thrust::system::detail::sequential::execution_policy.87"* %0, %"struct.thrust::system::detail::sequential::execution_policy.87"** %.addr, align 8, !tbaa !7
  store %"struct.thrust::pair.82"* %first, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.start(i64 1, i8* %1) #5
  call void @_ZN6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEC2ERKS3_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::detail::allocator_traits_detail::gozer"* dereferenceable(1) %f)
  %2 = bitcast i64* %i to i8*
  call void @llvm.lifetime.start(i64 8, i8* %2) #5
  store i64 0, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.cond:                                         ; preds = %for.inc, %entry
  %3 = load i64, i64* %i, align 8, !tbaa !13
  %4 = load i64, i64* %n.addr, align 8, !tbaa !13
  %cmp = icmp ne i64 %3, %4
  br i1 %cmp, label %for.body, label %for.cond.cleanup

for.cond.cleanup:                                 ; preds = %for.cond
  %5 = bitcast i64* %i to i8*
  call void @llvm.lifetime.end(i64 8, i8* %5) #5
  br label %for.end

for.body:                                         ; preds = %for.cond
  %6 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  call void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIiiEEEEvRT_(%"struct.thrust::detail::wrapped_function.146"* %wrapped_f, %"struct.thrust::pair.82"* dereferenceable(8) %6)
  %7 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %incdec.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %7, i32 1
  store %"struct.thrust::pair.82"* %incdec.ptr, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  br label %for.inc

for.inc:                                          ; preds = %for.body
  %8 = load i64, i64* %i, align 8, !tbaa !13
  %inc = add nsw i64 %8, 1
  store i64 %inc, i64* %i, align 8, !tbaa !13
  br label %for.cond

for.end:                                          ; preds = %for.cond.cleanup
  %9 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %first.addr, align 8, !tbaa !1
  %10 = bitcast %"struct.thrust::detail::wrapped_function.146"* %wrapped_f to i8*
  call void @llvm.lifetime.end(i64 1, i8* %10) #5
  ret %"struct.thrust::pair.82"* %9
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZNK6thrust6detail16wrapped_functionINS0_23allocator_traits_detail5gozerEvEclINS_4pairIiiEEEEvRT_(%"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::pair.82"* dereferenceable(8) %x) #8 comdat align 2 {
entry:
  %this.addr = alloca %"struct.thrust::detail::wrapped_function.146"*, align 8
  %x.addr = alloca %"struct.thrust::pair.82"*, align 8
  store %"struct.thrust::detail::wrapped_function.146"* %this, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8, !tbaa !1
  store %"struct.thrust::pair.82"* %x, %"struct.thrust::pair.82"** %x.addr, align 8, !tbaa !7
  %this1 = load %"struct.thrust::detail::wrapped_function.146"*, %"struct.thrust::detail::wrapped_function.146"** %this.addr, align 8
  %m_f = getelementptr inbounds %"struct.thrust::detail::wrapped_function.146", %"struct.thrust::detail::wrapped_function.146"* %this1, i32 0, i32 0
  %0 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %x.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"* @_ZN6thrust18raw_reference_castINS_4pairIiiEEEENS_6detail13raw_referenceIT_E4typeERS5_(%"struct.thrust::pair.82"* dereferenceable(8) %0)
  call void @_ZN6thrust6detail23allocator_traits_detail5gozerclINS_4pairIiiEEEEvRT_(%"struct.thrust::detail::allocator_traits_detail::gozer"* %m_f, %"struct.thrust::pair.82"* dereferenceable(8) %call)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIiiEEEES7_EENS2_20distance_from_resultIT_T0_E4typeERKS9_RKSA_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %agg.tmp = alloca %"struct.thrust::detail::integral_constant", align 1
  store %"class.thrust::detail::normal_iterator.850"* %f1, %"class.thrust::detail::normal_iterator.850"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.850"* %f2, %"class.thrust::detail::normal_iterator.850"** %f2.addr, align 8, !tbaa !7
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %f1.addr, align 8
  %1 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %f2.addr, align 8
  %call = call i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIiiEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %0, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %1)
  ret i64 %call
}

; Function Attrs: uwtable
define linkonce_odr i64 @_ZN6thrust20iterator_core_access13distance_fromINS_6detail15normal_iteratorIPNS_4pairIiiEEEES7_EENT_15difference_typeERKS8_RKT0_NS2_17integral_constantIbLb1EEE(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %f1, %"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %f2) #0 comdat align 2 {
entry:
  %0 = alloca %"struct.thrust::detail::integral_constant", align 1
  %f1.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %f2.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  store %"class.thrust::detail::normal_iterator.850"* %f1, %"class.thrust::detail::normal_iterator.850"** %f1.addr, align 8, !tbaa !7
  store %"class.thrust::detail::normal_iterator.850"* %f2, %"class.thrust::detail::normal_iterator.850"** %f2.addr, align 8, !tbaa !7
  %1 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %f1.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.850"* %1 to %"class.thrust::iterator_adaptor.851"*
  %3 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %f2.addr, align 8
  %4 = bitcast %"class.thrust::detail::normal_iterator.850"* %3 to %"class.thrust::iterator_adaptor.851"*
  %call = call i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.851"* %2, %"class.thrust::iterator_adaptor.851"* dereferenceable(8) %4)
  %sub = sub nsw i64 0, %call
  ret i64 %sub
}

; Function Attrs: nounwind uwtable
define linkonce_odr i64 @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E11distance_toIS6_S5_S7_S7_S7_S7_S7_EElRKNS0_IT_T0_T1_T2_T3_T4_T5_EE(%"class.thrust::iterator_adaptor.851"* %this, %"class.thrust::iterator_adaptor.851"* dereferenceable(8) %y) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.851"*, align 8
  %y.addr = alloca %"class.thrust::iterator_adaptor.851"*, align 8
  store %"class.thrust::iterator_adaptor.851"* %this, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8, !tbaa !1
  store %"class.thrust::iterator_adaptor.851"* %y, %"class.thrust::iterator_adaptor.851"** %y.addr, align 8, !tbaa !7
  %this1 = load %"class.thrust::iterator_adaptor.851"*, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8
  %0 = load %"class.thrust::iterator_adaptor.851"*, %"class.thrust::iterator_adaptor.851"** %y.addr, align 8
  %call = call dereferenceable(8) %"struct.thrust::pair.82"** @_ZNK6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E4baseEv(%"class.thrust::iterator_adaptor.851"* %0)
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %call, align 8, !tbaa !1
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %this1, i32 0, i32 0
  %2 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !491
  %sub.ptr.lhs.cast = ptrtoint %"struct.thrust::pair.82"* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint %"struct.thrust::pair.82"* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  ret i64 %sub.ptr.div
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.850"* %i, %"class.thrust::detail::normal_iterator.850"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %i.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %n.addr = alloca i64, align 8
  %agg.tmp = alloca %"struct.thrust::random_access_traversal_tag", align 1
  store %"class.thrust::detail::normal_iterator.850"* %i, %"class.thrust::detail::normal_iterator.850"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %i.addr, align 8
  %1 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %0, i64 %1)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust6system6detail7generic6detail7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEmEEvRT_T0_NS_27random_access_traversal_tagE(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %i, i64 %n) #0 comdat {
entry:
  %0 = alloca %"struct.thrust::random_access_traversal_tag", align 1
  %i.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.850"* %i, %"class.thrust::detail::normal_iterator.850"** %i.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %1 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %i.addr, align 8
  %2 = bitcast %"class.thrust::detail::normal_iterator.850"* %1 to %"class.thrust::iterator_facade.852"*
  %3 = load i64, i64* %n.addr, align 8, !tbaa !13
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl(%"class.thrust::iterator_facade.852"* %2, i64 %3)
  ret void
}

; Function Attrs: uwtable
define linkonce_odr dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lEpLEl(%"class.thrust::iterator_facade.852"* %this, i64 %n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_facade.852"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_facade.852"* %this, %"class.thrust::iterator_facade.852"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_facade.852"*, %"class.thrust::iterator_facade.852"** %this.addr, align 8
  %call = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.852"* %this1)
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEEvRT_NS8_15difference_typeE(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %call, i64 %0)
  %call2 = call dereferenceable(8) %"class.thrust::detail::normal_iterator.850"* @_ZN6thrust15iterator_facadeINS_6detail15normal_iteratorIPNS_4pairIiiEEEES4_NS_6system3cpp6detail3tagENS_27random_access_traversal_tagERS4_lE7derivedEv(%"class.thrust::iterator_facade.852"* %this1)
  ret %"class.thrust::detail::normal_iterator.850"* %call2
}

; Function Attrs: uwtable
define linkonce_odr void @_ZN6thrust20iterator_core_access7advanceINS_6detail15normal_iteratorIPNS_4pairIiiEEEEEEvRT_NS8_15difference_typeE(%"class.thrust::detail::normal_iterator.850"* dereferenceable(8) %f, i64 %n) #0 comdat align 2 {
entry:
  %f.addr = alloca %"class.thrust::detail::normal_iterator.850"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::detail::normal_iterator.850"* %f, %"class.thrust::detail::normal_iterator.850"** %f.addr, align 8, !tbaa !7
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %0 = load %"class.thrust::detail::normal_iterator.850"*, %"class.thrust::detail::normal_iterator.850"** %f.addr, align 8
  %1 = bitcast %"class.thrust::detail::normal_iterator.850"* %0 to %"class.thrust::iterator_adaptor.851"*
  %2 = load i64, i64* %n.addr, align 8, !tbaa !13
  call void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl(%"class.thrust::iterator_adaptor.851"* %1, i64 %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_E7advanceEl(%"class.thrust::iterator_adaptor.851"* %this, i64 %n) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.thrust::iterator_adaptor.851"*, align 8
  %n.addr = alloca i64, align 8
  store %"class.thrust::iterator_adaptor.851"* %this, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8, !tbaa !1
  store i64 %n, i64* %n.addr, align 8, !tbaa !13
  %this1 = load %"class.thrust::iterator_adaptor.851"*, %"class.thrust::iterator_adaptor.851"** %this.addr, align 8
  %0 = load i64, i64* %n.addr, align 8, !tbaa !13
  %m_iterator = getelementptr inbounds %"class.thrust::iterator_adaptor.851", %"class.thrust::iterator_adaptor.851"* %this1, i32 0, i32 0
  %1 = load %"struct.thrust::pair.82"*, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !491
  %add.ptr = getelementptr inbounds %"struct.thrust::pair.82", %"struct.thrust::pair.82"* %1, i64 %0
  store %"struct.thrust::pair.82"* %add.ptr, %"struct.thrust::pair.82"** %m_iterator, align 8, !tbaa !491
  ret void
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZSt8_DestroyIPmmEvT_S1_RSaIT0_E(i64* %__first, i64* %__last, %"class.std::allocator.38"* dereferenceable(1)) #8 comdat {
entry:
  %__first.addr = alloca i64*, align 8
  %__last.addr = alloca i64*, align 8
  %.addr = alloca %"class.std::allocator.38"*, align 8
  store i64* %__first, i64** %__first.addr, align 8, !tbaa !1
  store i64* %__last, i64** %__last.addr, align 8, !tbaa !1
  store %"class.std::allocator.38"* %0, %"class.std::allocator.38"** %.addr, align 8, !tbaa !7
  %1 = load i64*, i64** %__first.addr, align 8, !tbaa !1
  %2 = load i64*, i64** %__last.addr, align 8, !tbaa !1
  call void @_ZSt8_DestroyIPmEvT_S1_(i64* %1, i64* %2)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr dereferenceable(1) %"class.std::allocator.38"* @_ZNSt12_Vector_baseImSaImEE19_M_get_Tp_allocatorEv(%"struct.std::_Vector_base"* %this) #1 comdat align 2 {
entry:
  %this.addr = alloca %"struct.std::_Vector_base"*, align 8
  store %"struct.std::_Vector_base"* %this, %"struct.std::_Vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.std::_Vector_base"*, %"struct.std::_Vector_base"** %this.addr, align 8
  %_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
  %0 = bitcast %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl to %"class.std::allocator.38"*
  ret %"class.std::allocator.38"* %0
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSt12_Vector_baseImSaImEED2Ev(%"struct.std::_Vector_base"* %this) unnamed_addr #1 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
  %this.addr = alloca %"struct.std::_Vector_base"*, align 8
  %exn.slot = alloca i8*
  %ehselector.slot = alloca i32
  store %"struct.std::_Vector_base"* %this, %"struct.std::_Vector_base"** %this.addr, align 8, !tbaa !1
  %this1 = load %"struct.std::_Vector_base"*, %"struct.std::_Vector_base"** %this.addr, align 8
  %_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
  %_M_start = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl, i32 0, i32 0
  %0 = load i64*, i64** %_M_start, align 8, !tbaa !22
  %_M_impl2 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
  %_M_end_of_storage = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl2, i32 0, i32 2
  %1 = load i64*, i64** %_M_end_of_storage, align 8, !tbaa !603
  %_M_impl3 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
  %_M_start4 = getelementptr inbounds %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl", %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl3, i32 0, i32 0
  %2 = load i64*, i64** %_M_start4, align 8, !tbaa !22
  %sub.ptr.lhs.cast = ptrtoint i64* %1 to i64
  %sub.ptr.rhs.cast = ptrtoint i64* %2 to i64
  %sub.ptr.sub = sub i64 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast
  %sub.ptr.div = sdiv exact i64 %sub.ptr.sub, 8
  invoke void @_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm(%"struct.std::_Vector_base"* %this1, i64* %0, i64 %sub.ptr.div)
          to label %invoke.cont unwind label %lpad

invoke.cont:                                      ; preds = %entry
  %_M_impl5 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.39"*)* @_ZN9__gnu_cxx13new_allocatorImED2Ev to void (%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"*)*)(%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl5) #5
  ret void

lpad:                                             ; preds = %entry
  %3 = landingpad { i8*, i32 }
          cleanup
          filter [0 x i8*] zeroinitializer
  %4 = extractvalue { i8*, i32 } %3, 0
  store i8* %4, i8** %exn.slot, align 8
  %5 = extractvalue { i8*, i32 } %3, 1
  store i32 %5, i32* %ehselector.slot, align 4
  %_M_impl6 = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
  call void bitcast (void (%"class.__gnu_cxx::new_allocator.39"*)* @_ZN9__gnu_cxx13new_allocatorImED2Ev to void (%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"*)*)(%"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl6) #5
  br label %filter.dispatch

filter.dispatch:                                  ; preds = %lpad
  %exn = load i8*, i8** %exn.slot, align 8
  call void @__cxa_call_unexpected(i8* %exn) #15
  unreachable
}

; Function Attrs: inlinehint uwtable
define linkonce_odr void @_ZSt8_DestroyIPmEvT_S1_(i64* %__first, i64* %__last) #8 comdat {
entry:
  %__first.addr = alloca i64*, align 8
  %__last.addr = alloca i64*, align 8
  store i64* %__first, i64** %__first.addr, align 8, !tbaa !1
  store i64* %__last, i64** %__last.addr, align 8, !tbaa !1
  %0 = load i64*, i64** %__first.addr, align 8, !tbaa !1
  %1 = load i64*, i64** %__last.addr, align 8, !tbaa !1
  call void @_ZNSt12_Destroy_auxILb1EE9__destroyIPmEEvT_S3_(i64* %0, i64* %1)
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZNSt12_Destroy_auxILb1EE9__destroyIPmEEvT_S3_(i64*, i64*) #1 comdat align 2 {
entry:
  %.addr = alloca i64*, align 8
  %.addr1 = alloca i64*, align 8
  store i64* %0, i64** %.addr, align 8, !tbaa !1
  store i64* %1, i64** %.addr1, align 8, !tbaa !1
  ret void
}

; Function Attrs: uwtable
define linkonce_odr void @_ZNSt12_Vector_baseImSaImEE13_M_deallocateEPmm(%"struct.std::_Vector_base"* %this, i64* %__p, i64 %__n) #0 comdat align 2 {
entry:
  %this.addr = alloca %"struct.std::_Vector_base"*, align 8
  %__p.addr = alloca i64*, align 8
  %__n.addr = alloca i64, align 8
  store %"struct.std::_Vector_base"* %this, %"struct.std::_Vector_base"** %this.addr, align 8, !tbaa !1
  store i64* %__p, i64** %__p.addr, align 8, !tbaa !1
  store i64 %__n, i64* %__n.addr, align 8, !tbaa !13
  %this1 = load %"struct.std::_Vector_base"*, %"struct.std::_Vector_base"** %this.addr, align 8
  %0 = load i64*, i64** %__p.addr, align 8, !tbaa !1
  %tobool = icmp ne i64* %0, null
  br i1 %tobool, label %if.then, label %if.end

if.then:                                          ; preds = %entry
  %_M_impl = getelementptr inbounds %"struct.std::_Vector_base", %"struct.std::_Vector_base"* %this1, i32 0, i32 0
  %1 = bitcast %"struct.std::_Vector_base<unsigned long, std::allocator<unsigned long> >::_Vector_impl"* %_M_impl to %"class.__gnu_cxx::new_allocator.39"*
  %2 = load i64*, i64** %__p.addr, align 8, !tbaa !1
  %3 = load i64, i64* %__n.addr, align 8, !tbaa !13
  call void @_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm(%"class.__gnu_cxx::new_allocator.39"* %1, i64* %2, i64 %3)
  br label %if.end

if.end:                                           ; preds = %if.then, %entry
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorImED2Ev(%"class.__gnu_cxx::new_allocator.39"* %this) unnamed_addr #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.39"*, align 8
  store %"class.__gnu_cxx::new_allocator.39"* %this, %"class.__gnu_cxx::new_allocator.39"** %this.addr, align 8, !tbaa !1
  %this1 = load %"class.__gnu_cxx::new_allocator.39"*, %"class.__gnu_cxx::new_allocator.39"** %this.addr, align 8
  ret void
}

; Function Attrs: nounwind uwtable
define linkonce_odr void @_ZN9__gnu_cxx13new_allocatorImE10deallocateEPmm(%"class.__gnu_cxx::new_allocator.39"* %this, i64* %__p, i64) #1 comdat align 2 {
entry:
  %this.addr = alloca %"class.__gnu_cxx::new_allocator.39"*, align 8
  %__p.addr = alloca i64*, align 8
  %.addr = alloca i64, align 8
  store %"class.__gnu_cxx::new_allocator.39"* %this, %"class.__gnu_cxx::new_allocator.39"** %this.addr, align 8, !tbaa !1
  store i64* %__p, i64** %__p.addr, align 8, !tbaa !1
  store i64 %0, i64* %.addr, align 8, !tbaa !13
  %this1 = load %"class.__gnu_cxx::new_allocator.39"*, %"class.__gnu_cxx::new_allocator.39"** %this.addr, align 8
  %1 = load i64*, i64** %__p.addr, align 8, !tbaa !1
  %2 = bitcast i64* %1 to i8*
  call void @_ZdlPv(i8* %2) #5
  ret void
}

; Function Attrs: uwtable
define internal void @_GLOBAL__sub_I_pair_scan_by_key.cui() #0 section ".text.startup" {
entry:
  call void @__cxx_global_var_init()
  call void @__cxx_global_var_init.1()
  call void @__cxx_global_var_init.2()
  call void @__cxx_global_var_init.3()
  call void @__cxx_global_var_init.4()
  call void @__cxx_global_var_init.5()
  call void @__cxx_global_var_init.6()
  call void @__cxx_global_var_init.7()
  call void @__cxx_global_var_init.8()
  call void @__cxx_global_var_init.9()
  call void @__cxx_global_var_init.10()
  call void @__cxx_global_var_init.11()
  call void @__cxx_global_var_init.12()
  call void @__cxx_global_var_init.13()
  call void @__cxx_global_var_init.14()
  call void @__cxx_global_var_init.15()
  call void @__cxx_global_var_init.16()
  call void @__cxx_global_var_init.17()
  call void @__cxx_global_var_init.18()
  ret void
}

attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #2 = { argmemonly nounwind }
attributes #3 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #4 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #5 = { nounwind }
attributes #6 = { noinline noreturn nounwind }
attributes #7 = { nounwind readnone }
attributes #8 = { inlinehint uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #9 = { inlinehint nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #10 = { nobuiltin nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #11 = { noreturn "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #12 = { nobuiltin "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #13 = { noreturn nounwind }
attributes #14 = { builtin nounwind }
attributes #15 = { noreturn }

!llvm.ident = !{!0}

!0 = !{!"clang version 3.9.0 (trunk 272402) (llvm/trunk 272355)"}
!1 = !{!2, !2, i64 0}
!2 = !{!"any pointer", !3, i64 0}
!3 = !{!"omnipotent char", !4, i64 0}
!4 = !{!"Simple C++ TBAA"}
!5 = !{!6, !6, i64 0}
!6 = !{!"vtable pointer", !4, i64 0}
!7 = !{!3, !3, i64 0}
!8 = !{!9, !2, i64 0}
!9 = !{!"_ZTSSs", !10, i64 0}
!10 = !{!"_ZTSNSs12_Alloc_hiderE", !2, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !3, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !3, i64 0}
!15 = !{!16, !14, i64 0}
!16 = !{!"_ZTSNSs9_Rep_baseE", !14, i64 0, !14, i64 8, !12, i64 16}
!17 = !{!18, !2, i64 8}
!18 = !{!"_ZTSSt9type_info", !2, i64 8}
!19 = !{!20, !2, i64 8}
!20 = !{!"_ZTSSt12_Vector_baseImSaImEE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseImSaImEE12_Vector_implE", !2, i64 0, !2, i64 8, !2, i64 16}
!22 = !{!20, !2, i64 0}
!23 = !{i64 0, i64 1, !7, i64 1, i64 1, !7}
!24 = !{!25, !12, i64 0}
!25 = !{!"_ZTSN6thrust4pairIiiEE", !12, i64 0, !12, i64 4}
!26 = !{!27, !3, i64 0}
!27 = !{!"_ZTSN6thrust4pairIaaEE", !3, i64 0, !3, i64 1}
!28 = !{!25, !12, i64 4}
!29 = !{!27, !3, i64 1}
!30 = !{!31, !14, i64 24}
!31 = !{!"_ZTSN6thrust6detail11vector_baseIaSaIaEEE", !32, i64 0, !14, i64 24}
!32 = !{!"_ZTSN6thrust6detail18contiguous_storageIaSaIaEEE", !33, i64 0, !34, i64 8, !14, i64 16}
!33 = !{!"_ZTSSaIaE"}
!34 = !{!"_ZTSN6thrust6detail15normal_iteratorIPaEE"}
!35 = !{!32, !14, i64 16}
!36 = !{!37, !2, i64 0}
!37 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPaEES3_NS_11use_defaultES5_S5_S5_S5_EE", !2, i64 0}
!38 = !{i64 0, i64 1, !7}
!39 = !{!40, !3, i64 0}
!40 = !{!"_ZTSN6thrust6detail12fill_functorIaEE", !3, i64 0}
!41 = !{}
!42 = !{!43, !12, i64 0}
!43 = !{!"_ZTSN6thrust6random26linear_congruential_engineIjLj48271ELj0ELj2147483647EEE", !12, i64 0}
!44 = !{!45, !45, i64 0}
!45 = !{!"double", !3, i64 0}
!46 = !{!47, !45, i64 0}
!47 = !{!"_ZTSN6thrust4pairIddEE", !45, i64 0, !45, i64 8}
!48 = !{!47, !45, i64 8}
!49 = !{!50, !14, i64 0}
!50 = !{!"_ZTSN6thrust6detail4consImNS1_IRaNS_9null_typeEEEEE", !14, i64 0, !51, i64 8}
!51 = !{!"_ZTSN6thrust6detail4consIRaNS_9null_typeEEE", !3, i64 0}
!52 = !{!53, !14, i64 0}
!53 = !{!"_ZTSN6thrust16iterator_adaptorINS_17counting_iteratorImNS_11use_defaultES2_S2_EEmmNS_14any_system_tagENS_27random_access_traversal_tagEmxEE", !14, i64 0}
!54 = !{!55, !14, i64 24}
!55 = !{!"_ZTSN6thrust6detail11vector_baseINS_4pairIaaEESaIS3_EEE", !56, i64 0, !14, i64 24}
!56 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIaaEESaIS3_EEE", !57, i64 0, !58, i64 8, !14, i64 16}
!57 = !{!"_ZTSSaIN6thrust4pairIaaEEE"}
!58 = !{!"_ZTSN6thrust6detail15normal_iteratorIPNS_4pairIaaEEEE"}
!59 = !{!56, !14, i64 16}
!60 = !{!61, !2, i64 0}
!61 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIaaEEEES5_NS_11use_defaultES7_S7_S7_S7_EE", !2, i64 0}
!62 = !{i64 0, i64 8, !7}
!63 = !{!64, !14, i64 24}
!64 = !{!"_ZTSN6thrust6detail11vector_baseIaNS_23device_malloc_allocatorIaEEEE", !65, i64 0, !14, i64 24}
!65 = !{!"_ZTSN6thrust6detail18contiguous_storageIaNS_23device_malloc_allocatorIaEEEE", !66, i64 0, !67, i64 8, !14, i64 16}
!66 = !{!"_ZTSN6thrust23device_malloc_allocatorIaEE"}
!67 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_10device_ptrIaEEEE"}
!68 = !{!65, !14, i64 16}
!69 = !{!70, !2, i64 0}
!70 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIaEEPaaNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIaEElEE", !2, i64 0}
!71 = !{!72, !2, i64 0}
!72 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKaEES4_NS_11use_defaultES6_S6_S6_S6_EE", !2, i64 0}
!73 = !{!74, !74, i64 0}
!74 = !{!"_ZTS9cudaError", !3, i64 0}
!75 = !{!76, !76, i64 0}
!76 = !{!"bool", !3, i64 0}
!77 = !{i8 0, i8 2}
!78 = !{!79, !12, i64 0}
!79 = !{!"_ZTSN6thrust6system15error_conditionE", !12, i64 0, !2, i64 8}
!80 = !{!79, !2, i64 8}
!81 = !{!82, !82, i64 0}
!82 = !{!"_ZTSN6thrust6system4cuda4errc6errc_tE", !3, i64 0}
!83 = !{!84, !84, i64 0}
!84 = !{!"_ZTSN6thrust6system4errc6errc_tE", !3, i64 0}
!85 = !{!86, !2, i64 8}
!86 = !{!"_ZTSN6thrust6system10error_codeE", !12, i64 0, !2, i64 8}
!87 = !{!86, !12, i64 0}
!88 = !{!10, !2, i64 0}
!89 = !{!90, !2, i64 0}
!90 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIvEEPvvNS_6system4cuda6detail3tagENS_27random_access_traversal_tagEvlEE", !2, i64 0}
!91 = !{!92, !2, i64 0}
!92 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerIvNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEE", !2, i64 0}
!93 = !{!94, !2, i64 0}
!94 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerIaNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPaaS5_NS_27random_access_traversal_tagENS_9referenceIaS7_S6_EElEE", !2, i64 0}
!95 = !{!96, !2, i64 0}
!96 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIKaEEPS2_aNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEE", !2, i64 0}
!97 = !{!98, !98, i64 0}
!98 = !{!"_ZTS14cudaMemcpyKind", !3, i64 0}
!99 = !{!100, !14, i64 24}
!100 = !{!"_ZTSN6thrust6detail11vector_baseINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEE", !101, i64 0, !14, i64 24}
!101 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIaaEENS_23device_malloc_allocatorIS3_EEEE", !102, i64 0, !103, i64 8, !14, i64 16}
!102 = !{!"_ZTSN6thrust23device_malloc_allocatorINS_4pairIaaEEEE"}
!103 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEE"}
!104 = !{!101, !14, i64 16}
!105 = !{!106, !2, i64 0}
!106 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIaaEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEE", !2, i64 0}
!107 = !{!108, !2, i64 0}
!108 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIaaEEEES6_NS_11use_defaultES8_S8_S8_S8_EE", !2, i64 0}
!109 = !{!110, !2, i64 0}
!110 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEE", !2, i64 0}
!111 = !{!112, !2, i64 0}
!112 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIaaEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEE", !2, i64 0}
!113 = !{!114, !2, i64 8}
!114 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6futureIvEE", !2, i64 0, !2, i64 8, !76, i64 16}
!115 = !{!114, !76, i64 16}
!116 = !{!114, !2, i64 0}
!117 = !{!118, !12, i64 16}
!118 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEE", !119, i64 0, !12, i64 16, !12, i64 20}
!119 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm1EEELm0EEE", !12, i64 12}
!120 = !{!121, !12, i64 4}
!121 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm1EEELm0EEE", !122, i64 0, !12, i64 4, !12, i64 8}
!122 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_5agentILm1EEE", !12, i64 0}
!123 = !{i64 0, i64 4, !11, i64 4, i64 12, !7, i64 16, i64 4, !11, i64 20, i64 4, !11, i64 24, i64 4, !11, i64 28, i64 4, !11, i64 32, i64 4, !11, i64 40, i64 8, !13, i64 48, i64 4, !11}
!124 = !{!125, !14, i64 40}
!125 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail19device_properties_tE", !12, i64 0, !3, i64 4, !12, i64 16, !12, i64 20, !12, i64 24, !12, i64 28, !12, i64 32, !14, i64 40, !12, i64 48}
!126 = !{!125, !12, i64 28}
!127 = !{!128, !14, i64 8}
!128 = !{!"_ZTS18cudaFuncAttributes", !14, i64 0, !14, i64 8, !14, i64 16, !12, i64 24, !12, i64 28, !12, i64 32, !12, i64 36, !12, i64 40}
!129 = !{!130, !14, i64 0}
!130 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail21function_attributes_tE", !14, i64 0, !14, i64 8, !12, i64 16, !12, i64 20, !12, i64 24, !14, i64 32}
!131 = !{!128, !14, i64 16}
!132 = !{!130, !14, i64 8}
!133 = !{!128, !12, i64 24}
!134 = !{!130, !12, i64 16}
!135 = !{!128, !12, i64 28}
!136 = !{!130, !12, i64 20}
!137 = !{!128, !12, i64 32}
!138 = !{!130, !12, i64 24}
!139 = !{!128, !14, i64 0}
!140 = !{!130, !14, i64 32}
!141 = !{!125, !12, i64 20}
!142 = !{!125, !12, i64 48}
!143 = !{!125, !12, i64 16}
!144 = !{!125, !12, i64 0}
!145 = !{!125, !12, i64 32}
!146 = !{!125, !12, i64 24}
!147 = !{!148, !12, i64 0}
!148 = !{!"_ZTSN6thrust6detail4consIjNS_9null_typeEEE", !12, i64 0}
!149 = !{!118, !12, i64 20}
!150 = !{!122, !12, i64 0}
!151 = !{i64 0, i64 4, !11}
!152 = !{!119, !12, i64 12}
!153 = !{!121, !12, i64 8}
!154 = !{!155, !14, i64 0}
!155 = !{!"_ZTSN6thrust6detail4consIlNS_9null_typeEEE", !14, i64 0}
!156 = !{!157, !76, i64 0}
!157 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEEEE", !76, i64 0, !158, i64 4, !2, i64 32, !2, i64 40}
!158 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEE"}
!159 = !{!157, !2, i64 32}
!160 = !{!157, !2, i64 40}
!161 = !{!162, !12, i64 64}
!162 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEE", !12, i64 64}
!163 = !{!164, !12, i64 0}
!164 = !{!"_ZTS4dim3", !12, i64 0, !12, i64 4, !12, i64 8}
!165 = !{!164, !12, i64 4}
!166 = !{!164, !12, i64 8}
!167 = !{!168, !12, i64 56}
!168 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIaaEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEE", !12, i64 56}
!169 = !{!170, !14, i64 24}
!170 = !{!"_ZTSN6thrust6detail11vector_baseIbSaIbEEE", !171, i64 0, !14, i64 24}
!171 = !{!"_ZTSN6thrust6detail18contiguous_storageIbSaIbEEE", !172, i64 0, !173, i64 8, !14, i64 16}
!172 = !{!"_ZTSSaIbE"}
!173 = !{!"_ZTSN6thrust6detail15normal_iteratorIPbEE"}
!174 = !{!171, !14, i64 16}
!175 = !{!176, !2, i64 0}
!176 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPbEES3_NS_11use_defaultES5_S5_S5_S5_EE", !2, i64 0}
!177 = !{i64 0, i64 1, !75}
!178 = !{!179, !76, i64 0}
!179 = !{!"_ZTSN6thrust6detail12fill_functorIbEE", !76, i64 0}
!180 = !{!181, !12, i64 0}
!181 = !{!"_ZTSN6thrust4pairIjjEE", !12, i64 0, !12, i64 4}
!182 = !{!181, !12, i64 4}
!183 = !{!184, !14, i64 0}
!184 = !{!"_ZTSN6thrust6detail4consImNS1_IRbNS_9null_typeEEEEE", !14, i64 0, !185, i64 8}
!185 = !{!"_ZTSN6thrust6detail4consIRbNS_9null_typeEEE", !3, i64 0}
!186 = !{!187, !2, i64 0}
!187 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKbEES4_NS_11use_defaultES6_S6_S6_S6_EE", !2, i64 0}
!188 = !{!189, !14, i64 16}
!189 = !{!"_ZTSN6thrust6detail18contiguous_storageIjNS0_18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEEEE", !190, i64 0, !191, i64 8, !14, i64 16}
!190 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorIjNS_6system4cuda6detail3tagEEEEE"}
!191 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES7_EEEE"}
!192 = !{!193, !2, i64 0}
!193 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPjjS5_NS_27random_access_traversal_tagENS_9referenceIjS7_S6_EElEE", !2, i64 0}
!194 = !{!195, !14, i64 8}
!195 = !{!"_ZTSN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EEmEE", !196, i64 0, !14, i64 8}
!196 = !{!"_ZTSN6thrust7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES5_EE"}
!197 = !{!198, !14, i64 8}
!198 = !{!"_ZTSN6thrust4pairINS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultES6_EElEE", !196, i64 0, !14, i64 8}
!199 = !{!200, !12, i64 80}
!200 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEE", !12, i64 80}
!201 = !{!202, !12, i64 72}
!202 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIaEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIaEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEE", !12, i64 72}
!203 = !{i64 0, i64 8, !13}
!204 = !{!205, !14, i64 0}
!205 = !{!"_ZTSN6thrust6detail16advance_iteratorIlEE", !14, i64 0}
!206 = !{!207, !14, i64 16}
!207 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEE", !208, i64 0, !209, i64 8, !14, i64 16}
!208 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system4cuda6detail3tagEEEEE"}
!209 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEE"}
!210 = !{!211, !14, i64 8}
!211 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEE", !212, i64 0, !14, i64 8}
!212 = !{!"_ZTSN6thrust7pointerINS_4pairIaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EE"}
!213 = !{!214, !14, i64 8}
!214 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IaaEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEE", !212, i64 0, !14, i64 8}
!215 = !{i64 1, i64 1, !7, i64 2, i64 1, !7}
!216 = !{!217, !12, i64 80}
!217 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEE", !12, i64 80}
!218 = !{!219, !12, i64 72}
!219 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEE", !12, i64 72}
!220 = !{i64 0, i64 8, !13, i64 8, i64 8, !13, i64 16, i64 8, !13, i64 24, i64 8, !13, i64 32, i64 8, !13}
!221 = !{!222, !14, i64 0}
!222 = !{!"_ZTSN6thrust6system4cuda6detail21aligned_decompositionIlEE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32}
!223 = !{!222, !14, i64 8}
!224 = !{!222, !14, i64 24}
!225 = !{!222, !14, i64 16}
!226 = !{!222, !14, i64 32}
!227 = !{!228, !76, i64 0}
!228 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEEEE", !76, i64 0, !229, i64 4, !2, i64 24, !2, i64 32}
!229 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEE"}
!230 = !{!228, !2, i64 24}
!231 = !{!228, !2, i64 32}
!232 = !{!233, !12, i64 12}
!233 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEE", !234, i64 0, !12, i64 12, !12, i64 16}
!234 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm512EEE", !12, i64 8}
!235 = !{!234, !12, i64 8}
!236 = !{!237, !12, i64 84}
!237 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEE", !12, i64 84}
!238 = !{!239, !12, i64 0}
!239 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_5agentILm3EEE", !12, i64 0}
!240 = !{!233, !12, i64 16}
!241 = !{!242, !12, i64 4}
!242 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm512EEE", !239, i64 0, !12, i64 4}
!243 = !{!244, !14, i64 0}
!244 = !{!"_ZTSN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEE", !14, i64 0, !245, i64 8}
!245 = !{!"_ZTSN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEE", !246, i64 0, !248, i64 16}
!246 = !{!"_ZTSN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEE", !247, i64 0}
!247 = !{!"_ZTSN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIaaEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EE"}
!248 = !{!"_ZTSN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEENS_9null_typeEEE", !249, i64 0}
!249 = !{!"_ZTSN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIaaEEj9add_pairsEE", !250, i64 0}
!250 = !{!"_ZTS9add_pairs"}
!251 = !{!252, !14, i64 16}
!252 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEE", !253, i64 0, !254, i64 8, !14, i64 16}
!253 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEE"}
!254 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEE"}
!255 = !{!256, !2, i64 0}
!256 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEE", !2, i64 0}
!257 = !{!258, !14, i64 8}
!258 = !{!"_ZTSN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEE", !259, i64 0, !14, i64 8}
!259 = !{!"_ZTSN6thrust7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EE"}
!260 = !{!261, !14, i64 8}
!261 = !{!"_ZTSN6thrust4pairINS_7pointerINS_5tupleINS0_IaaEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEE", !259, i64 0, !14, i64 8}
!262 = !{!263, !76, i64 0}
!263 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEEEE", !76, i64 0, !264, i64 4, !2, i64 24, !2, i64 32}
!264 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEE"}
!265 = !{!263, !2, i64 24}
!266 = !{!263, !2, i64 32}
!267 = !{!268, !12, i64 12}
!268 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEE", !269, i64 0, !12, i64 12, !12, i64 16}
!269 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm5EEELm128EEE", !12, i64 8}
!270 = !{!269, !12, i64 8}
!271 = !{!272, !12, i64 108}
!272 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEE", !12, i64 108}
!273 = !{!274, !12, i64 0}
!274 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_5agentILm5EEE", !12, i64 0}
!275 = !{!268, !12, i64 16}
!276 = !{!277, !12, i64 4}
!277 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm5EEELm128EEE", !274, i64 0, !12, i64 4}
!278 = !{!279, !76, i64 0}
!279 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEEEE", !76, i64 0, !280, i64 4, !2, i64 24, !2, i64 32}
!280 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEE"}
!281 = !{!279, !2, i64 24}
!282 = !{!279, !2, i64 32}
!283 = !{!284, !12, i64 12}
!284 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEE", !285, i64 0, !12, i64 12, !12, i64 16}
!285 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm256EEE", !12, i64 8}
!286 = !{!285, !12, i64 8}
!287 = !{!288, !12, i64 68}
!288 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEE", !12, i64 68}
!289 = !{!284, !12, i64 16}
!290 = !{!291, !12, i64 4}
!291 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm256EEE", !239, i64 0, !12, i64 4}
!292 = !{!293, !14, i64 0}
!293 = !{!"_ZTSN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEE", !14, i64 0, !294, i64 8}
!294 = !{!"_ZTSN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIaaEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEE", !254, i64 0, !248, i64 8}
!295 = !{!296, !12, i64 124}
!296 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEE", !12, i64 124}
!297 = !{!298, !12, i64 64}
!298 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEE", !12, i64 64}
!299 = !{!300, !12, i64 56}
!300 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIaaEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEE", !12, i64 56}
!301 = !{!302, !12, i64 64}
!302 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEE", !12, i64 64}
!303 = !{!304, !12, i64 56}
!304 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIaaEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEE", !12, i64 56}
!305 = !{!306, !14, i64 16}
!306 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIaaEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEE", !307, i64 0, !308, i64 8, !14, i64 16}
!307 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIaaEENS_6system3cpp6detail3tagEEEEE"}
!308 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEE"}
!309 = !{!310, !2, i64 0}
!310 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEE", !2, i64 0}
!311 = !{!312, !14, i64 8}
!312 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEE", !313, i64 0, !14, i64 8}
!313 = !{!"_ZTSN6thrust7pointerINS_4pairIaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EE"}
!314 = !{!315, !14, i64 8}
!315 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IaaEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEE", !313, i64 0, !14, i64 8}
!316 = !{!317, !2, i64 0}
!317 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerIvNS_6system3cpp6detail3tagENS_11use_defaultES6_EEPvvS5_NS_27random_access_traversal_tagEvlEE", !2, i64 0}
!318 = !{!319, !319, i64 0}
!319 = !{!"_ZTSSt13_Ios_Openmode", !3, i64 0}
!320 = !{!321, !2, i64 216}
!321 = !{!"_ZTSSt9basic_iosIcSt11char_traitsIcEE", !2, i64 216, !3, i64 224, !76, i64 225, !2, i64 232, !2, i64 240, !2, i64 248, !2, i64 256}
!322 = !{!321, !3, i64 224}
!323 = !{!321, !76, i64 225}
!324 = !{!321, !2, i64 232}
!325 = !{!321, !2, i64 240}
!326 = !{!321, !2, i64 248}
!327 = !{!321, !2, i64 256}
!328 = !{!329, !319, i64 64}
!329 = !{!"_ZTSSt15basic_stringbufIcSt11char_traitsIcESaIcEE", !319, i64 64, !9, i64 72}
!330 = !{!331, !2, i64 8}
!331 = !{!"_ZTSSt15basic_streambufIcSt11char_traitsIcEE", !2, i64 8, !2, i64 16, !2, i64 24, !2, i64 32, !2, i64 40, !2, i64 48, !332, i64 56}
!332 = !{!"_ZTSSt6locale", !2, i64 0}
!333 = !{!331, !2, i64 16}
!334 = !{!331, !2, i64 24}
!335 = !{!331, !2, i64 32}
!336 = !{!331, !2, i64 40}
!337 = !{!331, !2, i64 48}
!338 = !{!339, !339, i64 0}
!339 = !{!"_ZTSSt12_Ios_Iostate", !3, i64 0}
!340 = !{!341, !339, i64 32}
!341 = !{!"_ZTSSt8ios_base", !14, i64 8, !14, i64 16, !342, i64 24, !339, i64 28, !339, i64 32, !2, i64 40, !343, i64 48, !3, i64 64, !12, i64 192, !2, i64 200, !332, i64 208}
!342 = !{!"_ZTSSt13_Ios_Fmtflags", !3, i64 0}
!343 = !{!"_ZTSNSt8ios_base6_WordsE", !2, i64 0, !14, i64 8}
!344 = !{!16, !12, i64 16}
!345 = !{i64 0, i64 2, !346, i64 2, i64 2, !346}
!346 = !{!347, !347, i64 0}
!347 = !{!"short", !3, i64 0}
!348 = !{!349, !347, i64 0}
!349 = !{!"_ZTSN6thrust4pairIssEE", !347, i64 0, !347, i64 2}
!350 = !{!349, !347, i64 2}
!351 = !{!352, !14, i64 24}
!352 = !{!"_ZTSN6thrust6detail11vector_baseIsSaIsEEE", !353, i64 0, !14, i64 24}
!353 = !{!"_ZTSN6thrust6detail18contiguous_storageIsSaIsEEE", !354, i64 0, !355, i64 8, !14, i64 16}
!354 = !{!"_ZTSSaIsE"}
!355 = !{!"_ZTSN6thrust6detail15normal_iteratorIPsEE"}
!356 = !{!353, !14, i64 16}
!357 = !{!358, !2, i64 0}
!358 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPsEES3_NS_11use_defaultES5_S5_S5_S5_EE", !2, i64 0}
!359 = !{i64 0, i64 2, !346}
!360 = !{!361, !347, i64 0}
!361 = !{!"_ZTSN6thrust6detail12fill_functorIsEE", !347, i64 0}
!362 = !{!363, !14, i64 0}
!363 = !{!"_ZTSN6thrust6detail4consImNS1_IRsNS_9null_typeEEEEE", !14, i64 0, !364, i64 8}
!364 = !{!"_ZTSN6thrust6detail4consIRsNS_9null_typeEEE", !3, i64 0}
!365 = !{!366, !14, i64 24}
!366 = !{!"_ZTSN6thrust6detail11vector_baseINS_4pairIssEESaIS3_EEE", !367, i64 0, !14, i64 24}
!367 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIssEESaIS3_EEE", !368, i64 0, !369, i64 8, !14, i64 16}
!368 = !{!"_ZTSSaIN6thrust4pairIssEEE"}
!369 = !{!"_ZTSN6thrust6detail15normal_iteratorIPNS_4pairIssEEEE"}
!370 = !{!367, !14, i64 16}
!371 = !{!372, !2, i64 0}
!372 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIssEEEES5_NS_11use_defaultES7_S7_S7_S7_EE", !2, i64 0}
!373 = !{!374, !14, i64 24}
!374 = !{!"_ZTSN6thrust6detail11vector_baseIsNS_23device_malloc_allocatorIsEEEE", !375, i64 0, !14, i64 24}
!375 = !{!"_ZTSN6thrust6detail18contiguous_storageIsNS_23device_malloc_allocatorIsEEEE", !376, i64 0, !377, i64 8, !14, i64 16}
!376 = !{!"_ZTSN6thrust23device_malloc_allocatorIsEE"}
!377 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_10device_ptrIsEEEE"}
!378 = !{!375, !14, i64 16}
!379 = !{!380, !2, i64 0}
!380 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIsEEPssNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIsEElEE", !2, i64 0}
!381 = !{!382, !2, i64 0}
!382 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKsEES4_NS_11use_defaultES6_S6_S6_S6_EE", !2, i64 0}
!383 = !{!384, !2, i64 0}
!384 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerIsNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPssS5_NS_27random_access_traversal_tagENS_9referenceIsS7_S6_EElEE", !2, i64 0}
!385 = !{!386, !2, i64 0}
!386 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIKsEEPS2_sNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEE", !2, i64 0}
!387 = !{!388, !14, i64 24}
!388 = !{!"_ZTSN6thrust6detail11vector_baseINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEE", !389, i64 0, !14, i64 24}
!389 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIssEENS_23device_malloc_allocatorIS3_EEEE", !390, i64 0, !391, i64 8, !14, i64 16}
!390 = !{!"_ZTSN6thrust23device_malloc_allocatorINS_4pairIssEEEE"}
!391 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEE"}
!392 = !{!389, !14, i64 16}
!393 = !{!394, !2, i64 0}
!394 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIssEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEE", !2, i64 0}
!395 = !{!396, !2, i64 0}
!396 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIssEEEES6_NS_11use_defaultES8_S8_S8_S8_EE", !2, i64 0}
!397 = !{!398, !2, i64 0}
!398 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEE", !2, i64 0}
!399 = !{!400, !2, i64 0}
!400 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIssEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEE", !2, i64 0}
!401 = !{!402, !12, i64 64}
!402 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEE", !12, i64 64}
!403 = !{!404, !12, i64 56}
!404 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIssEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEE", !12, i64 56}
!405 = !{!406, !12, i64 80}
!406 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEE", !12, i64 80}
!407 = !{!408, !12, i64 72}
!408 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIsEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIsEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEE", !12, i64 72}
!409 = !{!410, !14, i64 16}
!410 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEE", !411, i64 0, !412, i64 8, !14, i64 16}
!411 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system4cuda6detail3tagEEEEE"}
!412 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEE"}
!413 = !{!414, !14, i64 8}
!414 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEE", !415, i64 0, !14, i64 8}
!415 = !{!"_ZTSN6thrust7pointerINS_4pairIssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EE"}
!416 = !{!417, !14, i64 8}
!417 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IssEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEE", !415, i64 0, !14, i64 8}
!418 = !{i64 2, i64 2, !346, i64 4, i64 2, !346}
!419 = !{!420, !12, i64 80}
!420 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEE", !12, i64 80}
!421 = !{!422, !12, i64 80}
!422 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEE", !12, i64 80}
!423 = !{!424, !12, i64 84}
!424 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm512EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEE", !12, i64 84}
!425 = !{!426, !14, i64 0}
!426 = !{!"_ZTSN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEE", !14, i64 0, !427, i64 8}
!427 = !{!"_ZTSN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEE", !428, i64 0, !430, i64 16}
!428 = !{!"_ZTSN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEE", !429, i64 0}
!429 = !{!"_ZTSN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIssEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EE"}
!430 = !{!"_ZTSN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEENS_9null_typeEEE", !431, i64 0}
!431 = !{!"_ZTSN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIssEEj9add_pairsEE", !250, i64 0}
!432 = !{!433, !14, i64 16}
!433 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEE", !434, i64 0, !435, i64 8, !14, i64 16}
!434 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEE"}
!435 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEE"}
!436 = !{!437, !2, i64 0}
!437 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEE", !2, i64 0}
!438 = !{!439, !14, i64 8}
!439 = !{!"_ZTSN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEE", !440, i64 0, !14, i64 8}
!440 = !{!"_ZTSN6thrust7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EE"}
!441 = !{!442, !14, i64 8}
!442 = !{!"_ZTSN6thrust4pairINS_7pointerINS_5tupleINS0_IssEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEE", !440, i64 0, !14, i64 8}
!443 = !{!444, !12, i64 108}
!444 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEE", !12, i64 108}
!445 = !{!446, !12, i64 68}
!446 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEE", !12, i64 68}
!447 = !{!448, !14, i64 0}
!448 = !{!"_ZTSN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEE", !14, i64 0, !449, i64 8}
!449 = !{!"_ZTSN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIssEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEE", !435, i64 0, !430, i64 8}
!450 = !{!451, !12, i64 124}
!451 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEE", !12, i64 124}
!452 = !{!453, !12, i64 64}
!453 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEE", !12, i64 64}
!454 = !{!455, !12, i64 56}
!455 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIssEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEE", !12, i64 56}
!456 = !{!457, !12, i64 64}
!457 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEE", !12, i64 64}
!458 = !{!459, !12, i64 56}
!459 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIssEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEE", !12, i64 56}
!460 = !{!461, !14, i64 16}
!461 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIssEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEE", !462, i64 0, !463, i64 8, !14, i64 16}
!462 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIssEENS_6system3cpp6detail3tagEEEEE"}
!463 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEE"}
!464 = !{!465, !2, i64 0}
!465 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEE", !2, i64 0}
!466 = !{!467, !14, i64 8}
!467 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEE", !468, i64 0, !14, i64 8}
!468 = !{!"_ZTSN6thrust7pointerINS_4pairIssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EE"}
!469 = !{!470, !14, i64 8}
!470 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IssEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEE", !468, i64 0, !14, i64 8}
!471 = !{i64 0, i64 4, !11, i64 4, i64 4, !11}
!472 = !{!473, !14, i64 24}
!473 = !{!"_ZTSN6thrust6detail11vector_baseIiSaIiEEE", !474, i64 0, !14, i64 24}
!474 = !{!"_ZTSN6thrust6detail18contiguous_storageIiSaIiEEE", !475, i64 0, !476, i64 8, !14, i64 16}
!475 = !{!"_ZTSSaIiE"}
!476 = !{!"_ZTSN6thrust6detail15normal_iteratorIPiEE"}
!477 = !{!474, !14, i64 16}
!478 = !{!479, !2, i64 0}
!479 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPiEES3_NS_11use_defaultES5_S5_S5_S5_EE", !2, i64 0}
!480 = !{!481, !12, i64 0}
!481 = !{!"_ZTSN6thrust6detail12fill_functorIiEE", !12, i64 0}
!482 = !{!483, !14, i64 0}
!483 = !{!"_ZTSN6thrust6detail4consImNS1_IRiNS_9null_typeEEEEE", !14, i64 0, !484, i64 8}
!484 = !{!"_ZTSN6thrust6detail4consIRiNS_9null_typeEEE", !3, i64 0}
!485 = !{!486, !14, i64 24}
!486 = !{!"_ZTSN6thrust6detail11vector_baseINS_4pairIiiEESaIS3_EEE", !487, i64 0, !14, i64 24}
!487 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIiiEESaIS3_EEE", !488, i64 0, !489, i64 8, !14, i64 16}
!488 = !{!"_ZTSSaIN6thrust4pairIiiEEE"}
!489 = !{!"_ZTSN6thrust6detail15normal_iteratorIPNS_4pairIiiEEEE"}
!490 = !{!487, !14, i64 16}
!491 = !{!492, !2, i64 0}
!492 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPNS_4pairIiiEEEES5_NS_11use_defaultES7_S7_S7_S7_EE", !2, i64 0}
!493 = !{!494, !14, i64 24}
!494 = !{!"_ZTSN6thrust6detail11vector_baseIiNS_23device_malloc_allocatorIiEEEE", !495, i64 0, !14, i64 24}
!495 = !{!"_ZTSN6thrust6detail18contiguous_storageIiNS_23device_malloc_allocatorIiEEEE", !496, i64 0, !497, i64 8, !14, i64 16}
!496 = !{!"_ZTSN6thrust23device_malloc_allocatorIiEE"}
!497 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_10device_ptrIiEEEE"}
!498 = !{!495, !14, i64 16}
!499 = !{!500, !2, i64 0}
!500 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIiEEPiiNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIiEElEE", !2, i64 0}
!501 = !{!502, !2, i64 0}
!502 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKiEES4_NS_11use_defaultES6_S6_S6_S6_EE", !2, i64 0}
!503 = !{!504, !2, i64 0}
!504 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerIiNS_6system4cuda6detail3tagENS_11use_defaultES6_EEPiiS5_NS_27random_access_traversal_tagENS_9referenceIiS7_S6_EElEE", !2, i64 0}
!505 = !{!506, !2, i64 0}
!506 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIKiEEPS2_iNS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS2_EElEE", !2, i64 0}
!507 = !{!508, !14, i64 24}
!508 = !{!"_ZTSN6thrust6detail11vector_baseINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEE", !509, i64 0, !14, i64 24}
!509 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIiiEENS_23device_malloc_allocatorIS3_EEEE", !510, i64 0, !511, i64 8, !14, i64 16}
!510 = !{!"_ZTSN6thrust23device_malloc_allocatorINS_4pairIiiEEEE"}
!511 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEE"}
!512 = !{!509, !14, i64 16}
!513 = !{!514, !2, i64 0}
!514 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrINS_4pairIiiEEEEPS3_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS3_EElEE", !2, i64 0}
!515 = !{!516, !2, i64 0}
!516 = !{!"_ZTSN6thrust16iterator_adaptorINS_6detail15normal_iteratorIPKNS_4pairIiiEEEES6_NS_11use_defaultES8_S8_S8_S8_EE", !2, i64 0}
!517 = !{!518, !2, i64 0}
!518 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEE", !2, i64 0}
!519 = !{!520, !2, i64 0}
!520 = !{!"_ZTSN6thrust16iterator_adaptorINS_10device_ptrIKNS_4pairIiiEEEEPS4_S3_NS_6system4cuda6detail3tagENS_27random_access_traversal_tagENS_16device_referenceIS4_EElEE", !2, i64 0}
!521 = !{!522, !12, i64 64}
!522 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEElNS_9null_typeESR_SR_SR_SR_SR_EEEEEE", !12, i64 64}
!523 = !{!524, !12, i64 56}
!524 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_10device_ptrINS_4pairIiiEEEENS_6detail16wrapped_functionINSM_23allocator_traits_detail5gozerEvEEjNS_9null_typeESR_SR_SR_SR_SR_EEEEEE", !12, i64 56}
!525 = !{!526, !12, i64 80}
!526 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEElST_ST_ST_ST_ST_ST_EEEEEE", !12, i64 80}
!527 = !{!528, !12, i64 72}
!528 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrIiEEEESN_NSK_INS_7pointerIjNS2_3tagENS_11use_defaultESQ_EEEENS_9null_typeEST_ST_ST_ST_ST_ST_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINSJ_13binary_negateINS_8equal_toIiEEEEEEvEEjST_ST_ST_ST_ST_ST_EEEEEE", !12, i64 72}
!529 = !{!530, !14, i64 16}
!530 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system4cuda6detail3tagEEEEEEE", !531, i64 0, !532, i64 8, !14, i64 16}
!531 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system4cuda6detail3tagEEEEE"}
!532 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES9_EEEE"}
!533 = !{!534, !14, i64 8}
!534 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EEmEE", !535, i64 0, !14, i64 8}
!535 = !{!"_ZTSN6thrust7pointerINS_4pairIiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EE"}
!536 = !{!537, !14, i64 8}
!537 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IiiEENS_6system4cuda6detail3tagENS_11use_defaultES7_EElEE", !535, i64 0, !14, i64 8}
!538 = !{i64 4, i64 4, !11, i64 8, i64 4, !11}
!539 = !{!540, !12, i64 88}
!540 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEElSX_SX_SX_SX_SX_SX_EEEEEE", !12, i64 88}
!541 = !{!542, !12, i64 80}
!542 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENSK_INS_7pointerIjNS2_3tagENS_11use_defaultESS_EEEENSK_INSQ_ISN_SR_SS_SS_EEEENS_9null_typeESX_SX_SX_SX_SX_SX_EEEENSJ_16wrapped_functionINSJ_24binary_transform_functorINS0_6detail7generic6detail12new_value_ifINS_6negateIjEESN_SN_EEEEvEEjSX_SX_SX_SX_SX_SX_EEEEEE", !12, i64 80}
!543 = !{!544, !12, i64 84}
!544 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm256EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEElNSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEE", !12, i64 84}
!545 = !{!546, !14, i64 0}
!546 = !{!"_ZTSN6thrust6detail4consIlNS1_INS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEEEE", !14, i64 0, !547, i64 8}
!547 = !{!"_ZTSN6thrust6detail4consINS_12zip_iteratorINS_5tupleINS0_15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS4_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESF_EEEENS_9null_typeESI_SI_SI_SI_SI_SI_SI_EEEENS1_INSB_6detail7generic6detail22segmented_scan_functorIS7_j9add_pairsEESI_EEEE", !548, i64 0, !550, i64 16}
!548 = !{!"_ZTSN6thrust12zip_iteratorINS_5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS3_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESE_EEEENS_9null_typeESH_SH_SH_SH_SH_SH_SH_EEEE", !549, i64 0}
!549 = !{!"_ZTSN6thrust5tupleINS_6detail15normal_iteratorINS_10device_ptrINS_4pairIiiEEEEEENS2_INS_7pointerIjNS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS_9null_typeESG_SG_SG_SG_SG_SG_SG_EE"}
!550 = !{!"_ZTSN6thrust6detail4consINS_6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEENS_9null_typeEEE", !551, i64 0}
!551 = !{!"_ZTSN6thrust6system6detail7generic6detail22segmented_scan_functorINS_4pairIiiEEj9add_pairsEE", !250, i64 0}
!552 = !{!553, !14, i64 16}
!553 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS0_18no_throw_allocatorINS0_19temporary_allocatorIS6_NS_6system4cuda6detail3tagEEEEEEE", !554, i64 0, !555, i64 8, !14, i64 16}
!554 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagEEEEE"}
!555 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES6_S6_S6_S6_S6_S6_S6_EENS_6system4cuda6detail3tagENS_11use_defaultESC_EEEE"}
!556 = !{!557, !2, i64 0}
!557 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES5_S5_S5_S5_S5_S5_S5_EENS_6system4cuda6detail3tagENS_11use_defaultESB_EEPS6_S6_SA_NS_27random_access_traversal_tagENS_9referenceIS6_SC_SB_EElEE", !2, i64 0}
!558 = !{!559, !14, i64 8}
!559 = !{!"_ZTSN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EEmEE", !560, i64 0, !14, i64 8}
!560 = !{!"_ZTSN6thrust7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EE"}
!561 = !{!562, !14, i64 8}
!562 = !{!"_ZTSN6thrust4pairINS_7pointerINS_5tupleINS0_IiiEEjNS_9null_typeES4_S4_S4_S4_S4_S4_S4_EENS_6system4cuda6detail3tagENS_11use_defaultESA_EElEE", !560, i64 0, !14, i64 8}
!563 = !{!564, !12, i64 108}
!564 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16accumulate_tilesENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_SU_EEEEEE", !12, i64 108}
!565 = !{!566, !76, i64 0}
!566 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_12async_launchINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEEEE", !76, i64 0, !567, i64 4, !2, i64 24, !2, i64 32}
!567 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEE"}
!568 = !{!566, !2, i64 24}
!569 = !{!566, !2, i64 32}
!570 = !{!571, !12, i64 12}
!571 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEE", !572, i64 0, !12, i64 12, !12, i64 16}
!572 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_16concurrent_groupINS3_5agentILm3EEELm128EEE", !12, i64 8}
!573 = !{!572, !12, i64 8}
!574 = !{!575, !12, i64 68}
!575 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm3EEELm128EEELm0EEENS4_7closureINS2_11scan_detail16inclusive_scan_nENS_5tupleINS4_6cursorILj1EEENS_6detail15normal_iteratorINS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESN_SN_SN_SN_SN_SN_SN_EENS2_3tagENS_11use_defaultESQ_EEEElSS_NS0_6detail7generic6detail22segmented_scan_functorISM_j9add_pairsEESN_SN_SN_SN_SN_EEEEEE", !12, i64 68}
!576 = !{!571, !12, i64 16}
!577 = !{!578, !12, i64 4}
!578 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail12group_detail10group_baseINS3_5agentILm3EEELm128EEE", !239, i64 0, !12, i64 4}
!579 = !{!580, !14, i64 0}
!580 = !{!"_ZTSN6thrust6detail4consIlNS1_INS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEEEE", !14, i64 0, !581, i64 8}
!581 = !{!"_ZTSN6thrust6detail4consINS0_15normal_iteratorINS_7pointerINS_5tupleINS_4pairIiiEEjNS_9null_typeES7_S7_S7_S7_S7_S7_S7_EENS_6system4cuda6detail3tagENS_11use_defaultESD_EEEENS1_INS9_6detail7generic6detail22segmented_scan_functorIS6_j9add_pairsEES7_EEEE", !555, i64 0, !550, i64 8}
!582 = !{!583, !12, i64 124}
!583 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm5EEELm128EEELm0EEENS4_7closureINS2_11scan_detail19inclusive_downsweepENS_5tupleINS4_6cursorILj1EEENS_12zip_iteratorINSF_INS_6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESP_EEEENSK_INSL_IjSO_SP_SP_EEEENS_9null_typeESU_SU_SU_SU_SU_SU_SU_EEEENS2_21aligned_decompositionIlEENSK_INSL_INSF_ISN_jSU_SU_SU_SU_SU_SU_SU_SU_EESO_SP_SP_EEEENSI_INSF_INSK_INS_10device_ptrISN_EEEEST_SU_SU_SU_SU_SU_SU_SU_SU_EEEENS0_6detail7generic6detail22segmented_scan_functorISN_j9add_pairsEESU_SU_SU_SU_EEEEEE", !12, i64 124}
!584 = !{!585, !12, i64 64}
!585 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEElSL_SL_SL_SL_SL_SL_EEEEEE", !12, i64 64}
!586 = !{!587, !12, i64 56}
!587 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINSF_INS_4pairIiiEEjNS_9null_typeESL_SL_SL_SL_SL_SL_SL_EENS2_3tagENS_11use_defaultESO_EENS_6detail16wrapped_functionINSQ_23allocator_traits_detail5gozerEvEEjSL_SL_SL_SL_SL_SL_EEEEEE", !12, i64 56}
!588 = !{!589, !12, i64 64}
!589 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEElNS_9null_typeEST_ST_ST_ST_ST_EEEEEE", !12, i64 64}
!590 = !{!591, !12, i64 56}
!591 = !{!"_ZTSN6thrust6system4cuda6detail5bulk_6detail9cuda_taskINS3_14parallel_groupINS3_16concurrent_groupINS3_5agentILm1EEELm0EEELm0EEENS4_7closureINS2_17for_each_n_detail15for_each_kernelENS_5tupleINS4_6cursorILj0EEENS_7pointerINS_4pairIiiEENS2_3tagENS_11use_defaultESM_EENS_6detail16wrapped_functionINSO_23allocator_traits_detail5gozerEvEEjNS_9null_typeEST_ST_ST_ST_ST_EEEEEE", !12, i64 56}
!592 = !{!593, !14, i64 16}
!593 = !{!"_ZTSN6thrust6detail18contiguous_storageINS_4pairIiiEENS0_18no_throw_allocatorINS0_19temporary_allocatorIS3_NS_6system3cpp6detail3tagEEEEEEE", !594, i64 0, !595, i64 8, !14, i64 16}
!594 = !{!"_ZTSN6thrust6detail18no_throw_allocatorINS0_19temporary_allocatorINS_4pairIiiEENS_6system3cpp6detail3tagEEEEE"}
!595 = !{!"_ZTSN6thrust6detail15normal_iteratorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES9_EEEE"}
!596 = !{!597, !2, i64 0}
!597 = !{!"_ZTSN6thrust16iterator_adaptorINS_7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES8_EEPS3_S3_S7_NS_27random_access_traversal_tagENS_9referenceIS3_S9_S8_EElEE", !2, i64 0}
!598 = !{!599, !14, i64 8}
!599 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EEmEE", !600, i64 0, !14, i64 8}
!600 = !{!"_ZTSN6thrust7pointerINS_4pairIiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EE"}
!601 = !{!602, !14, i64 8}
!602 = !{!"_ZTSN6thrust4pairINS_7pointerINS0_IiiEENS_6system3cpp6detail3tagENS_11use_defaultES7_EElEE", !600, i64 0, !14, i64 8}
!603 = !{!20, !2, i64 16}